Home | History | Annotate | Download | only in Analysis
      1 // RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG %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:    Succs (1): B1
     40 // CHECK:  [B1]
     41 // CHECK:    1: this->a.~A() (Member object destructor)
     42 // CHECK:    2: ~B() (Base object destructor)
     43 // CHECK:    3: ~C() (Base object destructor)
     44 // CHECK:    4: ~A() (Base object destructor)
     45 // CHECK:    Preds (1): B2
     46 // CHECK:    Succs (1): B0
     47 // CHECK:  [B0 (EXIT)]
     48 // CHECK:    Preds (1): B1
     49 // CHECK:  [B2 (ENTRY)]
     50 // CHECK:    Succs (1): B1
     51 // CHECK:  [B1]
     52 // CHECK:    1: this->a.~A() (Member object destructor)
     53 // CHECK:    Preds (1): B2
     54 // CHECK:    Succs (1): B0
     55 // CHECK:  [B0 (EXIT)]
     56 // CHECK:    Preds (1): B1
     57