]> granicus.if.org Git - clang/commitdiff
Fixed bug in LiveVariables analysis where Block-level exprs appearing
authorTed Kremenek <kremenek@apple.com>
Thu, 7 Feb 2008 02:38:55 +0000 (02:38 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 7 Feb 2008 02:38:55 +0000 (02:38 +0000)
as the initializers for DeclStmts were not being registered as being
live at the start of the DeclStmt.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46837 91177308-0d34-0410-b5e6-96231b3b80d8

Analysis/LiveVariables.cpp

index c14b463be164571220ac7f2aea73e3efb1dd5563..eb1b56f37a891358c33562bc298e7e3c1460b34b 100644 (file)
@@ -155,8 +155,13 @@ void TransferFuncs::VisitAssign(BinaryOperator* B) {
 void TransferFuncs::VisitDeclStmt(DeclStmt* DS) {
   // Declarations effectively "kill" a variable since they cannot
   // possibly be live before they are declared.
-  for (ScopedDecl* D = DS->getDecl(); D != NULL; D = D->getNextDeclarator())
+  for (ScopedDecl* D = DS->getDecl(); D != NULL; D = D->getNextDeclarator()) {
     LiveState(D,AD) = Dead;
+
+    if (VarDecl* VD = dyn_cast<VarDecl>(D))
+      if (Expr* Init = VD->getInit())
+        Visit(Init);
+  }
 }
   
 } // end anonymous namespace