Browse Source

* more C packing fixes

peter 26 years ago
parent
commit
6c00bfc702
1 changed files with 20 additions and 18 deletions
  1. 20 18
      compiler/symsym.inc

+ 20 - 18
compiler/symsym.inc

@@ -1149,39 +1149,38 @@
                  { this symbol can't be loaded to a register }
                  { this symbol can't be loaded to a register }
                    var_options:=var_options and not vo_regable;
                    var_options:=var_options and not vo_regable;
                  { get the alignment size }
                  { get the alignment size }
-                   if (aktpackrecords=packrecord_C) and
-                      (owner^.dataalignment<4) then
+                   if (aktpackrecords=packrecord_C) then
                     begin
                     begin
                       varalign:=definition^.alignment;
                       varalign:=definition^.alignment;
-                      if varalign>0 then
+                      if varalign=0 then
                        begin
                        begin
-                         if varalign>owner^.dataalignment then
-                          owner^.dataalignment:=varalign;
-                       end
-                      else
-                       begin
-                         if l>=4 then
-                          owner^.dataalignment:=4
-                         else
-                          if l>=2 then
-                           owner^.dataalignment:=2;
+                         if (owner^.dataalignment<4) then
+                          begin
+                            if (l>=4) then
+                             owner^.dataalignment:=4
+                            else
+                             if (owner^.dataalignment<2) and (l>=2) then
+                              owner^.dataalignment:=2;
+                          end;
                        end;
                        end;
-                    end;
+                    end
+                   else
+                    varalign:=0;
                  { align record and object fields }
                  { align record and object fields }
-                   if (l=1) or (owner^.dataalignment=1) then
+                   if (l=1) or (varalign=1) or (owner^.dataalignment=1) then
                     begin
                     begin
                       address:=owner^.datasize;
                       address:=owner^.datasize;
                       inc(owner^.datasize,l)
                       inc(owner^.datasize,l)
                     end
                     end
                    else
                    else
-                    if (l=2) or (owner^.dataalignment=2) then
+                    if (l=2) or (varalign=2) or (owner^.dataalignment=2) then
                      begin
                      begin
                        owner^.datasize:=(owner^.datasize+1) and (not 1);
                        owner^.datasize:=(owner^.datasize+1) and (not 1);
                        address:=owner^.datasize;
                        address:=owner^.datasize;
                        inc(owner^.datasize,l)
                        inc(owner^.datasize,l)
                      end
                      end
                    else
                    else
-                    if (l<=4) or (owner^.dataalignment=4) then
+                    if (l<=4) or (varalign=4) or (owner^.dataalignment=4) then
                      begin
                      begin
                        owner^.datasize:=(owner^.datasize+3) and (not 3);
                        owner^.datasize:=(owner^.datasize+3) and (not 3);
                        address:=owner^.datasize;
                        address:=owner^.datasize;
@@ -2002,7 +2001,10 @@
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.100  1999-07-23 16:05:32  peter
+  Revision 1.101  1999-07-23 20:59:23  peter
+    * more C packing fixes
+
+  Revision 1.100  1999/07/23 16:05:32  peter
     * alignment is now saved in the symtable
     * alignment is now saved in the symtable
     * C alignment added for records
     * C alignment added for records
     * PPU version increased to solve .12 <-> .13 probs
     * PPU version increased to solve .12 <-> .13 probs