Explorar el Código

* handle for-loops correctly if the limits contain the counter variable

git-svn-id: trunk@19918 -
florian hace 13 años
padre
commit
5defdf86ba
Se han modificado 1 ficheros con 6 adiciones y 2 borrados
  1. 6 2
      compiler/optdfa.pas

+ 6 - 2
compiler/optdfa.pas

@@ -276,7 +276,7 @@ unit optdfa;
                     foreachnodestatic(pm_postprocess,twhilerepeatnode(node).left,@AddDefUse,@dfainfo);
                   end;
 
-                { NB: this node should typically have empty def set }                  
+                { NB: this node should typically have empty def set }
                 if assigned(node.successor) then
                   DFASetDiff(l,node.successor.optinfo^.life,node.optinfo^.def)
                 else if assigned(resultnode) then
@@ -344,10 +344,14 @@ unit optdfa;
                 { update for node }
                 { life:=life+use+body }
                 l:=copy(node.optinfo^.life);
-                DFASetIncludeSet(l,node.optinfo^.use);
                 DFASetIncludeSet(l,tfornode(node).t2.optinfo^.life);
                 { the for loop always updates its control variable }
                 DFASetDiff(l,l,node.optinfo^.def);
+
+                { ... but it could be that left/right use it, so do it after
+                  removing def }
+                DFASetIncludeSet(l,node.optinfo^.use);
+
                 UpdateLifeInfo(node,l);
 
                 { ... and a second iteration for fast convergence }