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