[fpc-devel] Typed addresses by default

Micha Nelissen micha at neli.hopto.org
Tue Oct 3 00:09:31 CEST 2006


Hi,

Attached patch modifies compiler to enable typed addresses ({$T+}) for
fpc and objfpc modes by default. It fixes the rtl and compiler to
compile again. Most of these fixes are simple pointer to array vs.
pointer to element of array changes, but some reveal ugly code IMHO ;-).

Anyway, any opinions on whether it is useful to enforce typed addresses
by default ?

Micha
-------------- next part --------------
Index: rtl/unix/unix.pp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/unix/unix.pp	(revision 4765)
+++ rtl/unix/unix.pp	(working copy)
@@ -858,7 +858,7 @@
       end;
      textrec(f).bufptr:=3D op textrec(f).buffer;
    {Save the process ID - needed when closing }
-     pl:=3D@(textrec(f).userdata[2]);
+     pl:=3Dpcint(@(textrec(f).userdata[2]));
      pl^:=3Dpid;
      textrec(f).closefunc:=3D op PCloseText;
    end;
@@ -971,7 +971,7 @@
         f:=3Dpipi;
       end;
    {Save the process ID - needed when closing }
-     pl:=3D@(filerec(f).userdata[2]);
+     pl:=3Dpcint(@(filerec(f).userdata[2]));
      pl^:=3Dpid;
    end;
  POpen:=3D0;
@@ -1034,11 +1034,11 @@
      close(pipo);
      close(pipi);
      {Save the process ID - needed when closing }
-     pl:=3D@(textrec(StreamIn).userdata[2]);
+     pl:=3Dpcint(@(textrec(StreamIn).userdata[2]));
      pl^:=3Dpid;
      textrec(StreamIn).closefunc:=3D op PCloseText;
      {Save the process ID - needed when closing }
-     pl:=3D@(textrec(StreamOut).userdata[2]);
+     pl:=3Dpcint(@(textrec(StreamOut).userdata[2]));
      pl^:=3Dpid;
      textrec(StreamOut).closefunc:=3D op PCloseText;
      AssignStream:=3DPid;
@@ -1124,15 +1124,15 @@
     Close(PipeOut);
     Close(PipeIn);
     // Save the process ID - needed when closing
-    pl :=3D @(TextRec(StreamIn).userdata[2]);
+    pl :=3D pcint(@(TextRec(StreamIn).userdata[2]));
     pl^ :=3D pid;
     TextRec(StreamIn).closefunc :=3D @PCloseText;
     // Save the process ID - needed when closing
-    pl :=3D @(TextRec(StreamOut).userdata[2]);
+    pl :=3D pcint(@(TextRec(StreamOut).userdata[2]));
     pl^ :=3D pid;
     TextRec(StreamOut).closefunc :=3D @PCloseText;
     // Save the process ID - needed when closing
-    pl :=3D @(TextRec(StreamErr).userdata[2]);
+    pl :=3D pcint(@(TextRec(StreamErr).userdata[2]));
     pl^ :=3D pid;
     TextRec(StreamErr).closefunc :=3D @PCloseText;
     AssignStream :=3D pid;
Index: rtl/unix/cthreads.pp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/unix/cthreads.pp	(revision 4765)
+++ rtl/unix/cthreads.pp	(working copy)
@@ -223,7 +223,7 @@
       // don't create detached, we need to be able to join (waitfor) on
       // the newly created thread!
       //pthread_attr_setdetachstate(@thread_attr, PTHREAD_CREATE_DETACHED);
-      if pthread_create(@threadid, @thread_attr, @ThreadMain,ti) <> 0 then=
 begin
+      if pthread_create(ppthread_t(@threadid), @thread_attr, @ThreadMain,t=
i) <> 0 then begin
         threadid :=3D TThreadID(0);
       end;
       CBeginThread:=3Dthreadid;
Index: rtl/unix/cwstring.pp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/unix/cwstring.pp	(revision 4765)
+++ rtl/unix/cwstring.pp	(working copy)
@@ -153,7 +153,7 @@
     destpos:=3Dpchar(dest);
     outleft:=3Doutlength;
     lockiconv(lock_wide2ansi);
-    while iconv(iconv_wide2ansi, op srcpos, op srclen, op destpos, op outleft)=3Dsize_=
t(-1) do
+    while iconv(iconv_wide2ansi,ppchar(@srcpos), op srclen, op destpos, op outleft)=
=3Dsize_t(-1) do
       begin
         case fpgetCerrno of
           ESysEILSEQ:
@@ -210,7 +210,7 @@
     destpos:=3Dpchar(dest);
     outleft:=3Doutlength*2;
     lockiconv(lock_ansi2wide);
-    while iconv(iconv_ansi2wide, op srcpos, op len, op destpos, op outleft)=3Dsize_t(-=
1) do
+    while iconv(iconv_ansi2wide, op srcpos,psize(@len), op destpos, op outleft)=3Ds=
ize_t(-1) do
       begin
         case fpgetCerrno of
          ESysEILSEQ:
@@ -286,7 +286,7 @@
     destpos:=3Dpchar(dest);
     outleft:=3Doutlength*4;
     lockiconv(lock_ansi2ucs4);
-    while iconv(iconv_ansi2ucs4, op srcpos, op len, op destpos, op outleft)=3Dsize_t(-=
1) do
+    while iconv(iconv_ansi2ucs4, op srcpos,psize(@len), op destpos, op outleft)=3Ds=
ize_t(-1) do
       begin
         case fpgetCerrno of
           ESysE2BIG:
Index: rtl/unix/sysdir.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/unix/sysdir.inc	(revision 4765)
+++ rtl/unix/sysdir.inc	(working copy)
@@ -32,7 +32,7 @@
    exit;
   Move(s[1], Buffer, Length(s));
   Buffer[Length(s)] :=3D #0;
-  If Fpmkdir(@buffer, MODE_MKDIR)<0 Then
+  If Fpmkdir(@buffer[0], MODE_MKDIR)<0 Then
    Errno2Inoutres
   Else
    InOutRes:=3D0;
@@ -49,7 +49,7 @@
    exit;
   Move(s[1], Buffer, Length(s));
   Buffer[Length(s)] :=3D #0;
-  If Fprmdir(@buffer)<0 Then
+  If Fprmdir(@buffer[0])<0 Then
    Errno2Inoutres
   Else
    InOutRes:=3D0;
@@ -64,7 +64,7 @@
    exit;
   Move(s[1], Buffer, Length(s));
   Buffer[Length(s)] :=3D #0;
-  If Fpchdir(@buffer)<0 Then
+  If Fpchdir(@buffer[0])<0 Then
    Errno2Inoutres
   Else
    InOutRes:=3D0;
@@ -93,7 +93,7 @@
 begin
   dir:=3D'';
 {$ifdef usegetcwd}
- if Fpgetcwd(@buf,sizeof(buf))<>nil then
+ if Fpgetcwd(@buf[0],sizeof(buf))<>nil then
    dir:=3Dstrpas(buf);
 {$else}
   thedir:=3D'';
Index: rtl/unix/dos.pp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/unix/dos.pp	(revision 4765)
+++ rtl/unix/dos.pp	(working copy)
@@ -648,7 +648,7 @@
            Move(f.SearchSpec[1], DirName[0], f.NamePos);
            DirName[f.NamePos] :=3D #0;
          End;
-        f.DirPtr :=3D fpopendir(@(DirName));
+        f.DirPtr :=3D fpopendir(@DirName[0]);
         If f.DirPtr <> nil Then
          begin
            ArrayPos:=3DFindLastUsed;
@@ -673,7 +673,7 @@
      if p=3Dnil then
       FName:=3D''
      else
-      FName:=3DStrpas(@p^.d_name);
+      FName:=3DStrpas(@p^.d_name[0]);
      If FName=3D'' Then
       Finished:=3DTrue
      Else
@@ -767,7 +767,7 @@
   LinAttr : longint;
 Begin
   DosError:=3D0;
-  if FPStat(@textrec(f).name,info)<0 then
+  if FPStat(@textrec(f).name[0],info)<0 then
    begin
      Attr:=3D0;
      DosError:=3D3;
@@ -779,7 +779,7 @@
    Attr:=3D$10
   else
    Attr:=3D$0;
-  if fpAccess(@textrec(f).name,W_OK)<0 then
+  if fpAccess(@textrec(f).name[0],W_OK)<0 then
    Attr:=3DAttr or $1;
   if filerec(f).name[0]=3D'.' then
    Attr:=3DAttr or $2;
@@ -816,7 +816,7 @@
       UnPackTime(Time,DT);
       modtime:=3DDTToUnixDate(DT);
     end;
-  if fputime(@filerec(f).name, op utim)<0 then
+  if fputime(@filerec(f).name[0], op utim)<0 then
     begin
       Time:=3D0;
       doserror:=3D3;
Index: rtl/linux/gpm.pp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/linux/gpm.pp	(revision 4765)
+++ rtl/linux/gpm.pp	(working copy)
@@ -534,7 +534,7 @@
   strcopy(addr.path, GPM_NODE_CTL);
   i:=3Dsizeof(addr.family)+length(GPM_NODE_CTL);
 =

-  if fpconnect(gpm_fd, op addr,i)<0 then
+  if fpconnect(gpm_fd,psockaddr(@addr),i)<0 then
     begin
 {         gpm_report(GPM_PR_INFO,GPM_MESS_DOUBLE_S,GPM_NODE_CTL,strerror(e=
rrno));}
       {Well, try to open a chr device called /dev/gpmctl. This should
Index: rtl/linux/unxfunc.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/linux/unxfunc.inc	(revision 4765)
+++ rtl/linux/unxfunc.inc	(working copy)
@@ -33,13 +33,13 @@
 =

 Function PClose(Var F:text) :cint;
 var
-  pl  : ^cint;
+  pl  : pcint;
   res : cint;
   pid : cint;
 begin
   fpclose(Textrec(F).Handle);
 { closed our side, Now wait for the other - this appears to be needed ?? }
-  pl:=3D@(textrec(f).userdata[2]);
+  pl:=3Dpcint(@(textrec(f).userdata[2]));
   { avoid alignment error on sparc }
   move(pl^,pid,sizeof(pid));
   fpwaitpid(pid, op res,0);
@@ -54,7 +54,7 @@
 begin
   fpclose(filerec(F).Handle);
 { closed our side, Now wait for the other - this appears to be needed ?? }
-  pl:=3D@(filerec(f).userdata[2]);
+  pl:=3Dpcint(@(filerec(f).userdata[2]));
   { avoid alignment error on sparc }
   move(pl^,pid,sizeof(pid));
   fpwaitpid(pid, op res,0);
Index: rtl/linux/oldlinux.pp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/linux/oldlinux.pp	(revision 4765)
+++ rtl/linux/oldlinux.pp	(working copy)
@@ -2792,7 +2792,7 @@
   sr.reg2:=3DTextrec(F).Handle;
   SysCall (syscall_nr_close,sr);
 { closed our side, Now wait for the other - this appears to be needed ?? }
-  pl:=3D@(textrec(f).userdata[2]);
+  pl:=3Dplongint(@(textrec(f).userdata[2]));
   waitpid(pl^, op res,0);
   pclose:=3Dres shr 8;
 end;
@@ -2807,7 +2807,7 @@
   sr.reg2:=3DFileRec(F).Handle;
   SysCall (Syscall_nr_close,sr);
 { closed our side, Now wait for the other - this appears to be needed ?? }
-  pl:=3D@(filerec(f).userdata[2]);
+  pl:=3Dplongint(@(filerec(f).userdata[2]));
   waitpid(pl^, op res,0);
   pclose:=3Dres shr 8;
 end;
@@ -4516,7 +4516,7 @@
         textrec(f).bufptr:=3D op textrec(f).buffer;
       end;
    {Save the process ID - needed when closing }
-     pl:=3D@(textrec(f).userdata[2]);
+     pl:=3Dplongint(@(textrec(f).userdata[2]));
      pl^:=3Dpid;
      textrec(f).closefunc:=3D op PCloseText;
    end;
@@ -4602,7 +4602,7 @@
         f:=3Dpipi;
       end;
    {Save the process ID - needed when closing }
-     pl:=3D@(filerec(f).userdata[2]);
+     pl:=3Dplongint(@(filerec(f).userdata[2]));
      pl^:=3Dpid;
    end;
 end;
@@ -4666,11 +4666,11 @@
      close(pipo);
      close(pipi);
      {Save the process ID - needed when closing }
-     pl:=3D@(textrec(StreamIn).userdata[2]);
+     pl:=3Dplongint(@(textrec(StreamIn).userdata[2]));
      pl^:=3Dpid;
      textrec(StreamIn).closefunc:=3D op PCloseText;
      {Save the process ID - needed when closing }
-     pl:=3D@(textrec(StreamOut).userdata[2]);
+     pl:=3Dplongint(@(textrec(StreamOut).userdata[2]));
      pl^:=3Dpid;
      textrec(StreamOut).closefunc:=3D op PCloseText;
      AssignStream:=3DPid;
@@ -4757,15 +4757,15 @@
     Close(PipeOut);
     Close(PipeIn);
     // Save the process ID - needed when closing
-    pl :=3D @(TextRec(StreamIn).userdata[2]);
+    pl :=3D plongint(@(TextRec(StreamIn).userdata[2]));
     pl^ :=3D pid;
     TextRec(StreamIn).closefunc :=3D @PCloseText;
     // Save the process ID - needed when closing
-    pl :=3D @(TextRec(StreamOut).userdata[2]);
+    pl :=3D plongint(@(TextRec(StreamOut).userdata[2]));
     pl^ :=3D pid;
     TextRec(StreamOut).closefunc :=3D @PCloseText;
     // Save the process ID - needed when closing
-    pl :=3D @(TextRec(StreamErr).userdata[2]);
+    pl :=3D plongint(@(TextRec(StreamErr).userdata[2]));
     pl^ :=3D pid;
     TextRec(StreamErr).closefunc :=3D @PCloseText;
     AssignStream :=3D pid;
@@ -5059,15 +5059,15 @@
     d:=3DReaddir(dirstream);
     while (d<>nil) do
      begin
-       name:=3Dn+'/'+strpas(@(d^.name));
+       name:=3Dn+'/'+strpas(@(d^.name[0]));
        fstat(name,st);
        if linuxerror=3D0 then
         begin
           if ((st.mode and $E000)=3D$4000) and  { if it is a directory }
-             (strpas(@(d^.name))<>'.') and    { but not ., .. and fd subdi=
rs }
-             (strpas(@(d^.name))<>'..') and
-             (strpas(@(d^.name))<>'') and
-             (strpas(@(d^.name))<>'fd') then
+             (strpas(@(d^.name[0]))<>'.') and    { but not ., .. and fd su=
bdirs }
+             (strpas(@(d^.name[0]))<>'..') and
+             (strpas(@(d^.name[0]))<>'') and
+             (strpas(@(d^.name[0]))<>'fd') then
            begin                      {we found a directory, search inside=
 it}
              if mysearch(name) then
               begin                 {the device is here}
Index: rtl/inc/mouse.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/inc/mouse.inc	(revision 4765)
+++ rtl/inc/mouse.inc	(working copy)
@@ -25,8 +25,8 @@
 Procedure ClearMouseEventQueue;
 =

 begin
-  PendingMouseHead:=3D op PendingMouseEvent;
-  PendingMouseTail:=3D op PendingMouseEvent;
+  PendingMouseHead:=3D op PendingMouseEvent[0];
+  PendingMouseTail:=3D op PendingMouseEvent[0];
   PendingMouseEvents:=3D0;
   FillChar(LastMouseEvent,sizeof(TMouseEvent),0);
 end;
@@ -119,7 +119,7 @@
   MouseEvent:=3DPendingMouseHead^;
   inc(PendingMouseHead);
   if PtrInt(PendingMouseHead)=3DPtrint(@PendingMouseEvent)+sizeof(PendingM=
ouseEvent) then
-   PendingMouseHead:=3D op PendingMouseEvent;
+   PendingMouseHead:=3D op PendingMouseEvent[0];
   dec(PendingMouseEvents);
   if (LastMouseEvent.x<>MouseEvent.x) or
      (LastMouseEvent.y<>MouseEvent.y) then
@@ -162,7 +162,7 @@
     PendingMouseTail^:=3DMouseEvent;
     inc(PendingMouseTail);
     if PtrInt(PendingMouseTail)=3DPtrint(@PendingMouseEvent)+sizeof(Pendin=
gMouseEvent) then
-      PendingMouseTail:=3D op PendingMouseEvent;
+      PendingMouseTail:=3D op PendingMouseEvent[0];
     inc(PendingMouseEvents);
     end
   else
Index: rtl/inc/variants.pp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/inc/variants.pp	(revision 4765)
+++ rtl/inc/variants.pp	(working copy)
@@ -3481,7 +3481,7 @@
 =

 function FindVarData(const V: Variant): PVarData;
   begin
-    result:=3D op V;
+    result:=3Dpvardata(@V);
     while result^.vtype=3DvarVariant or VarByRef do
       result:=3DPVarData(result^.VPointer);
   end;
Index: rtl/inc/text.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/inc/text.inc	(revision 4765)
+++ rtl/inc/text.inc	(working copy)
@@ -939,7 +939,7 @@
      inc(p);}
     while p<maxp do
       begin
-        q:=3D op stop_chars;
+        q:=3D op stop_chars[0];
         while (q^<>#0) and (p^<>q^) do
           inc(q);
         if p^=3Dq^ then =

Index: rtl/inc/objects.pp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/inc/objects.pp	(revision 4765)
+++ rtl/inc/objects.pp	(working copy)
@@ -981,13 +981,14 @@
 FUNCTION TObject.Is_Object(P:Pointer):Boolean;
 TYPE
    PVMT=3D^VMT;
+   PPVMT=3D^PVMT;
    VMT=3DRECORD
      Size,NegSize:Longint;
      ParentLink:PVMT;
    END;
-VAR SP:^PVMT; Q:PVMT;
+VAR SP:PPVMT; Q:PVMT;
 BEGIN
-   SP:=3D op SELF;
+   SP:=3DPPVMT(@SELF);
    Q:=3DSP^;
    Is_Object:=3DFalse;
    While Q<>Nil Do Begin
Index: rtl/inc/objpas.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/inc/objpas.inc	(revision 4765)
+++ rtl/inc/objpas.inc	(working copy)
@@ -303,7 +303,7 @@
                FieldTable :=3D PFieldTable((Pointer(CurClassType) + vmtFie=
ldTable)^);
                if FieldTable <> nil then
                begin
-                 FieldInfo :=3D @FieldTable^.Fields;
+                 FieldInfo :=3D @FieldTable^.Fields[0];
                  for i :=3D 0 to FieldTable^.FieldCount - 1 do
                  begin
                    if UpCase(FieldInfo^.Name) =3D UName then
@@ -311,7 +311,7 @@
                      fieldaddress :=3D Pointer(Self) + FieldInfo^.FieldOff=
set;
                      exit;
                    end;
-                   FieldInfo :=3D @FieldInfo^.Name + 1 + Length(FieldInfo^=
.Name);
+                   FieldInfo :=3D PFieldInfo(PByte(@FieldInfo^.Name) + 1 +=
 Length(FieldInfo^.Name));
 {$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
                    { align to largest field of TFieldInfo }
                    FieldInfo :=3D Align(FieldInfo, SizeOf(PtrUInt));
Index: rtl/inc/sockovl.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/inc/sockovl.inc	(revision 4765)
+++ rtl/inc/sockovl.inc	(working copy)
@@ -42,7 +42,7 @@
 Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Add=
r ; var AddrLen :longint) : longint;
 =

 begin
-  RecvFrom:=3Dfprecvfrom(Sock, op buf,buflen,flags, op Addr, op AddrLen);
+  RecvFrom:=3Dfprecvfrom(Sock, op buf,buflen,flags, op Addr,psocklen(@AddrLen));
 end;
 =

 Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean;
@@ -57,7 +57,7 @@
 =

 Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 begin
-  Accept:=3Dfpaccept(sock, op addr, op addrlen);
+  Accept:=3Dfpaccept(sock, op addr,psocklen(@addrlen));
 end;
 =

 Function Connect(Sock:Longint;Const Addr;Addrlen:Longint): boolean;
@@ -73,12 +73,12 @@
 =

 Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 begin
-  GetSocketName:=3Dfpgetsockname(sock, op addr, op addrlen);
+  GetSocketName:=3Dfpgetsockname(sock, op addr,psocklen(@addrlen));
 end;
 =

 Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint;
 begin
-  GetPeerName:=3DfpgetPeerName(sock, op addr, op addrlen);
+  GetPeerName:=3DfpgetPeerName(sock, op addr,psocklen(@addrlen));
 end;
 =

 Function SetSocketOptions(Sock,Level,OptName:Longint;const OptVal;optlen:l=
ongint):Longint;
@@ -88,12 +88,12 @@
 =

 Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen=
:longint):Longint;
 begin
-  GetSocketOptions:=3Dfpgetsockopt(Sock,Level,OptName, op OptVal, op OptLen);
+  GetSocketOptions:=3Dfpgetsockopt(Sock,Level,OptName, op OptVal,psocklen(@Op=
tLen));
 end;
 =

 Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray=
):Longint;
 begin
-  SocketPair:=3Dfpsocketpair(domain,sockettype,protocol, op pair);
+  SocketPair:=3Dfpsocketpair(domain,sockettype,protocol, op pair[1]);
 end;
 =

 {*************************************************************************=
*****
Index: rtl/inc/dynarr.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/inc/dynarr.inc	(revision 4765)
+++ rtl/inc/dynarr.inc	(working copy)
@@ -340,18 +340,18 @@
 =

 procedure DynArraySetLength(var a: Pointer; typeInfo: Pointer; dimCnt: Siz=
eInt; lengthVec: PSizeInt);
   var
-    preallocated : array[0..10] of PSizeInt;
+    preallocated : array[0..10] of SizeInt;
     i : SizeInt;
     p : PSizeInt;
   begin
     if dimCnt<=3Dlength(preallocated) then
-      p:=3D op preallocated
+      p:=3D op preallocated[0]
     else
       getmem(p,sizeof(SizeInt)*dimCnt);
     for i:=3D0 to dimCnt-1 do
       p[i]:=3DlengthVec[dimCnt-1-i];
     int_dynarray_setlength(a,typeInfo,dimCnt,p);
-    if p<>@preallocated then
+    if p<>@preallocated[0] then
       freemem(p);
   end;
 =

Index: rtl/objpas/sysutils/sysstr.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/objpas/sysutils/sysstr.inc	(revision 4765)
+++ rtl/objpas/sysutils/sysstr.inc	(working copy)
@@ -1921,7 +1921,7 @@
 =

 Begin
   Buf[FloatToTextFmt(@Buf[0],Value,Pchar(Format))]:=3D#0;
-  Result:=3DStrPas(@Buf);
+  Result:=3DStrPas(@Buf[0]);
 End;
 =

 function FormatCurr(const Format: string; Value: Currency): string;
Index: rtl/objpas/sysutils/dati.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/objpas/sysutils/dati.inc	(revision 4765)
+++ rtl/objpas/sysutils/dati.inc	(working copy)
@@ -708,10 +708,10 @@
   DecodeDateFully(DateTime, Year, Month, Day, DayOfWeek);
   DecodeTime(DateTime, Hour, Minute, Second, MilliSecond);
   ResultLen :=3D 0;
-  ResultCurrent :=3D @ResultBuffer;
+  ResultCurrent :=3D @ResultBuffer[0];
   StoreFormat(FormatStr);
   ResultBuffer[ResultLen] :=3D #0;
-  result :=3D StrPas(@ResultBuffer);
+  result :=3D StrPas(@ResultBuffer[0]);
 end ;
 =

 {   DateTimeToString formats DateTime to the given format in FormatStr   }
Index: rtl/objpas/sysutils/sysuintf.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/objpas/sysutils/sysuintf.inc	(revision 4765)
+++ rtl/objpas/sysutils/sysuintf.inc	(working copy)
@@ -73,19 +73,20 @@
     end;
   end;
 =

-  function HexByte(p: PChar): Char;
+  function HexByte(p: PChar): Byte;
   begin
-    Result:=3DChar((HexChar(p[0]) shl 4) + HexChar(p[1]));
+    Result:=3D(HexChar(p[0]) shl 4) + HexChar(p[1]);
   end;
 =

 var
   i: integer;
-  src, dest: PChar;
+  src: PChar;
+  dest: PByte;
 begin
   if ((Length(S)<>38) or
       (s[1]<>'{')) then
     raise EConvertError.CreateFmt(SInvalidGUID, [s]);
-  dest:=3D op Result;
+  dest:=3D op Result.D4[0];
   src:=3DPChar(s);
   inc(src);
   for i:=3D0 to 3 do
Index: rtl/objpas/typinfo.pp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- rtl/objpas/typinfo.pp	(revision 4765)
+++ rtl/objpas/typinfo.pp	(working copy)
@@ -500,7 +500,7 @@
       hp:=3DGetTypeData(Typeinfo);
       // the class info rtti the property rtti follows immediatly
       pd:=3Daligntoptr(pointer(pointer(@hp^.UnitName)+Length(hp^.UnitName)=
+1));
-      Result:=3D op pd^.PropList;
+      Result:=3DPPropInfo(@pd^.PropList);
       for i:=3D1 to pd^.PropCount do
         begin
           // found a property of that name ?
Index: compiler/cutils.pas
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/cutils.pas	(revision 4765)
+++ compiler/cutils.pas	(working copy)
@@ -842,7 +842,7 @@
       i:=3D1;
       len:=3D0;
       varcounter:=3D0;
-      varptr:=3D op varvaluedata;
+      varptr:=3D op varvaluedata[0];
       while i<=3Dlength(s) do
         begin
           if (s[i]=3D'$') and (i<length(s)) then
@@ -863,7 +863,7 @@
                    inc(i);
                  until s[i]=3D'}';
                  varvalues[varcounter]:=3DPstring(varptr);
-                 if varptr>@varvaluedata+maxdata then
+                 if varptr>@varvaluedata[0]+maxdata then
                    internalerrorproc(200411152);
                  Pstring(varptr)^:=3Dget_var_value(varname);
                  inc(len,length(Pstring(varptr)^));
Index: compiler/cp8859_1.pas
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/cp8859_1.pas	(revision 4765)
+++ compiler/cp8859_1.pas	(working copy)
@@ -270,7 +270,7 @@
 =

      unicodemap : tunicodemap =3D (
        cpname : '8859-1';
-       map : @map;
+       map : @map[0];
        lastchar : 255;
        next : nil;
        internalmap : true
Index: compiler/cp850.pas
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/cp850.pas	(revision 4765)
+++ compiler/cp850.pas	(working copy)
@@ -270,7 +270,7 @@
 =

      unicodemap : tunicodemap =3D (
        cpname : 'cp850';
-       map : @map;
+       map : @map[0];
        lastchar : 255;
        next : nil;
        internalmap : true
Index: compiler/globals.pas
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/globals.pas	(revision 4765)
+++ compiler/globals.pas	(working copy)
@@ -1816,7 +1816,7 @@
       var
         p: pbyte;
       begin
-        p :=3D @r;
+        p :=3D pbyte(@r);
 {$ifdef CPU_ARM}
         inc(p,4);
 {$else}   =

Index: compiler/ncal.pas
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/ncal.pas	(revision 4765)
+++ compiler/ncal.pas	(working copy)
@@ -1411,12 +1411,14 @@
         result:=3Dvmttree;
       end;
 =

+    type
+      pcallparanode =3D ^tcallparanode;
 =

     procedure tcallnode.bind_parasym;
       var
         i        : integer;
         pt       : tcallparanode;
-        oldppt   : ^tcallparanode;
+        oldppt   : pcallparanode;
         varargspara,
         currpara : tparavarsym;
         used_by_callnode : boolean;
@@ -1425,14 +1427,14 @@
         temp         : ttempcreatenode;
       begin
         pt:=3Dtcallparanode(left);
-        oldppt:=3D op left;
+        oldppt:=3Dpcallparanode(@left);
 =

         { flag all callparanodes that belong to the varargs }
         i:=3Dparalength;
         while (i>procdefinition.maxparacount) do
           begin
             include(pt.callparaflags,cpf_varargs_para);
-            oldppt:=3D op pt.right;
+            oldppt:=3Dpcallparanode(@pt.right);
             pt:=3Dtcallparanode(pt.right);
             dec(i);
           end;
@@ -1518,7 +1520,7 @@
            if not assigned(pt) then
              internalerror(200310052);
            pt.parasym:=3Dcurrpara;
-           oldppt:=3D op pt.right;
+           oldppt:=3Dpcallparanode(@pt.right);
            pt:=3Dtcallparanode(pt.right);
          end;
 =

Index: compiler/cp437.pas
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/cp437.pas	(revision 4765)
+++ compiler/cp437.pas	(working copy)
@@ -270,7 +270,7 @@
 =

      unicodemap : tunicodemap =3D (
        cpname : 'cp437';
-       map : @map;
+       map : @map[0];
        lastchar : 255;
        next : nil;
        internalmap : true
Index: compiler/scanner.pas
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/scanner.pas	(revision 4765)
+++ compiler/scanner.pas	(working copy)
@@ -269,12 +269,14 @@
          if s=3D'TP' then
           aktmodeswitches:=3Dtpmodeswitches
         else
-         if s=3D'FPC' then
-          aktmodeswitches:=3Dfpcmodeswitches
-        else
-         if s=3D'OBJFPC' then
-          aktmodeswitches:=3Dobjfpcmodeswitches
-        else
+         if s=3D'FPC' then begin
+          aktmodeswitches:=3Dfpcmodeswitches;
+          include(aktlocalswitches, cs_typed_addresses);
+        end else
+         if s=3D'OBJFPC' then begin
+          aktmodeswitches:=3Dobjfpcmodeswitches;
+          include(aktlocalswitches, cs_typed_addresses);
+        end else
          if s=3D'GPC' then
           aktmodeswitches:=3Dgpcmodeswitches
         else
Index: compiler/systems/t_emx.pas
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/systems/t_emx.pas	(revision 4765)
+++ compiler/systems/t_emx.pas	(working copy)
@@ -115,7 +115,7 @@
         end;
 =

 var aout_str_size:longint;
-    aout_str_tab:array[0..2047] of byte;
+    aout_str_tab:array[0..2047] of char;
     aout_sym_count:longint;
     aout_sym_tab:array[0..5] of nlist;
 =

@@ -258,7 +258,7 @@
     blockwrite(out_file,aout_text,aout_text_size);
     blockwrite(out_file,aout_treloc_tab,sizeof(reloc)*aout_treloc_count);
     blockwrite(out_file,aout_sym_tab,sizeof(aout_sym_tab[0])*aout_sym_coun=
t);
-    longint((@aout_str_tab)^):=3Daout_str_size;
+    plongint(@aout_str_tab)^:=3Daout_str_size;
     blockwrite(out_file,aout_str_tab,aout_str_size);
 end;
 =

Index: compiler/systems/t_os2.pas
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/systems/t_os2.pas	(revision 4765)
+++ compiler/systems/t_os2.pas	(working copy)
@@ -115,7 +115,7 @@
         end;
 =

 var aout_str_size:longint;
-    aout_str_tab:array[0..2047] of byte;
+    aout_str_tab:array[0..2047] of char;
     aout_sym_count:longint;
     aout_sym_tab:array[0..5] of nlist;
 =

@@ -258,7 +258,7 @@
     blockwrite(out_file,aout_text,aout_text_size);
     blockwrite(out_file,aout_treloc_tab,sizeof(reloc)*aout_treloc_count);
     blockwrite(out_file,aout_sym_tab,sizeof(aout_sym_tab[0])*aout_sym_coun=
t);
-    longint((@aout_str_tab)^):=3Daout_str_size;
+    plongint(@aout_str_tab)^:=3Daout_str_size;
     blockwrite(out_file,aout_str_tab,aout_str_size);
 end;
 =

Index: compiler/x86/aasmcpu.pas
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/x86/aasmcpu.pas	(revision 4765)
+++ compiler/x86/aasmcpu.pas	(working copy)
@@ -1550,7 +1550,7 @@
         ea_data : ea;
       begin
         len:=3D0;
-        codes:=3D op p^.code;
+        codes:=3D op p^.code[0];
         repeat
           c:=3Dord(codes^);
           inc(codes);
@@ -1707,7 +1707,7 @@
          $0, $A, $A, $B, $8, $4);
       var
         c : byte;
-        pb,
+        pb : pbyte;
         codes : pchar;
         bytes : array[0..3] of byte;
         rfield,
@@ -1936,16 +1936,16 @@
                    if not process_ea(oper[opidx]^,ea_data,rfield) then
                     Message(asmw_e_invalid_effective_address);
 =

-                   pb:=3D op bytes;
-                   pb^:=3Dchr(ea_data.modrm);
+                   pb:=3D op bytes[0];
+                   pb^:=3Dea_data.modrm;
                    inc(pb);
                    if ea_data.sib_present then
                     begin
-                      pb^:=3Dchr(ea_data.sib);
+                      pb^:=3Dea_data.sib;
                       inc(pb);
                     end;
 =

-                   s:=3Dpb-pchar(@bytes);
+                   s:=3Dpb- op bytes[0];
                    objdata.writebytes(bytes,s);
 =

                    case ea_data.bytes of
Index: compiler/nadd.pas
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/nadd.pas	(revision 4765)
+++ compiler/nadd.pas	(working copy)
@@ -606,8 +606,8 @@
               c2[0]:=3Dchar(byte(tordconstnode(right).value));
               c2[1]:=3D#0;
               l2:=3D1;
-              s1:=3D op c1;
-              s2:=3D op c2;
+              s1:=3D op c1[0];
+              s2:=3D op c2[0];
               concatstrings:=3Dtrue;
            end
          else if (lt=3Dstringconstn) and (rt=3Dordconstn) and is_char(rd) =
then
@@ -616,7 +616,7 @@
               l1:=3Dtstringconstnode(left).len;
               c2[0]:=3Dchar(byte(tordconstnode(right).value));
               c2[1]:=3D#0;
-              s2:=3D op c2;
+              s2:=3D op c2[0];
               l2:=3D1;
               concatstrings:=3Dtrue;
            end
@@ -625,7 +625,7 @@
               c1[0]:=3Dchar(byte(tordconstnode(left).value));
               c1[1]:=3D#0;
               l1:=3D1;
-              s1:=3D op c1;
+              s1:=3D op c1[0];
               s2:=3Dtstringconstnode(right).value_str;
               l2:=3Dtstringconstnode(right).len;
               concatstrings:=3Dtrue;
Index: compiler/utils/fpcmkcfg.pp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- compiler/utils/fpcmkcfg.pp	(revision 4765)
+++ compiler/utils/fpcmkcfg.pp	(working copy)
@@ -82,7 +82,7 @@
   AddToList(List,'BUILDDATE',DateToStr(Date));
   AddToList(List,'BUILDTIME',TimeToStr(Time));
   Cfg:=3DTStringList.Create;
-  Cfg.Text:=3DStrPas(Addr(DefaultConfig));
+  Cfg.Text:=3DStrPas(Addr(DefaultConfig[0][1]));
 end;
 =

 Procedure Done;
@@ -190,9 +190,9 @@
     begin
       case IDEBuildin of
         1:
-           Cfg.Text:=3DStrPas(Addr(fpcfg));
+           Cfg.Text:=3DStrPas(Addr(fpcfg[0][1]));
         2:
-           Cfg.Text:=3DStrPas(Addr(fpini));
+           Cfg.Text:=3DStrPas(Addr(fpini[0][1]));
       end;
 =

       AddToList(List,'TEMPLATEFILE','builtin');


More information about the fpc-devel mailing list