blob: 72fd7c3f8b71d35df941ac2a1e459752c16ec6cf [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -triple armv7-apple-darwin9 -target-abi apcs-gnu -emit-llvm -w -o - %s | FileCheck -check-prefix=APCS-GNU %s
2// RUN: %clang_cc1 -triple armv7-apple-darwin9 -target-abi aapcs -emit-llvm -w -o - %s | FileCheck -check-prefix=AAPCS %s
Daniel Dunbar16a08082009-09-14 00:56:55 +00003
4// APCS-GNU: define arm_apcscc signext i8 @f0()
5// AAPCS: define arm_aapcscc signext i8 @f0()
6char f0(void) {
7 return 0;
8}
9
10// APCS-GNU: define arm_apcscc i8 @f1()
11// AAPCS: define arm_aapcscc i8 @f1()
12struct s1 { char f0; };
13struct s1 f1(void) {}
14
15// APCS-GNU: define arm_apcscc i16 @f2()
16// AAPCS: define arm_aapcscc i16 @f2()
17struct s2 { short f0; };
18struct s2 f2(void) {}
19
20// APCS-GNU: define arm_apcscc i32 @f3()
21// AAPCS: define arm_aapcscc i32 @f3()
22struct s3 { int f0; };
23struct s3 f3(void) {}
24
25// APCS-GNU: define arm_apcscc i32 @f4()
26// AAPCS: define arm_aapcscc i32 @f4()
27struct s4 { struct s4_0 { int f0; } f0; };
28struct s4 f4(void) {}
29
30// APCS-GNU: define arm_apcscc void @f5(
Chris Lattnerfb97cf22010-04-20 05:44:43 +000031// APCS-GNU: struct.s5* sret
Daniel Dunbar16a08082009-09-14 00:56:55 +000032// AAPCS: define arm_aapcscc i32 @f5()
33struct s5 { struct { } f0; int f1; };
34struct s5 f5(void) {}
35
36// APCS-GNU: define arm_apcscc void @f6(
Chris Lattnerfb97cf22010-04-20 05:44:43 +000037// APCS-GNU: struct.s6* sret
Daniel Dunbar16a08082009-09-14 00:56:55 +000038// AAPCS: define arm_aapcscc i32 @f6()
39struct s6 { int f0[1]; };
40struct s6 f6(void) {}
41
42// APCS-GNU: define arm_apcscc void @f7()
43// AAPCS: define arm_aapcscc void @f7()
44struct s7 { struct { int : 0; } f0; };
45struct s7 f7(void) {}
46
47// APCS-GNU: define arm_apcscc void @f8(
Chris Lattnerfb97cf22010-04-20 05:44:43 +000048// APCS-GNU: struct.s8* sret
Daniel Dunbar16a08082009-09-14 00:56:55 +000049// AAPCS: define arm_aapcscc void @f8()
50struct s8 { struct { int : 0; } f0[1]; };
51struct s8 f8(void) {}
52
53// APCS-GNU: define arm_apcscc i32 @f9()
54// AAPCS: define arm_aapcscc i32 @f9()
55struct s9 { int f0; int : 0; };
56struct s9 f9(void) {}
57
58// APCS-GNU: define arm_apcscc i32 @f10()
59// AAPCS: define arm_aapcscc i32 @f10()
60struct s10 { int f0; int : 0; int : 0; };
61struct s10 f10(void) {}
62
63// APCS-GNU: define arm_apcscc void @f11(
Chris Lattnerfb97cf22010-04-20 05:44:43 +000064// APCS-GNU: struct.s10* sret
Daniel Dunbar16a08082009-09-14 00:56:55 +000065// AAPCS: define arm_aapcscc i32 @f11()
66struct s11 { int : 0; int f0; };
67struct s11 f11(void) {}
68
69// APCS-GNU: define arm_apcscc i32 @f12()
70// AAPCS: define arm_aapcscc i32 @f12()
71union u12 { char f0; short f1; int f2; };
72union u12 f12(void) {}
Daniel Dunbarb0d58192009-09-14 02:20:34 +000073
74// APCS-GNU: define arm_apcscc void @f13(
Chris Lattnerfb97cf22010-04-20 05:44:43 +000075// APCS-GNU: struct.s13* sret
Daniel Dunbarb0d58192009-09-14 02:20:34 +000076
77// FIXME: This should return a float.
78// AAPCS-FIXME: define arm_aapcscc float @f13()
79struct s13 { float f0; };
80struct s13 f13(void) {}
81
82// APCS-GNU: define arm_apcscc void @f14(
Chris Lattnerfb97cf22010-04-20 05:44:43 +000083// APCS-GNU: struct.s13* sret
Daniel Dunbarb0d58192009-09-14 02:20:34 +000084// AAPCS: define arm_aapcscc i32 @f14()
85union u14 { float f0; };
86union u14 f14(void) {}
Daniel Dunbar42025572009-09-14 21:54:03 +000087
88// APCS-GNU: define arm_apcscc void @f15()
89// AAPCS: define arm_aapcscc void @f15()
90void f15(struct s7 a0) {}
91
92// APCS-GNU: define arm_apcscc void @f16()
93// AAPCS: define arm_aapcscc void @f16()
94void f16(struct s8 a0) {}
Daniel Dunbar679855a2010-01-29 03:22:29 +000095
96// APCS-GNU: define arm_apcscc i32 @f17()
97// AAPCS: define arm_aapcscc i32 @f17()
98struct s17 { short f0 : 13; char f1 : 4; };
99struct s17 f17(void) {}
100
101// APCS-GNU: define arm_apcscc i32 @f18()
102// AAPCS: define arm_aapcscc i32 @f18()
103struct s18 { short f0; char f1 : 4; };
104struct s18 f18(void) {}
105
106// APCS-GNU: define arm_apcscc void @f19(
Chris Lattnerfb97cf22010-04-20 05:44:43 +0000107// APCS-GNU: struct.s19* sret
Daniel Dunbar679855a2010-01-29 03:22:29 +0000108// AAPCS: define arm_aapcscc i32 @f19()
109struct s19 { int f0; struct s8 f1; };
110struct s19 f19(void) {}
111
112// APCS-GNU: define arm_apcscc void @f20(
Chris Lattnerfb97cf22010-04-20 05:44:43 +0000113// APCS-GNU: struct.s20* sret
Daniel Dunbar679855a2010-01-29 03:22:29 +0000114// AAPCS: define arm_aapcscc i32 @f20()
115struct s20 { struct s8 f1; int f0; };
116struct s20 f20(void) {}
117
Daniel Dunbar684de632010-04-22 16:14:54 +0000118// APCS-GNU: define arm_apcscc i8 @f21()
Daniel Dunbar679855a2010-01-29 03:22:29 +0000119// AAPCS: define arm_aapcscc i32 @f21()
120struct s21 { struct {} f1; int f0 : 4; };
121struct s21 f21(void) {}
Daniel Dunbar4cc753f2010-02-01 23:31:19 +0000122
123// APCS-GNU: define arm_apcscc i16 @f22()
124// APCS-GNU: define arm_apcscc i32 @f23()
125// APCS-GNU: define arm_apcscc i64 @f24()
126// APCS-GNU: define arm_apcscc i128 @f25()
127// APCS-GNU: define arm_apcscc i64 @f26()
128// APCS-GNU: define arm_apcscc i128 @f27()
129// AAPCS: define arm_aapcscc i16 @f22()
130// AAPCS: define arm_aapcscc i32 @f23()
Chris Lattnerfb97cf22010-04-20 05:44:43 +0000131// AAPCS: define arm_aapcscc void @f24({{.*}} sret
132// AAPCS: define arm_aapcscc void @f25({{.*}} sret
133// AAPCS: define arm_aapcscc void @f26({{.*}} sret
134// AAPCS: define arm_aapcscc void @f27({{.*}} sret
Daniel Dunbar4cc753f2010-02-01 23:31:19 +0000135_Complex char f22(void) {}
136_Complex short f23(void) {}
137_Complex int f24(void) {}
138_Complex long long f25(void) {}
139_Complex float f26(void) {}
140_Complex double f27(void) {}
Daniel Dunbar45815812010-02-01 23:31:26 +0000141
142// APCS-GNU: define arm_apcscc i16 @f28()
143// AAPCS: define arm_aapcscc i16 @f28()
144struct s28 { _Complex char f0; };
145struct s28 f28() {}
146
147// APCS-GNU: define arm_apcscc i32 @f29()
148// AAPCS: define arm_aapcscc i32 @f29()
149struct s29 { _Complex short f0; };
150struct s29 f29() {}
151
Chris Lattnerfb97cf22010-04-20 05:44:43 +0000152// APCS-GNU: define arm_apcscc void @f30({{.*}} sret
153// AAPCS: define arm_aapcscc void @f30({{.*}} sret
Daniel Dunbar45815812010-02-01 23:31:26 +0000154struct s30 { _Complex int f0; };
155struct s30 f30() {}