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