blob: c2a01d35fe09174022f8023d9237777ad6955e00 [file] [log] [blame]
Fariborz Jahanian93ce50d2010-08-04 23:55:24 +00001// RUN: %clang_cc1 -fblocks -fobjc-gc -triple x86_64-apple-darwin -O0 -S %s -o %t-64.s
2// RUN: FileCheck -check-prefix LP64 --input-file=%t-64.s %s
3// RUN: %clang_cc1 -x objective-c++ -fblocks -fobjc-gc -triple x86_64-apple-darwin -O0 -S %s -o %t-64.s
4// RUN: FileCheck -check-prefix LP64 --input-file=%t-64.s %s
5
Fariborz Jahaniane1a48982010-08-05 21:00:25 +00006struct S {
7 int i1;
8 id o1;
9 struct V {
10 int i2;
11 id o2;
12 } v1;
13 int i3;
14 id o3;
15};
16
Fariborz Jahanian93ce50d2010-08-04 23:55:24 +000017__weak id wid;
18void x(id y) {}
19void y(int a) {}
20
21void f() {
22 __block int byref_int = 0;
23 char ch = 'a';
24 char ch1 = 'b';
25 char ch2 = 'c';
26 short sh = 2;
27 const id bar = (id)0;
28 id baz = 0;
29 __strong void *strong_void_sta;
30 __block id byref_bab = (id)0;
31 __block void *bl_var1;
32 int i; double dob;
33
34 void (^b)() = ^{
35 byref_int = sh + ch+ch1+ch2 ;
36 x(bar);
37 x(baz);
38 x((id)strong_void_sta);
39 x(byref_bab);
40 };
41 b();
42
43// Test 2
44 void (^c)() = ^{
45 byref_int = sh + ch+ch1+ch2 ;
46 x(bar);
47 x(baz);
48 x((id)strong_void_sta);
49 x(wid);
50 bl_var1 = 0;
51 x(byref_bab);
52 };
53 c();
54
55// Test 3
56void (^d)() = ^{
57 byref_int = sh + ch+ch1+ch2 ;
58 x(bar);
59 x(baz);
60 x(wid);
61 bl_var1 = 0;
62 y(i + dob);
63 x(byref_bab);
64 };
65 d();
Fariborz Jahaniane1a48982010-08-05 21:00:25 +000066
67// Test4
68 struct S s2;
69 void (^e)() = ^{
70 x(s2.o1);
71 };
72 e();
Fariborz Jahanian93ce50d2010-08-04 23:55:24 +000073}
74
Fariborz Jahaniana1f024c2010-08-06 16:28:55 +000075// Test 5 (unions/structs and their nesting):
76void Test5() {
77struct S5 {
78 int i1;
79 id o1;
80 struct V {
81 int i2;
82 id o2;
83 } v1;
84 int i3;
85 union UI {
86 void * i1;
87 id o1;
88 int i3;
89 id o3;
90 }ui;
91};
92
93union U {
94 void * i1;
95 id o1;
96 int i3;
97 id o3;
98}ui;
99
100struct S5 s2;
101union U u2;
102void (^c)() = ^{
103 x(s2.ui.o1);
104 x(u2.o1);
105};
106c();
107
108}
109
Fariborz Jahanianc5904b42010-09-11 01:27:29 +0000110// rdar: //8417746
111void CFRelease(id);
112void notifyBlock(id dependentBlock) {
113 id singleObservationToken;
114 id token;
115 void (^b)();
116 void (^wrapperBlock)() = ^() {
117 CFRelease(singleObservationToken);
118 CFRelease(singleObservationToken);
119 CFRelease(token);
120 CFRelease(singleObservationToken);
121 b();
122 };
123 wrapperBlock();
124}
125
126
Fariborz Jahanian93ce50d2010-08-04 23:55:24 +0000127// CHECK-LP64: L_OBJC_CLASS_NAME_:
Fariborz Jahanian81979822010-09-09 00:21:45 +0000128// CHECK-LP64-NEXT: .asciz "\0011\024"
Fariborz Jahanian93ce50d2010-08-04 23:55:24 +0000129
130// CHECK-LP64: L_OBJC_CLASS_NAME_1:
Fariborz Jahanian81979822010-09-09 00:21:45 +0000131// CHECK-LP64-NEXT: .asciz "\0011\025"
Fariborz Jahanian93ce50d2010-08-04 23:55:24 +0000132
133// CHECK-LP64: L_OBJC_CLASS_NAME_6:
Fariborz Jahanian81979822010-09-09 00:21:45 +0000134// CHECK-LP64-NEXT: .asciz "\0011\023!"
Fariborz Jahanian93ce50d2010-08-04 23:55:24 +0000135
Fariborz Jahaniane1a48982010-08-05 21:00:25 +0000136// CHECK-LP64: L_OBJC_CLASS_NAME_11:
Fariborz Jahanian81979822010-09-09 00:21:45 +0000137// CHECK-LP64-NEXT: .asciz "\001A\021\021"
Fariborz Jahaniana1f024c2010-08-06 16:28:55 +0000138
139// CHECK-LP64: L_OBJC_CLASS_NAME_14:
Fariborz Jahanian81979822010-09-09 00:21:45 +0000140// CHECK-LP64-NEXT: .asciz "\001A\021\022p"
Fariborz Jahanianc5904b42010-09-11 01:27:29 +0000141
142// CHECK-LP64: L_OBJC_CLASS_NAME_16:
143// CHECK-LP64-NEXT: .asciz "\0013"