1// RUN: %clang_cc1 %s -emit-llvm -o %t
2
3extern "C" int printf(...);
4
5static int val;
6
7struct B {
8  B() : iB(++val) { printf("B()\n"); }
9  int iB;
10  ~B() { printf("~B(%d)\n", iB); --val; }
11};
12
13struct M : B {
14  M() : iM(++val) { printf("M()\n"); }
15  int iM;
16  ~M() { printf("~M(%d)\n", iM); --val; }
17};
18
19struct P {
20  P() : iP(++val) { printf("P()\n"); }
21  int iP;
22  ~P() { printf("~P(%d)\n", iP); --val; }
23};
24
25struct N : M, P {
26  N() { printf("N()\n"); iN = ++val; }
27  ~N() { printf("~N(%d) val = %d\n", iN, --val);  }
28  int iN;
29  M m;
30  P p;
31};
32
33struct O : B {
34  ~O() { return; }
35};
36
37int main() {
38  N n1;
39  N n2;
40  O o;
41}
42