Index: lib/Analysis/CFG.cpp =================================================================== --- lib/Analysis/CFG.cpp +++ lib/Analysis/CFG.cpp @@ -2342,7 +2342,10 @@ autoCreateBlock(); appendStmt(Block, DS); - + + if (auto *CE = dyn_cast_or_null(Init)) + ConstructionContexts.push_back({/*Constructor=*/CE, /*Trigger=*/DS}); + // Keep track of the last non-null block, as 'Block' can be nulled out // if the initializer expression is something like a 'while' in a // statement-expression. @@ -2362,6 +2365,9 @@ } } + if (auto *CE = dyn_cast_or_null(Init)) + ConstructionContexts.pop_back(); + // If the type of VD is a VLA, then we must process its size expressions. for (const VariableArrayType* VA = FindVA(VD->getType().getTypePtr()); VA != nullptr; VA = FindVA(VA->getElementType().getTypePtr())) { Index: test/Analysis/auto-obj-dtors-cfg-output.cpp =================================================================== --- test/Analysis/auto-obj-dtors-cfg-output.cpp +++ test/Analysis/auto-obj-dtors-cfg-output.cpp @@ -32,7 +32,7 @@ // CHECK: [B2 (ENTRY)] // CHECK-NEXT: Succs (1): B1 // CHECK: [B1] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: 3: a // CHECK-NEXT: 4: [B1.3] (ImplicitCastExpr, NoOp, const class A) @@ -57,9 +57,9 @@ // CHECK: [B2 (ENTRY)] // CHECK-NEXT: Succs (1): B1 // CHECK: [B1] -// CHECK-NEXT: 1: (CXXConstructExpr, class A [2]) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A [2]) // CHECK-NEXT: 2: A a[2]; -// CHECK-NEXT: 3: (CXXConstructExpr, class A [0]) +// CHECK-NEXT: 3: (CXXConstructExpr, [B1.4], class A [0]) // CHECK-NEXT: 4: A b[0]; // CHECK-NEXT: 5: [B1.2].~A() (Implicit destructor) // CHECK-NEXT: Preds (1): B2 @@ -74,15 +74,15 @@ // CHECK: [B2 (ENTRY)] // CHECK-NEXT: Succs (1): B1 // CHECK: [B1] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A) // CHECK-NEXT: 2: A a; -// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: (CXXConstructExpr, [B1.4], class A) // CHECK-NEXT: 4: A c; -// CHECK-NEXT: 5: (CXXConstructExpr, class A) +// CHECK-NEXT: 5: (CXXConstructExpr, [B1.6], class A) // CHECK-NEXT: 6: A d; // CHECK-NEXT: 7: [B1.6].~A() (Implicit destructor) // CHECK-NEXT: 8: [B1.4].~A() (Implicit destructor) -// CHECK-NEXT: 9: (CXXConstructExpr, class A) +// CHECK-NEXT: 9: (CXXConstructExpr, [B1.10], class A) // CHECK: 10: A b; // CHECK: 11: [B1.10].~A() (Implicit destructor) // CHECK: 12: [B1.2].~A() (Implicit destructor) @@ -101,7 +101,7 @@ // CHECK: [B4 (ENTRY)] // CHECK-NEXT: Succs (1): B3 // CHECK: [B1] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B1.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B3.4].~A() (Implicit destructor) @@ -115,9 +115,9 @@ // CHECK-NEXT: Preds (1): B3 // CHECK-NEXT: Succs (1): B0 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A a; -// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: (CXXConstructExpr, [B3.4], class A) // CHECK-NEXT: 4: A b; // CHECK-NEXT: 5: UV // CHECK-NEXT: 6: [B3.5] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -137,7 +137,7 @@ // CHECK-NEXT: Succs (1): B7 // CHECK: [B1] // CHECK: l1: -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B1.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B6.2].~A() (Implicit destructor) @@ -145,7 +145,7 @@ // CHECK-NEXT: Preds (2): B2 B3 // CHECK-NEXT: Succs (1): B0 // CHECK: [B2] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B2.2], class A) // CHECK-NEXT: 2: A b; // CHECK-NEXT: 3: [B2.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B6.4].~A() (Implicit destructor) @@ -170,9 +170,9 @@ // CHECK-NEXT: Succs (1): B6 // CHECK: [B6] // CHECK: l0: -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B6.2], class A) // CHECK-NEXT: 2: A b; -// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: (CXXConstructExpr, [B6.4], class A) // CHECK-NEXT: 4: A a; // CHECK-NEXT: 5: UV // CHECK-NEXT: 6: [B6.5] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -180,7 +180,7 @@ // CHECK-NEXT: Preds (2): B7 B5 // CHECK-NEXT: Succs (2): B5 B4 // CHECK: [B7] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B7.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: Preds (1): B8 // CHECK-NEXT: Succs (1): B6 @@ -207,23 +207,23 @@ // CHECK-NEXT: Preds (2): B2 B3 // CHECK-NEXT: Succs (1): B0 // CHECK: [B2] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B2.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B2.2].~A() (Implicit destructor) // CHECK-NEXT: Preds (1): B4 // CHECK-NEXT: Succs (1): B1 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) // CHECK-NEXT: Preds (1): B4 // CHECK-NEXT: Succs (1): B1 // CHECK: [B4] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B4.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: 3: a // CHECK-NEXT: 4: [B4.3] (ImplicitCastExpr, NoOp, const class A) -// CHECK-NEXT: 5: [B4.4] (CXXConstructExpr, class A) +// CHECK-NEXT: 5: [B4.4] (CXXConstructExpr, [B4.6], class A) // CHECK-NEXT: 6: A b = a; // CHECK-NEXT: 7: b // CHECK-NEXT: 8: [B4.7] (ImplicitCastExpr, NoOp, const class A) @@ -247,14 +247,14 @@ // CHECK-NEXT: Succs (1): B8 // CHECK: [B1] // CHECK-NEXT: 1: [B8.6].~A() (Implicit destructor) -// CHECK-NEXT: 2: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: (CXXConstructExpr, [B1.3], class A) // CHECK-NEXT: 3: A e; // CHECK-NEXT: 4: [B1.3].~A() (Implicit destructor) // CHECK-NEXT: 5: [B8.2].~A() (Implicit destructor) // CHECK-NEXT: Preds (2): B2 B5 // CHECK-NEXT: Succs (1): B0 // CHECK: [B2] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B2.2], class A) // CHECK-NEXT: 2: A d; // CHECK-NEXT: 3: [B2.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B4.2].~A() (Implicit destructor) @@ -268,7 +268,7 @@ // CHECK-NEXT: Preds (1): B4 // CHECK-NEXT: Succs (1): B0 // CHECK: [B4] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B4.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: UV // CHECK-NEXT: 4: [B4.3] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -276,7 +276,7 @@ // CHECK-NEXT: Preds (1): B8 // CHECK-NEXT: Succs (2): B3 B2 // CHECK: [B5] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B5.2], class A) // CHECK-NEXT: 2: A d; // CHECK-NEXT: 3: [B5.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B7.2].~A() (Implicit destructor) @@ -290,7 +290,7 @@ // CHECK-NEXT: Preds (1): B7 // CHECK-NEXT: Succs (1): B0 // CHECK: [B7] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B7.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: UV // CHECK-NEXT: 4: [B7.3] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -298,11 +298,11 @@ // CHECK-NEXT: Preds (1): B8 // CHECK-NEXT: Succs (2): B6 B5 // CHECK: [B8] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B8.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: 3: a // CHECK-NEXT: 4: [B8.3] (ImplicitCastExpr, NoOp, const class A) -// CHECK-NEXT: 5: [B8.4] (CXXConstructExpr, class A) +// CHECK-NEXT: 5: [B8.4] (CXXConstructExpr, [B8.6], class A) // CHECK-NEXT: 6: A b = a; // CHECK-NEXT: 7: b // CHECK-NEXT: 8: [B8.7] (ImplicitCastExpr, NoOp, const class A) @@ -340,7 +340,7 @@ // CHECK-NEXT: Preds (1): B3 // CHECK-NEXT: Succs (1): B4 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B4.4].~A() (Implicit destructor) @@ -361,7 +361,7 @@ // CHECK-NEXT: Preds (2): B2 B5 // CHECK-NEXT: Succs (2): B3 B1 // CHECK: [B5] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B5.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: Preds (1): B6 // CHECK-NEXT: Succs (1): B4 @@ -377,7 +377,7 @@ // CHECK-NEXT: Succs (1): B11 // CHECK: [B1] // CHECK-NEXT: 1: [B10.4].~A() (Implicit destructor) -// CHECK-NEXT: 2: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: (CXXConstructExpr, [B1.3], class A) // CHECK-NEXT: 3: A e; // CHECK-NEXT: 4: [B1.3].~A() (Implicit destructor) // CHECK-NEXT: 5: [B11.2].~A() (Implicit destructor) @@ -387,7 +387,7 @@ // CHECK-NEXT: Preds (2): B3 B6 // CHECK-NEXT: Succs (1): B10 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A d; // CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B9.2].~A() (Implicit destructor) @@ -425,7 +425,7 @@ // CHECK: Preds (1): B9 // CHECK-NEXT: Succs (1): B1 // CHECK: [B9] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B9.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: UV // CHECK-NEXT: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -447,7 +447,7 @@ // CHECK-NEXT: Preds (2): B2 B11 // CHECK-NEXT: Succs (2): B9 B1 // CHECK: [B11] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B11.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: Preds (1): B12 // CHECK-NEXT: Succs (1): B10 @@ -474,7 +474,7 @@ // CHECK-NEXT: Preds (1): B2 // CHECK-NEXT: Succs (2): B3 B0 // CHECK: [B2] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B2.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: 3: [B2.2].~A() (Implicit destructor) // CHECK-NEXT: Preds (2): B3 B4 @@ -492,7 +492,7 @@ // CHECK: [B12 (ENTRY)] // CHECK-NEXT: Succs (1): B11 // CHECK: [B1] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A) // CHECK-NEXT: 2: A d; // CHECK-NEXT: 3: [B1.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B11.2].~A() (Implicit destructor) @@ -505,7 +505,7 @@ // CHECK-NEXT: Preds (2): B3 B6 // CHECK-NEXT: Succs (2): B10 B1 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B9.2].~A() (Implicit destructor) @@ -540,7 +540,7 @@ // CHECK: Preds (1): B9 // CHECK-NEXT: Succs (1): B1 // CHECK: [B9] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B9.2], class A) // CHECK-NEXT: 2: A b; // CHECK-NEXT: 3: UV // CHECK-NEXT: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -551,7 +551,7 @@ // CHECK-NEXT: Preds (1): B2 // CHECK-NEXT: Succs (1): B9 // CHECK: [B11] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B11.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: Preds (1): B12 // CHECK-NEXT: Succs (1): B9 @@ -577,7 +577,7 @@ // CHECK-NEXT: Preds (2): B3 B2 // CHECK-NEXT: Succs (1): B0 // CHECK: [B2] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B2.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: 3: a // CHECK-NEXT: 4: [B2.3] (ImplicitCastExpr, NoOp, const class A) @@ -592,7 +592,7 @@ // CHECK-NEXT: Preds (1): B4 // CHECK-NEXT: Succs (1): B1 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) // CHECK-NEXT: Succs (1): B1 @@ -608,14 +608,14 @@ // CHECK-NEXT: Succs (1): B2 // CHECK: [B1] // CHECK-NEXT: 1: [B2.6].~A() (Implicit destructor) -// CHECK-NEXT: 2: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: (CXXConstructExpr, [B1.3], class A) // CHECK-NEXT: 3: A g; // CHECK-NEXT: 4: [B1.3].~A() (Implicit destructor) // CHECK-NEXT: 5: [B2.2].~A() (Implicit destructor) // CHECK-NEXT: Preds (3): B3 B7 B2 // CHECK-NEXT: Succs (1): B0 // CHECK: [B2] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B2.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: 3: a // CHECK-NEXT: 4: [B2.3] (ImplicitCastExpr, NoOp, const class A) @@ -635,7 +635,7 @@ // CHECK: Preds (2): B2 B4 // CHECK-NEXT: Succs (1): B1 // CHECK: [B4] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B4.2], class A) // CHECK-NEXT: 2: A f; // CHECK-NEXT: 3: [B4.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B8.2].~A() (Implicit destructor) @@ -661,7 +661,7 @@ // CHECK-NEXT: Succs (1): B1 // CHECK: [B8] // CHECK: case 0: -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B8.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: UV // CHECK-NEXT: 4: [B8.3] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -696,7 +696,7 @@ // CHECK-NEXT: Preds (1): B3 // CHECK-NEXT: Succs (1): B4 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B4.4].~A() (Implicit destructor) @@ -717,7 +717,7 @@ // CHECK-NEXT: Preds (2): B2 B5 // CHECK-NEXT: Succs (2): B3 B1 // CHECK: [B5] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B5.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: Preds (1): B6 // CHECK-NEXT: Succs (1): B4 @@ -733,7 +733,7 @@ // CHECK: [B1] // CHECK-NEXT: 1: [B10.4].~A() (Implicit destructor) // CHECK-NEXT: 2: [B11.4].~A() (Implicit destructor) -// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: (CXXConstructExpr, [B1.4], class A) // CHECK-NEXT: 4: A f; // CHECK-NEXT: 5: [B1.4].~A() (Implicit destructor) // CHECK-NEXT: 6: [B11.2].~A() (Implicit destructor) @@ -743,7 +743,7 @@ // CHECK-NEXT: Preds (2): B3 B6 // CHECK-NEXT: Succs (1): B10 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A e; // CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) // CHECK-NEXT: 4: [B9.2].~A() (Implicit destructor) @@ -781,7 +781,7 @@ // CHECK: Preds (1): B9 // CHECK-NEXT: Succs (1): B1 // CHECK: [B9] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B9.2], class A) // CHECK-NEXT: 2: A d; // CHECK-NEXT: 3: UV // CHECK-NEXT: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -803,9 +803,9 @@ // CHECK-NEXT: Preds (2): B2 B11 // CHECK-NEXT: Succs (2): B9 B1 // CHECK: [B11] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B11.2], class A) // CHECK-NEXT: 2: A a; -// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: (CXXConstructExpr, [B11.4], class A) // CHECK-NEXT: 4: A b; // CHECK-NEXT: Preds (1): B12 // CHECK-NEXT: Succs (1): B10 Index: test/Analysis/blocks.mm =================================================================== --- test/Analysis/blocks.mm +++ test/Analysis/blocks.mm @@ -64,7 +64,7 @@ // CHECK: [B1] // CHECK-NEXT: 1: 5 -// CHECK-NEXT: 2: [B1.1] (CXXConstructExpr, struct StructWithCopyConstructor) +// CHECK-NEXT: 2: [B1.1] (CXXConstructExpr, [B1.3], struct StructWithCopyConstructor) // CHECK-NEXT: 3: StructWithCopyConstructor s(5) __attribute__((blocks("byref"))); // CHECK-NEXT: 4: ^{ } // CHECK-NEXT: 5: (void)([B1.4]) (CStyleCastExpr, ToVoid, void) Index: test/Analysis/cfg.cpp =================================================================== --- test/Analysis/cfg.cpp +++ test/Analysis/cfg.cpp @@ -48,11 +48,11 @@ // CHECK-NEXT: 5: int l; // CHECK-NEXT: 6: 2 // CHECK-NEXT: 7: int m = 2; -// CHECK-NEXT: CXXConstructExpr +// CHECK-NEXT: (CXXConstructExpr, [B1.9], struct standalone) // CHECK-NEXT: 9: struct standalone myStandalone; -// CHECK-NEXT: CXXConstructExpr +// CHECK-NEXT: (CXXConstructExpr, [B1.11], struct (anonymous struct at {{.*}})) // CHECK-NEXT: 11: struct (anonymous struct at {{.*}}) myAnon; -// CHECK-NEXT: CXXConstructExpr +// CHECK-NEXT: (CXXConstructExpr, [B1.13], struct named) // CHECK-NEXT: 13: struct named myNamed; // CHECK-NEXT: Preds (1): B2 // CHECK-NEXT: Succs (1): B0 Index: test/Analysis/initializers-cfg-output.cpp =================================================================== --- test/Analysis/initializers-cfg-output.cpp +++ test/Analysis/initializers-cfg-output.cpp @@ -66,7 +66,7 @@ // CHECK: 11: this // CHECK: 12: [B1.11]->i // CHECK: 13: r([B1.12]) (Member initializer) -// CHECK: 14: (CXXConstructExpr, class A) +// CHECK: 14: (CXXConstructExpr, [B1.15], class A) // CHECK: 15: A a; // CHECK: Preds (1): B2 // CHECK: Succs (1): B0 Index: test/Analysis/lifetime-cfg-output.cpp =================================================================== --- test/Analysis/lifetime-cfg-output.cpp +++ test/Analysis/lifetime-cfg-output.cpp @@ -58,7 +58,7 @@ // CHECK: [B2 (ENTRY)] // CHECK-NEXT: Succs (1): B1 // CHECK: [B1] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: 3: a // CHECK-NEXT: 4: [B1.3] (ImplicitCastExpr, NoOp, const class A) @@ -84,9 +84,9 @@ // CHECK: [B2 (ENTRY)] // CHECK-NEXT: Succs (1): B1 // CHECK: [B1] -// CHECK-NEXT: 1: (CXXConstructExpr, class A [2]) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A [2]) // CHECK-NEXT: 2: A a[2]; -// CHECK-NEXT: 3: (CXXConstructExpr, class A [0]) +// CHECK-NEXT: 3: (CXXConstructExpr, [B1.4], class A [0]) // CHECK-NEXT: 4: A b[0]; // lifetime of a ends when its destructors are run // CHECK-NEXT: 5: [B1.2] (Lifetime ends) @@ -104,15 +104,15 @@ // CHECK: [B2 (ENTRY)] // CHECK-NEXT: Succs (1): B1 // CHECK: [B1] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A) // CHECK-NEXT: 2: A a; -// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: (CXXConstructExpr, [B1.4], class A) // CHECK-NEXT: 4: A c; -// CHECK-NEXT: 5: (CXXConstructExpr, class A) +// CHECK-NEXT: 5: (CXXConstructExpr, [B1.6], class A) // CHECK-NEXT: 6: A d; // CHECK-NEXT: 7: [B1.6] (Lifetime ends) // CHECK-NEXT: 8: [B1.4] (Lifetime ends) -// CHECK-NEXT: 9: (CXXConstructExpr, class A) +// CHECK-NEXT: 9: (CXXConstructExpr, [B1.10], class A) // CHECK-NEXT: 10: A b; // CHECK-NEXT: 11: [B1.10] (Lifetime ends) // CHECK-NEXT: 12: [B1.2] (Lifetime ends) @@ -132,7 +132,7 @@ // CHECK: [B4 (ENTRY)] // CHECK-NEXT: Succs (1): B3 // CHECK: [B1] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B1.2] (Lifetime ends) // CHECK-NEXT: 4: [B3.4] (Lifetime ends) @@ -146,9 +146,9 @@ // CHECK-NEXT: Preds (1): B3 // CHECK-NEXT: Succs (1): B0 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A a; -// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: (CXXConstructExpr, [B3.4], class A) // CHECK-NEXT: 4: A b; // CHECK-NEXT: 5: UV // CHECK-NEXT: 6: [B3.5] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -174,23 +174,23 @@ // CHECK-NEXT: Preds (2): B2 B3 // CHECK-NEXT: Succs (1): B0 // CHECK: [B2] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B2.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B2.2] (Lifetime ends) // CHECK-NEXT: Preds (1): B4 // CHECK-NEXT: Succs (1): B1 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B3.2] (Lifetime ends) // CHECK-NEXT: Preds (1): B4 // CHECK-NEXT: Succs (1): B1 // CHECK: [B4] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B4.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: 3: a // CHECK-NEXT: 4: [B4.3] (ImplicitCastExpr, NoOp, const class A) -// CHECK-NEXT: 5: [B4.4] (CXXConstructExpr, class A) +// CHECK-NEXT: 5: [B4.4] (CXXConstructExpr, [B4.6], class A) // CHECK-NEXT: 6: A b = a; // CHECK-NEXT: 7: b // CHECK-NEXT: 8: [B4.7] (ImplicitCastExpr, NoOp, const class A) @@ -215,14 +215,14 @@ // CHECK-NEXT: Succs (1): B8 // CHECK: [B1] // CHECK-NEXT: 1: [B8.6] (Lifetime ends) -// CHECK-NEXT: 2: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: (CXXConstructExpr, [B1.3], class A) // CHECK-NEXT: 3: A e; // CHECK-NEXT: 4: [B1.3] (Lifetime ends) // CHECK-NEXT: 5: [B8.2] (Lifetime ends) // CHECK-NEXT: Preds (2): B2 B5 // CHECK-NEXT: Succs (1): B0 // CHECK: [B2] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B2.2], class A) // CHECK-NEXT: 2: A d; // CHECK-NEXT: 3: [B2.2] (Lifetime ends) // CHECK-NEXT: 4: [B4.2] (Lifetime ends) @@ -236,7 +236,7 @@ // CHECK-NEXT: Preds (1): B4 // CHECK-NEXT: Succs (1): B0 // CHECK: [B4] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B4.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: UV // CHECK-NEXT: 4: [B4.3] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -244,7 +244,7 @@ // CHECK-NEXT: Preds (1): B8 // CHECK-NEXT: Succs (2): B3 B2 // CHECK: [B5] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B5.2], class A) // CHECK-NEXT: 2: A d; // CHECK-NEXT: 3: [B5.2] (Lifetime ends) // CHECK-NEXT: 4: [B7.2] (Lifetime ends) @@ -258,7 +258,7 @@ // CHECK-NEXT: Preds (1): B7 // CHECK-NEXT: Succs (1): B0 // CHECK: [B7] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B7.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: UV // CHECK-NEXT: 4: [B7.3] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -266,11 +266,11 @@ // CHECK-NEXT: Preds (1): B8 // CHECK-NEXT: Succs (2): B6 B5 // CHECK: [B8] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B8.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: 3: a // CHECK-NEXT: 4: [B8.3] (ImplicitCastExpr, NoOp, const class A) -// CHECK-NEXT: 5: [B8.4] (CXXConstructExpr, class A) +// CHECK-NEXT: 5: [B8.4] (CXXConstructExpr, [B8.6], class A) // CHECK-NEXT: 6: A b = a; // CHECK-NEXT: 7: b // CHECK-NEXT: 8: [B8.7] (ImplicitCastExpr, NoOp, const class A) @@ -310,7 +310,7 @@ // CHECK-NEXT: Preds (1): B3 // CHECK-NEXT: Succs (1): B4 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B3.2] (Lifetime ends) // CHECK-NEXT: 4: [B4.4] (Lifetime ends) @@ -331,7 +331,7 @@ // CHECK-NEXT: Preds (2): B2 B5 // CHECK-NEXT: Succs (2): B3 B1 // CHECK: [B5] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B5.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: Preds (1): B6 // CHECK-NEXT: Succs (1): B4 @@ -347,7 +347,7 @@ // CHECK-NEXT: Succs (1): B11 // CHECK: [B1] // CHECK-NEXT: 1: [B10.4] (Lifetime ends) -// CHECK-NEXT: 2: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: (CXXConstructExpr, [B1.3], class A) // CHECK-NEXT: 3: A e; // CHECK-NEXT: 4: [B1.3] (Lifetime ends) // CHECK-NEXT: 5: [B11.2] (Lifetime ends) @@ -357,7 +357,7 @@ // CHECK-NEXT: Preds (2): B3 B6 // CHECK-NEXT: Succs (1): B10 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A d; // CHECK-NEXT: 3: [B3.2] (Lifetime ends) // CHECK-NEXT: 4: [B9.2] (Lifetime ends) @@ -395,7 +395,7 @@ // CHECK-NEXT: Preds (1): B9 // CHECK-NEXT: Succs (1): B1 // CHECK: [B9] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B9.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: UV // CHECK-NEXT: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -417,7 +417,7 @@ // CHECK-NEXT: Preds (2): B2 B11 // CHECK-NEXT: Succs (2): B9 B1 // CHECK: [B11] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B11.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: Preds (1): B12 // CHECK-NEXT: Succs (1): B10 @@ -441,7 +441,7 @@ // CHECK: [B12 (ENTRY)] // CHECK-NEXT: Succs (1): B11 // CHECK: [B1] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A) // CHECK-NEXT: 2: A d; // CHECK-NEXT: 3: [B1.2] (Lifetime ends) // CHECK-NEXT: 4: [B11.2] (Lifetime ends) @@ -454,7 +454,7 @@ // CHECK-NEXT: Preds (2): B3 B6 // CHECK-NEXT: Succs (2): B10 B1 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B3.2] (Lifetime ends) // CHECK-NEXT: 4: [B9.2] (Lifetime ends) @@ -489,7 +489,7 @@ // CHECK-NEXT: Preds (1): B9 // CHECK-NEXT: Succs (1): B1 // CHECK: [B9] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B9.2], class A) // CHECK-NEXT: 2: A b; // CHECK-NEXT: 3: UV // CHECK-NEXT: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -500,7 +500,7 @@ // CHECK-NEXT: Preds (1): B2 // CHECK-NEXT: Succs (1): B9 // CHECK: [B11] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B11.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: Preds (1): B12 // CHECK-NEXT: Succs (1): B9 @@ -532,7 +532,7 @@ // CHECK-NEXT: Preds (1): B3 // CHECK-NEXT: Succs (1): B4 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A c; // CHECK-NEXT: 3: [B3.2] (Lifetime ends) // CHECK-NEXT: 4: [B4.4] (Lifetime ends) @@ -553,7 +553,7 @@ // CHECK-NEXT: Preds (2): B2 B5 // CHECK-NEXT: Succs (2): B3 B1 // CHECK: [B5] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B5.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: Preds (1): B6 // CHECK-NEXT: Succs (1): B4 @@ -569,7 +569,7 @@ // CHECK: [B1] // CHECK-NEXT: 1: [B10.4] (Lifetime ends) // CHECK-NEXT: 2: [B11.4] (Lifetime ends) -// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: (CXXConstructExpr, [B1.4], class A) // CHECK-NEXT: 4: A f; // CHECK-NEXT: 5: [B1.4] (Lifetime ends) // CHECK-NEXT: 6: [B11.2] (Lifetime ends) @@ -579,7 +579,7 @@ // CHECK-NEXT: Preds (2): B3 B6 // CHECK-NEXT: Succs (1): B10 // CHECK: [B3] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B3.2], class A) // CHECK-NEXT: 2: A e; // CHECK-NEXT: 3: [B3.2] (Lifetime ends) // CHECK-NEXT: 4: [B9.2] (Lifetime ends) @@ -617,7 +617,7 @@ // CHECK-NEXT: Preds (1): B9 // CHECK-NEXT: Succs (1): B1 // CHECK: [B9] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B9.2], class A) // CHECK-NEXT: 2: A d; // CHECK-NEXT: 3: UV // CHECK-NEXT: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) @@ -639,9 +639,9 @@ // CHECK-NEXT: Preds (2): B2 B11 // CHECK-NEXT: Succs (2): B9 B1 // CHECK: [B11] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B11.2], class A) // CHECK-NEXT: 2: A a; -// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: (CXXConstructExpr, [B11.4], class A) // CHECK-NEXT: 4: A b; // CHECK-NEXT: Preds (1): B12 // CHECK-NEXT: Succs (1): B10 @@ -665,7 +665,7 @@ // CHECK: [B2 (ENTRY)] // CHECK-NEXT: Succs (1): B1 // CHECK: [B1] -// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 1: (CXXConstructExpr, [B1.2], class A) // CHECK-NEXT: 2: A a; // CHECK-NEXT: 3: int n; // CHECK-NEXT: 4: n @@ -762,7 +762,7 @@ // CHECK-NEXT: Succs (1): B0 // CHECK: [B2] // CHECK-NEXT: label: -// CHECK-NEXT: 1: (CXXConstructExpr, struct B) +// CHECK-NEXT: 1: (CXXConstructExpr, [B2.2], struct B) // CHECK-NEXT: 2: B b; // CHECK-NEXT: 3: [B2.2] (Lifetime ends) // CHECK-NEXT: T: goto label;