1 // RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG -cfg-add-implicit-dtors %s 2>&1 | FileCheck %s 2 // XPASS: * 3 4 class A { 5 public: 6 ~A() {} 7 }; 8 9 class B : public virtual A { 10 public: 11 ~B() {} 12 }; 13 14 class C : public virtual A { 15 public: 16 ~C() {} 17 }; 18 19 class TestOrder : public C, public B, public virtual A { 20 A a; 21 int i; 22 A *p; 23 public: 24 ~TestOrder(); 25 }; 26 27 TestOrder::~TestOrder() {} 28 29 class TestArray { 30 A a[2]; 31 A b[0]; 32 public: 33 ~TestArray(); 34 }; 35 36 TestArray::~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