dtors-in-dtor-cfg-output.cpp revision 8c5e5d6d8a316af5a9842169f541cac49717887d
1// RUN: %clang_cc1 -analyze -cfg-dump -cfg-add-implicit-dtors %s 2>&1 | FileCheck %s 2// XPASS: * 3 4class A { 5public: 6 ~A() {} 7}; 8 9class B : public virtual A { 10public: 11 ~B() {} 12}; 13 14class C : public virtual A { 15public: 16 ~C() {} 17}; 18 19class TestOrder : public C, public B, public virtual A { 20 A a; 21 int i; 22 A *p; 23public: 24 ~TestOrder(); 25}; 26 27TestOrder::~TestOrder() {} 28 29class TestArray { 30 A a[2]; 31 A b[0]; 32public: 33 ~TestArray(); 34}; 35 36TestArray::~TestArray() {} 37 38// CHECK: [ B2 (ENTRY) ] 39// CHECK: Predecessors (0): 40// CHECK: Successors (1): B1 41// CHECK: [ B1 ] 42// CHECK: 1: this->a.~A() (Member object destructor) 43// CHECK: 2: ~B() (Base object destructor) 44// CHECK: 3: ~C() (Base object destructor) 45// CHECK: 4: ~A() (Base object destructor) 46// CHECK: Predecessors (1): B2 47// CHECK: Successors (1): B0 48// CHECK: [ B0 (EXIT) ] 49// CHECK: Predecessors (1): B1 50// CHECK: Successors (0): 51// CHECK: [ B2 (ENTRY) ] 52// CHECK: Predecessors (0): 53// CHECK: Successors (1): B1 54// CHECK: [ B1 ] 55// CHECK: 1: this->a.~A() (Member object destructor) 56// CHECK: Predecessors (1): B2 57// CHECK: Successors (1): B0 58// CHECK: [ B0 (EXIT) ] 59// CHECK: Predecessors (1): B1 60// CHECK: Successors (0): 61