diff --git a/compiler/ncgmem.pas b/compiler/ncgmem.pas index 4f941e4309..36665b7c60 100644 --- a/compiler/ncgmem.pas +++ b/compiler/ncgmem.pas @@ -190,13 +190,12 @@ implementation hsym:=tparavarsym(currpi.procdef.parast.search('parentfp')); if not assigned(hsym) then internalerror(200309282); - { + if hsym.localloc.loc<>LOC_REFERENCE then internalerror(200309283); reference_reset_base(href,location.register,hsym.localloc.reference.offset); - } - cg.a_load_loc_reg(exprasmlist,OS_ADDR,hsym.localloc,location.register); + cg.a_load_ref_reg(exprasmlist,OS_ADDR,OS_ADDR,href,location.register); end; end; end; @@ -864,7 +863,10 @@ begin end. { $Log$ - Revision 1.105 2005-04-06 19:09:39 florian + Revision 1.106 2005-04-06 19:39:04 florian + * fixed previous commit + + Revision 1.105 2005/04/06 19:09:39 florian * hidden parameters can be put now in registers as well Revision 1.104 2005/02/14 17:13:06 peter diff --git a/compiler/nmem.pas b/compiler/nmem.pas index 2436994508..ca73a5c778 100644 --- a/compiler/nmem.pas +++ b/compiler/nmem.pas @@ -230,9 +230,31 @@ implementation function tloadparentfpnode.det_resulttype:tnode; + var + currpi : tprocinfo; + hsym : tparavarsym; begin result:=nil; resulttype:=voidpointertype; + { + currently parentfps are never loaded in registers (FK) + + if (current_procinfo.procdef.parast.symtablelevel<>parentpd.parast.symtablelevel) then + begin + currpi:=current_procinfo; + { walk parents } + while (currpi.procdef.owner.symtablelevel>parentpd.parast.symtablelevel) do + begin + currpi:=currpi.parent; + if not assigned(currpi) then + internalerror(2005040602); + hsym:=tparavarsym(currpi.procdef.parast.search('parentfp')); + if not assigned(hsym) then + internalerror(2005040601); + hsym.varregable:=vr_none; + end; + end; + } end; @@ -933,7 +955,10 @@ begin end. { $Log$ - Revision 1.95 2005-03-25 22:20:19 peter + Revision 1.96 2005-04-06 19:39:04 florian + * fixed previous commit + + Revision 1.95 2005/03/25 22:20:19 peter * add hint when passing an uninitialized variable to a var parameter Revision 1.94 2005/02/14 17:13:06 peter diff --git a/compiler/pdecsub.pas b/compiler/pdecsub.pas index ae35fa6e64..0d6c5b7b45 100644 --- a/compiler/pdecsub.pas +++ b/compiler/pdecsub.pas @@ -2078,13 +2078,16 @@ const { insert funcret parameter if required } insert_funcret_para(pd); - { insert parentfp parameter if required } - insert_parentfp_para(pd); - { Make var parameters regable, this must be done after the calling convention is set. } + { this must be done before parentfp is insert, because getting all cases + where parentfp must be in a memory location isn't catched properly so + we put parentfp never in a register } pd.parast.foreach_static(@set_addr_param_regable,pd); + { insert parentfp parameter if required } + insert_parentfp_para(pd); + { Calculate parameter tlist } pd.calcparas; end; @@ -2458,7 +2461,10 @@ const end. { $Log$ - Revision 1.232 2005-04-06 19:09:39 florian + Revision 1.233 2005-04-06 19:39:04 florian + * fixed previous commit + + Revision 1.232 2005/04/06 19:09:39 florian * hidden parameters can be put now in registers as well Revision 1.231 2005/03/27 14:10:52 jonas