diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas index 882eba67b3..9ebb5f8e32 100644 --- a/compiler/ncgutil.pas +++ b/compiler/ncgutil.pas @@ -2078,7 +2078,7 @@ implementation if isaddr then tg.GetLocal(list,sizeof(aint),voidpointertype.def,localloc.reference) else - tg.GetLocal(list,getsize,vartype.def,localloc.reference); + tg.GetLocal(list,getsize,tparavarsym(sym).paraloc[calleeside].alignment,vartype.def,localloc.reference); end; end; localsymtable, diff --git a/compiler/tgobj.pas b/compiler/tgobj.pas index bf5472187c..052634c47d 100644 --- a/compiler/tgobj.pas +++ b/compiler/tgobj.pas @@ -101,6 +101,7 @@ unit tgobj; { Allocate space for a local } procedure getlocal(list: TAsmList; size : longint;def:tdef;var ref : treference); + procedure getlocal(list: TAsmList; size : longint; alignment : shortint; def:tdef;var ref : treference); procedure UnGetLocal(list: TAsmList; const ref : treference); end; @@ -576,16 +577,18 @@ implementation procedure ttgobj.getlocal(list: TAsmList; size : longint;def:tdef;var ref : treference); - var - varalign : shortint; begin - varalign:=def.alignment; - varalign:=used_align(varalign,aktalignment.localalignmin,aktalignment.localalignmax); + getlocal(list, size, def.alignment, def, ref); + end; + + procedure ttgobj.getlocal(list: TAsmList; size : longint; alignment : shortint; def:tdef;var ref : treference); + begin + alignment:=used_align(alignment,aktalignment.localalignmin,aktalignment.localalignmax); { can't use reference_reset_base, because that will let tgobj depend on cgobj (PFV) } fillchar(ref,sizeof(ref),0); ref.base:=current_procinfo.framepointer; - ref.offset:=alloctemp(list,size,varalign,tt_persistent,nil); + ref.offset:=alloctemp(list,size,alignment,tt_persistent,nil); end;