// 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
