Bladeren bron

* first part to fix #39603

florian 3 jaren geleden
bovenliggende
commit
6f749cf43d
2 gewijzigde bestanden met toevoegingen van 8 en 2 verwijderingen
  1. 1 1
      compiler/avr/cpupara.pas
  2. 7 1
      compiler/hlcgobj.pas

+ 1 - 1
compiler/avr/cpupara.pas

@@ -40,7 +40,7 @@ unit cpupara;
           function ret_in_param(def:tdef;pd:tabstractprocdef):boolean;override;
           function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
           function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
-          function  get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
+          function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
          private
           procedure init_values(var curintreg, curfloatreg, curmmreg: tsuperregister; var cur_stack_offset: aword);
           function create_paraloc_info_intern(p : tabstractprocdef; side: tcallercallee; paras: tparalist;

+ 7 - 1
compiler/hlcgobj.pas

@@ -834,11 +834,17 @@ implementation
           recorddef,
           setdef:
             result:=R_INTREGISTER;
+          procvardef:
+            { getaddressregister cannot handle if multiple registers
+              are required for a single element }
+            if is_methodpointer(def) then
+              result:=R_INTREGISTER
+            else
+              result:=R_ADDRESSREGISTER;
           stringdef,
           pointerdef,
           classrefdef,
           objectdef,
-          procvardef,
           procdef,
           formaldef:
             result:=R_ADDRESSREGISTER;