Browse Source

* references of fields for types using indirect addressing get proper alignment

git-svn-id: trunk@38252 -
florian 7 years ago
parent
commit
a21f462a93
1 changed files with 4 additions and 2 deletions
  1. 4 2
      compiler/ncgmem.pas

+ 4 - 2
compiler/ncgmem.pas

@@ -355,8 +355,10 @@ implementation
              if (not is_managed_type(left.resultdef)) or
                 (target_info.system in systems_garbage_collected_managed_types) then
                begin
-                 { the contents of a class are aligned to a sizeof(pointer) }
-                 location_reset_ref(location,LOC_REFERENCE,def_cgsize(resultdef),voidpointertype.size,[]);
+                 { take care of the alignment of the fields }
+                 if not(left.resultdef is tabstractrecorddef) then
+                   Internalerror(2018021601);
+                 location_reset_ref(location,LOC_REFERENCE,def_cgsize(resultdef),newalignment(tabstractrecorddef(left.resultdef).alignment,vs.fieldoffset),[]);
                  case left.location.loc of
                     LOC_CREGISTER,
                     LOC_REGISTER: