1*67e74705SXin Li // RUN: %clang_cc1 %s -emit-llvm -o %t 2*67e74705SXin Li 3*67e74705SXin Li extern "C" int printf(...); 4*67e74705SXin Li 5*67e74705SXin Li static int val; 6*67e74705SXin Li 7*67e74705SXin Li struct B { BB8*67e74705SXin Li B() : iB(++val) { printf("B()\n"); } 9*67e74705SXin Li int iB; ~BB10*67e74705SXin Li ~B() { printf("~B(%d)\n", iB); --val; } 11*67e74705SXin Li }; 12*67e74705SXin Li 13*67e74705SXin Li struct M : B { MM14*67e74705SXin Li M() : iM(++val) { printf("M()\n"); } 15*67e74705SXin Li int iM; ~MM16*67e74705SXin Li ~M() { printf("~M(%d)\n", iM); --val; } 17*67e74705SXin Li }; 18*67e74705SXin Li 19*67e74705SXin Li struct P { PP20*67e74705SXin Li P() : iP(++val) { printf("P()\n"); } 21*67e74705SXin Li int iP; ~PP22*67e74705SXin Li ~P() { printf("~P(%d)\n", iP); --val; } 23*67e74705SXin Li }; 24*67e74705SXin Li 25*67e74705SXin Li struct N : M, P { NN26*67e74705SXin Li N() { printf("N()\n"); iN = ++val; } ~NN27*67e74705SXin Li ~N() { printf("~N(%d) val = %d\n", iN, --val); } 28*67e74705SXin Li int iN; 29*67e74705SXin Li M m; 30*67e74705SXin Li P p; 31*67e74705SXin Li }; 32*67e74705SXin Li 33*67e74705SXin Li struct O : B { ~OO34*67e74705SXin Li ~O() { return; } 35*67e74705SXin Li }; 36*67e74705SXin Li main()37*67e74705SXin Liint main() { 38*67e74705SXin Li N n1; 39*67e74705SXin Li N n2; 40*67e74705SXin Li O o; 41*67e74705SXin Li } 42