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