diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp index 7c716116eb9f..fc0cc2dba828 100644 --- a/clang/lib/Analysis/CFG.cpp +++ b/clang/lib/Analysis/CFG.cpp @@ -2107,14 +2107,11 @@ CFGBlock *CFGBuilder::VisitIfStmt(IfStmt *I) { // 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. - if (VarDecl *VD = I->getConditionVariable()) { - if (Expr *Init = VD->getInit()) { - autoCreateBlock(); - appendStmt(Block, I->getConditionVariableDeclStmt()); - LastBlock = addStmt(Init); - } + // Finally, if the IfStmt contains a condition variable, add it and its + // initializer to the CFG. + if (const DeclStmt* DS = I->getConditionVariableDeclStmt()) { + autoCreateBlock(); + LastBlock = addStmt(const_cast(DS)); } return LastBlock; diff --git a/clang/test/Analysis/temp-obj-dtors-cfg-output.cpp b/clang/test/Analysis/temp-obj-dtors-cfg-output.cpp index 64f1fa535ad8..5fb33d36b855 100644 --- a/clang/test/Analysis/temp-obj-dtors-cfg-output.cpp +++ b/clang/test/Analysis/temp-obj-dtors-cfg-output.cpp @@ -611,18 +611,18 @@ int testConsistencyNestedNormalReturn(bool value) { // 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 @@ int testConsistencyNestedNormalReturn(bool value) { // 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]