Home | History | Annotate | Download | only in Analysis
      1 // RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG -cfg-add-implicit-dtors %s 2>&1 | FileCheck %s
      2 // XPASS: *
      3 
      4 class A {
      5 public:
      6   ~A() {}
      7 };
      8 
      9 class B : public virtual A {
     10 public:
     11   ~B() {}
     12 };
     13 
     14 class C : public virtual A {
     15 public:
     16   ~C() {}
     17 };
     18 
     19 class TestOrder : public C, public B, public virtual A {
     20   A a;
     21   int i;
     22   A *p;
     23 public:
     24   ~TestOrder();
     25 };
     26 
     27 TestOrder::~TestOrder() {}
     28 
     29 class TestArray {
     30   A a[2];
     31   A b[0];
     32 public:
     33   ~TestArray();
     34 };
     35 
     36 TestArray::~TestArray() {}
     37 
     38 // CHECK:  [ B2 (ENTRY) ]
     39 // CHECK:     Predecessors (0):
     40 // CHECK:     Successors (1): B1
     41 // CHECK:  [ B1 ]
     42 // CHECK:       1: this->a.~A() (Member object destructor)
     43 // CHECK:       2: ~B() (Base object destructor)
     44 // CHECK:       3: ~C() (Base object destructor)
     45 // CHECK:       4: ~A() (Base object destructor)
     46 // CHECK:     Predecessors (1): B2
     47 // CHECK:     Successors (1): B0
     48 // CHECK:  [ B0 (EXIT) ]
     49 // CHECK:     Predecessors (1): B1
     50 // CHECK:     Successors (0):
     51 // CHECK:  [ B2 (ENTRY) ]
     52 // CHECK:     Predecessors (0):
     53 // CHECK:     Successors (1): B1
     54 // CHECK:  [ B1 ]
     55 // CHECK:       1: this->a.~A() (Member object destructor)
     56 // CHECK:     Predecessors (1): B2
     57 // CHECK:     Successors (1): B0
     58 // CHECK:  [ B0 (EXIT) ]
     59 // CHECK:     Predecessors (1): B1
     60 // CHECK:     Successors (0):
     61