xref: /aosp_15_r20/external/clang/test/Analysis/dtors-in-dtor-cfg-output.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li TestOrder::~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 Li TestArray::~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