blob: f00b44fdd553dcb5074c91493cd6898f759b272b [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
75// CHECK-LP64: L_OBJC_CLASS_NAME_:
76// CHECK-LP64-NEXT: .asciz "A\024"
77
78// CHECK-LP64: L_OBJC_CLASS_NAME_1:
79// CHECK-LP64-NEXT: .asciz "A\025"
80
81// CHECK-LP64: L_OBJC_CLASS_NAME_6:
82// CHECK-LP64-NEXT: .asciz "A\023!"
83
Fariborz Jahaniane1a48982010-08-05 21:00:25 +000084// CHECK-LP64: L_OBJC_CLASS_NAME_11:
85// CHECK-LP64-NEXT: .asciz "Q\021\021"