// RUN: %clang_analyze_cc1 -analyzer-checker=debug.DumpCFG %s 2>&1 | FileCheck %s | |
class A { | |
public: | |
~A() {} | |
}; | |
class B : public virtual A { | |
public: | |
~B() {} | |
}; | |
class C : public virtual A { | |
public: | |
~C() {} | |
}; | |
class TestOrder : public C, public B, public virtual A { | |
A a; | |
int i; | |
A *p; | |
public: | |
~TestOrder(); | |
}; | |
TestOrder::~TestOrder() {} | |
class TestArray { | |
A a[2]; | |
A b[0]; | |
public: | |
~TestArray(); | |
}; | |
TestArray::~TestArray() {} | |
// CHECK: [B2 (ENTRY)] | |
// CHECK: Succs (1): B1 | |
// CHECK: [B1] | |
// CHECK: 1: this->a.~A() (Member object destructor) | |
// CHECK: 2: ~B() (Base object destructor) | |
// CHECK: 3: ~C() (Base object destructor) | |
// CHECK: 4: ~A() (Base object destructor) | |
// CHECK: Preds (1): B2 | |
// CHECK: Succs (1): B0 | |
// CHECK: [B0 (EXIT)] | |
// CHECK: Preds (1): B1 | |
// CHECK: [B2 (ENTRY)] | |
// CHECK: Succs (1): B1 | |
// CHECK: [B1] | |
// CHECK: 1: this->a.~A() (Member object destructor) | |
// CHECK: Preds (1): B2 | |
// CHECK: Succs (1): B0 | |
// CHECK: [B0 (EXIT)] | |
// CHECK: Preds (1): B1 |