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