mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 11:29:24 +02:00
* fixed a_load_reg_reg() when storing an array/record to another
array/record type (can happen for parameters/function results that got a different type for ABI reasons) git-svn-id: trunk@31189 -
This commit is contained in:
parent
36e5291d94
commit
e9d2eb6cff
@ -534,15 +534,14 @@ implementation
|
||||
if fromsize.typ in [arraydef,recorddef] then
|
||||
begin
|
||||
{ store struct/array-in-register to memory }
|
||||
tmpsize:=def2intdef(fromsize,tosize);
|
||||
tg.gethltemp(list,fromsize,fromsize.size,tt_normal,tmpref);
|
||||
a_load_reg_ref(list,fromsize,fromsize,register,tmpref);
|
||||
{ typecast pointer to memory into pointer to integer type }
|
||||
hreg:=getaddressregister(list,cpointerdef.getreusable(tmpsize));
|
||||
a_loadaddr_ref_reg(list,fromsize,cpointerdef.getreusable(tmpsize),tmpref,hreg);
|
||||
reference_reset_base(sref,cpointerdef.getreusable(tmpsize),hreg,0,tmpref.alignment);
|
||||
hreg:=getaddressregister(list,cpointerdef.getreusable(tosize));
|
||||
a_loadaddr_ref_reg(list,fromsize,cpointerdef.getreusable(tosize),tmpref,hreg);
|
||||
reference_reset_base(sref,cpointerdef.getreusable(tosize),hreg,0,tmpref.alignment);
|
||||
{ load the integer from the temp into the destination }
|
||||
a_load_ref_ref(list,tmpsize,tosize,tmpref,sref);
|
||||
a_load_ref_ref(list,tosize,tosize,sref,ref);
|
||||
tg.ungettemp(list,tmpref);
|
||||
end
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user