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