Browse Source

* fix life information of block nodes

git-svn-id: trunk@25973 -
florian 11 years ago
parent
commit
63757c84ad
1 changed files with 10 additions and 4 deletions
  1. 10 4
      compiler/optdfa.pas

+ 10 - 4
compiler/optdfa.pas

@@ -342,9 +342,12 @@ unit optdfa;
                 CreateInfo(tfornode(node).t2);
                 CreateInfo(tfornode(node).t2);
 
 
                 { expect a blocknode as body because we need to push the life information
                 { expect a blocknode as body because we need to push the life information
-                  of the counter variable into it }
+                  of the counter variable into it
                 if tfornode(node).t2.nodetype<>blockn then
                 if tfornode(node).t2.nodetype<>blockn then
-                  internalerror(2013110201);
+                  begin
+                    printnode(tfornode(node).t2);
+                    internalerror(2013110301);
+                  end;}
 
 
                 { first update the body }
                 { first update the body }
                 l:=copy(tfornode(node).t2.optinfo^.life);
                 l:=copy(tfornode(node).t2.optinfo^.life);
@@ -404,8 +407,11 @@ unit optdfa;
             blockn:
             blockn:
               begin
               begin
                 CreateInfo(tblocknode(node).statements);
                 CreateInfo(tblocknode(node).statements);
-                if assigned(tblocknode(node).statements) then
-                  node.optinfo^.life:=tblocknode(node).statements.optinfo^.life;
+                { ensure that we don't remove life info }
+                l:=node.optinfo^.life;
+                if assigned(node.successor) then
+                  DFASetIncludeSet(l,node.successor.optinfo^.life);
+                UpdateLifeInfo(node,l);
               end;
               end;
 
 
             ifn:
             ifn: