1 | // RUN: %clang_analyze_cc1 -analyzer-checker=debug.DumpCFG %s 2>&1 | FileCheck %s |
2 | |
3 | class A { |
4 | public: |
5 | ~A() {} |
6 | }; |
7 | |
8 | class B : public virtual A { |
9 | public: |
10 | ~B() {} |
11 | }; |
12 | |
13 | class C : public virtual A { |
14 | public: |
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 | |
26 | TestOrder::~TestOrder() {} |
27 | |
28 | class TestArray { |
29 | A a[2]; |
30 | A b[0]; |
31 | public: |
32 | ~TestArray(); |
33 | }; |
34 | |
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 | |