1 // RUN: %clang_cc1 -analyze -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