Index: lib/Analysis/CFG.cpp =================================================================== --- lib/Analysis/CFG.cpp +++ lib/Analysis/CFG.cpp @@ -2107,14 +2107,12 @@ // blocks will be pointed to be "Block". CFGBlock *LastBlock = addStmt(I->getCond()); - // Finally, if the IfStmt contains a condition variable, add both the IfStmt - // and the condition variable initialization to the CFG. + // Finally, if the IfStmt contains a condition variable, add it and its + // initializer to the CFG. if (VarDecl *VD = I->getConditionVariable()) { - if (Expr *Init = VD->getInit()) { - autoCreateBlock(); - appendStmt(Block, I->getConditionVariableDeclStmt()); - LastBlock = addStmt(Init); - } + autoCreateBlock(); + LastBlock = + addStmt(const_cast(I->getConditionVariableDeclStmt())); } return LastBlock; Index: test/Analysis/temp-obj-dtors-cfg-output.cpp =================================================================== --- test/Analysis/temp-obj-dtors-cfg-output.cpp +++ test/Analysis/temp-obj-dtors-cfg-output.cpp @@ -611,18 +611,18 @@ // CHECK: [B5 (ENTRY)] // CHECK: Succs (1): B4 // CHECK: [B1] -// CHECK: 1: [B4.7].~C() (Implicit destructor) +// CHECK: 1: [B4.6].~C() (Implicit destructor) // CHECK: Succs (1): B0 // CHECK: [B2] // CHECK: 1: 0 // CHECK: 2: return [B2.1]; -// CHECK: 3: [B4.7].~C() (Implicit destructor) +// CHECK: 3: [B4.6].~C() (Implicit destructor) // CHECK: Preds (1): B4 // CHECK: Succs (1): B0 // CHECK: [B3] // CHECK: 1: 1 // CHECK: 2: return [B3.1]; -// CHECK: 3: [B4.7].~C() (Implicit destructor) +// CHECK: 3: [B4.6].~C() (Implicit destructor) // CHECK: Preds (1): B4 // CHECK: Succs (1): B0 // CHECK: [B4] @@ -631,8 +631,8 @@ // CHECK: 3: [B4.2] (ImplicitCastExpr, NoOp, const struct C) // CHECK: 4: [B4.3] // CHECK: 5: [B4.4] (CXXConstructExpr, struct C) -// CHECK: 6: ~C() (Temporary object destructor) -// CHECK: 7: C c = C(); +// CHECK: 6: C c = C(); +// CHECK: 7: ~C() (Temporary object destructor) // CHECK: 8: c // CHECK: 9: [B4.8].operator bool // CHECK: 10: [B4.8]