diff --git a/compiler/tgobj.pas b/compiler/tgobj.pas index 921d0a4442..f6e3d834cc 100644 --- a/compiler/tgobj.pas +++ b/compiler/tgobj.pas @@ -117,7 +117,8 @@ implementation uses cutils, systems,verbose, - procinfo + procinfo, + symconst ; @@ -642,7 +643,17 @@ implementation procedure ttgobj.getlocal(list: TAsmList; size : longint; alignment : shortint; def:tdef;var ref : treference); begin +{$ifdef arm} + { for ARM CPU records must be aligned in stack depending of record size } + { to prevent misaligned error when the record is passed as parameter in registers } + if def.typ=recorddef then + if size>2 then + alignment:=current_settings.alignment.localalignmax + else + alignment:=size; +{$else} alignment:=used_align(alignment,current_settings.alignment.localalignmin,current_settings.alignment.localalignmax); +{$endif arm} { can't use reference_reset_base, because that will let tgobj depend on cgobj (PFV) } fillchar(ref,sizeof(ref),0);