]> granicus.if.org Git - clang/commitdiff
[cfg] Always guard (when AddStaticInitBranches == true) DeclStmts for static variable...
authorTed Kremenek <kremenek@apple.com>
Fri, 29 Mar 2013 00:42:56 +0000 (00:42 +0000)
committerTed Kremenek <kremenek@apple.com>
Fri, 29 Mar 2013 00:42:56 +0000 (00:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178322 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/CFG.cpp

index 91a7fdf6bcbe10f8c3c1f7112e24298fb5605240..1adb8b84e462910a83001f4f256352e29e4d3eef 100644 (file)
@@ -1654,24 +1654,24 @@ CFGBlock *CFGBuilder::VisitDeclSubExpr(DeclStmt *DS) {
   bool HasTemporaries = false;
 
   // Guard static initializers under a branch.
-  CFGBlock *blockBeforeInit = 0;
+  CFGBlock *blockAfterStaticInit = 0;
+
+  if (BuildOpts.AddStaticInitBranches && VD->isStaticLocal()) {
+    // For static variables, we need to create a branch to track
+    // whether or not they are initialized.
+    if (Block) {
+      Succ = Block;
+      Block = 0;
+      if (badCFG)
+        return 0;
+    }
+    blockAfterStaticInit = Succ;
+  }
 
   // Destructors of temporaries in initialization expression should be called
   // after initialization finishes.
   Expr *Init = VD->getInit();
   if (Init) {
-    if (BuildOpts.AddStaticInitBranches && VD->isStaticLocal()) {
-      // For static variables, we need to create a branch to track
-      // whether or not they are initialized.
-      if (Block) {
-        Succ = Block;
-        Block = 0;
-        if (badCFG)
-          return 0;
-      }
-      blockBeforeInit = Succ;
-    }
-
     IsReference = VD->getType()->isReferenceType();
     HasTemporaries = isa<ExprWithCleanups>(Init);
 
@@ -1716,11 +1716,11 @@ CFGBlock *CFGBuilder::VisitDeclSubExpr(DeclStmt *DS) {
     ++ScopePos;
 
   CFGBlock *B = LastBlock;
-  if (blockBeforeInit) {
+  if (blockAfterStaticInit) {
     Succ = B;
     Block = createBlock(false);
     Block->setTerminator(DS);
-    addSuccessor(Block, blockBeforeInit);
+    addSuccessor(Block, blockAfterStaticInit);
     addSuccessor(Block, B);
     B = Block;
   }