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