| // RUN: %clang_cc1 %s -emit-llvm -o %t | |
| extern "C" int printf(...); | |
| static int val; | |
| struct B { | |
| B() : iB(++val) { printf("B()\n"); } | |
| int iB; | |
| ~B() { printf("~B(%d)\n", iB); --val; } | |
| }; | |
| struct M : B { | |
| M() : iM(++val) { printf("M()\n"); } | |
| int iM; | |
| ~M() { printf("~M(%d)\n", iM); --val; } | |
| }; | |
| struct P { | |
| P() : iP(++val) { printf("P()\n"); } | |
| int iP; | |
| ~P() { printf("~P(%d)\n", iP); --val; } | |
| }; | |
| struct N : M, P { | |
| N() { printf("N()\n"); iN = ++val; } | |
| ~N() { printf("~N(%d) val = %d\n", iN, --val); } | |
| int iN; | |
| M m; | |
| P p; | |
| }; | |
| struct O : B { | |
| ~O() { return; } | |
| }; | |
| int main() { | |
| N n1; | |
| N n2; | |
| O o; | |
| } |