42 lines
		
	
	
		
			623 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			623 B
		
	
	
	
		
			C++
		
	
	
	
| // 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;
 | |
| }
 |