Browse Source

* Disallow placing hidden 'high' parameter in register if it will be accessed from implicit finally block (happens for <value open array of managed type> parameters).

git-svn-id: trunk@20072 -
sergei 13 years ago
parent
commit
898fbdcd26
1 changed files with 5 additions and 0 deletions
  1. 5 0
      compiler/pdecsub.pas

+ 5 - 0
compiler/pdecsub.pas

@@ -409,6 +409,11 @@ implementation
                hvs:=tparavarsym.create('$high'+name,paranr+1,vs_const,sinttype,[vo_is_high_para,vo_is_hidden_para]);
                hvs:=tparavarsym.create('$high'+name,paranr+1,vs_const,sinttype,[vo_is_high_para,vo_is_hidden_para]);
                hvs.symoptions:=[];
                hvs.symoptions:=[];
                owner.insert(hvs);
                owner.insert(hvs);
+               { don't place to register if it will be accessed from implicit finally block }
+               if (varspez=vs_value) and
+                 is_open_array(vardef) and
+                 is_managed_type(vardef) then
+                 hvs.varregable:=vr_none;
              end
              end
            else
            else
             begin
             begin