浏览代码

* fix life information of block nodes

git-svn-id: trunk@25973 -
florian 11 年之前
父节点
当前提交
63757c84ad
共有 1 个文件被更改,包括 10 次插入4 次删除
  1. 10 4
      compiler/optdfa.pas

+ 10 - 4
compiler/optdfa.pas

@@ -342,9 +342,12 @@ unit optdfa;
                 CreateInfo(tfornode(node).t2);
 
                 { 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
-                  internalerror(2013110201);
+                  begin
+                    printnode(tfornode(node).t2);
+                    internalerror(2013110301);
+                  end;}
 
                 { first update the body }
                 l:=copy(tfornode(node).t2.optinfo^.life);
@@ -404,8 +407,11 @@ unit optdfa;
             blockn:
               begin
                 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;
 
             ifn: