1*67e74705SXin Li// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s 2*67e74705SXin Li// CHECK: -[A .cxx_construct] 3*67e74705SXin Li// CHECK: -[A .cxx_destruct] 4*67e74705SXin Li// CHECK: -[B .cxx_construct] 5*67e74705SXin Li// CHECK-NOT: -[B .cxx_destruct] 6*67e74705SXin Li// CHECK-NOT: -[C .cxx_construct] 7*67e74705SXin Li// CHECK: -[C .cxx_destruct] 8*67e74705SXin Li 9*67e74705SXin Li@interface NSObject 10*67e74705SXin Li- alloc; 11*67e74705SXin Li- init; 12*67e74705SXin Li- (void) release; 13*67e74705SXin Li@end 14*67e74705SXin Li 15*67e74705SXin Liextern "C" int printf(const char *, ...); 16*67e74705SXin Li 17*67e74705SXin Liint count = 17; 18*67e74705SXin Listruct X { 19*67e74705SXin Li X() : value(count++) { printf( "X::X()\n"); } 20*67e74705SXin Li ~X() { printf( "X::~X()\n"); } 21*67e74705SXin Li int value; 22*67e74705SXin Li}; 23*67e74705SXin Li 24*67e74705SXin Listruct Y { 25*67e74705SXin Li Y() : value(count++) { printf( "Y::Y()\n"); } 26*67e74705SXin Li ~Y() { printf( "Y::~Y()\n"); } 27*67e74705SXin Li int value; 28*67e74705SXin Li}; 29*67e74705SXin Li 30*67e74705SXin Li@interface Super : NSObject { 31*67e74705SXin Li Y yvar; 32*67e74705SXin Li Y yvar1; 33*67e74705SXin Li Y ya[3]; 34*67e74705SXin Li} 35*67e74705SXin Li- (void)finalize; 36*67e74705SXin Li@end 37*67e74705SXin Li 38*67e74705SXin Li@interface A : Super { 39*67e74705SXin Li X xvar; 40*67e74705SXin Li X xvar1; 41*67e74705SXin Li X xvar2; 42*67e74705SXin Li X xa[2][2]; 43*67e74705SXin Li} 44*67e74705SXin Li 45*67e74705SXin Li- (void)print; 46*67e74705SXin Li- (void)finalize; 47*67e74705SXin Li@end 48*67e74705SXin Li 49*67e74705SXin Li@implementation Super 50*67e74705SXin Li- (void)print { 51*67e74705SXin Li printf( "yvar.value = %d\n", yvar.value); 52*67e74705SXin Li printf( "yvar1.value = %d\n", yvar1.value); 53*67e74705SXin Li printf( "ya[0..2] = %d %d %d\n", ya[0].value, ya[1].value, ya[2].value); 54*67e74705SXin Li} 55*67e74705SXin Li- (void)finalize {} 56*67e74705SXin Li@end 57*67e74705SXin Li 58*67e74705SXin Li@implementation A 59*67e74705SXin Li- (void)print { 60*67e74705SXin Li printf( "xvar.value = %d\n", xvar.value); 61*67e74705SXin Li printf( "xvar1.value = %d\n", xvar1.value); 62*67e74705SXin Li printf( "xvar2.value = %d\n", xvar2.value); 63*67e74705SXin Li printf( "xa[0..1][0..1] = %d %d %d %d\n", 64*67e74705SXin Li xa[0][0].value, xa[0][1].value, xa[1][0].value, xa[1][1].value); 65*67e74705SXin Li [super print]; 66*67e74705SXin Li} 67*67e74705SXin Li- (void)finalize { [super finalize]; } 68*67e74705SXin Li@end 69*67e74705SXin Li 70*67e74705SXin Liint main() { 71*67e74705SXin Li A *a = [[A alloc] init]; 72*67e74705SXin Li [a print]; 73*67e74705SXin Li [a release]; 74*67e74705SXin Li} 75*67e74705SXin Li 76*67e74705SXin Li// rdar: // 7468090 77*67e74705SXin Liclass S { 78*67e74705SXin Lipublic: 79*67e74705SXin Li S& operator = (const S&); 80*67e74705SXin Li}; 81*67e74705SXin Li 82*67e74705SXin Li@interface I { 83*67e74705SXin Li S position; 84*67e74705SXin Li} 85*67e74705SXin Li@property(assign, nonatomic) S position; 86*67e74705SXin Li@end 87*67e74705SXin Li 88*67e74705SXin Li@implementation I 89*67e74705SXin Li @synthesize position; 90*67e74705SXin Li@end 91*67e74705SXin Li 92*67e74705SXin Li// This class should have a .cxx_construct but no .cxx_destruct. 93*67e74705SXin Linamespace test3 { struct S { S(); }; } 94*67e74705SXin Li@implementation B { 95*67e74705SXin Li test3::S s; 96*67e74705SXin Li} 97*67e74705SXin Li@end 98*67e74705SXin Li 99*67e74705SXin Li// This class should have a .cxx_destruct but no .cxx_construct. 100*67e74705SXin Linamespace test4 { struct S { ~S(); }; } 101*67e74705SXin Li@implementation C { 102*67e74705SXin Li test4::S s; 103*67e74705SXin Li} 104*67e74705SXin Li@end 105