1 | // RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-pc-win32 | FileCheck %s |
2 | |
3 | void a1() {} |
4 | // CHECK: "?a1@@YAXXZ" |
5 | |
6 | int a2() { return 0; } |
7 | // CHECK: "?a2@@YAHXZ" |
8 | |
9 | const int a3() { return 0; } |
10 | // CHECK: "?a3@@YA?BHXZ" |
11 | |
12 | volatile int a4() { return 0; } |
13 | // CHECK: "?a4@@YA?CHXZ" |
14 | |
15 | const volatile int a5() { return 0; } |
16 | // CHECK: "?a5@@YA?DHXZ" |
17 | |
18 | float a6() { return 0.0f; } |
19 | // CHECK: "?a6@@YAMXZ" |
20 | |
21 | int *b1() { return 0; } |
22 | // CHECK: "?b1@@YAPAHXZ" |
23 | |
24 | const char *b2() { return 0; } |
25 | // CHECK: "?b2@@YAPBDXZ" |
26 | |
27 | float *b3() { return 0; } |
28 | // CHECK: "?b3@@YAPAMXZ" |
29 | |
30 | const float *b4() { return 0; } |
31 | // CHECK: "?b4@@YAPBMXZ" |
32 | |
33 | volatile float *b5() { return 0; } |
34 | // CHECK: "?b5@@YAPCMXZ" |
35 | |
36 | const volatile float *b6() { return 0; } |
37 | // CHECK: "?b6@@YAPDMXZ" |
38 | |
39 | float &b7() { return *(float*)0; } |
40 | // CHECK: "?b7@@YAAAMXZ" |
41 | |
42 | const float &b8() { return *(float*)0; } |
43 | // CHECK: "?b8@@YAABMXZ" |
44 | |
45 | volatile float &b9() { return *(float*)0; } |
46 | // CHECK: "?b9@@YAACMXZ" |
47 | |
48 | const volatile float &b10() { return *(float*)0; } |
49 | // CHECK: "?b10@@YAADMXZ" |
50 | |
51 | const char** b11() { return 0; } |
52 | // CHECK: "?b11@@YAPAPBDXZ" |
53 | |
54 | class A {}; |
55 | |
56 | A c1() { return A(); } |
57 | // CHECK: "?c1@@YA?AVA@@XZ" |
58 | |
59 | const A c2() { return A(); } |
60 | // CHECK: "?c2@@YA?BVA@@XZ" |
61 | |
62 | volatile A c3() { return A(); } |
63 | // CHECK: "?c3@@YA?CVA@@XZ" |
64 | |
65 | const volatile A c4() { return A(); } |
66 | // CHECK: "?c4@@YA?DVA@@XZ" |
67 | |
68 | const A* c5() { return 0; } |
69 | // CHECK: "?c5@@YAPBVA@@XZ" |
70 | |
71 | volatile A* c6() { return 0; } |
72 | // CHECK: "?c6@@YAPCVA@@XZ" |
73 | |
74 | const volatile A* c7() { return 0; } |
75 | // CHECK: "?c7@@YAPDVA@@XZ" |
76 | |
77 | A &c8() { return *(A*)0; } |
78 | // CHECK: "?c8@@YAAAVA@@XZ" |
79 | |
80 | const A &c9() { return *(A*)0; } |
81 | // CHECK: "?c9@@YAABVA@@XZ" |
82 | |
83 | volatile A &c10() { return *(A*)0; } |
84 | // CHECK: "?c10@@YAACVA@@XZ" |
85 | |
86 | const volatile A &c11() { return *(A*)0; } |
87 | // CHECK: "?c11@@YAADVA@@XZ" |
88 | |
89 | template<typename T> class B {}; |
90 | |
91 | B<int> d1() { return B<int>(); } |
92 | // CHECK: "?d1@@YA?AV?$B@H@@XZ" |
93 | |
94 | B<const char*> d2() {return B<const char*>(); } |
95 | // CHECK: "?d2@@YA?AV?$B@PBD@@XZ" |
96 | |
97 | B<A> d3() {return B<A>(); } |
98 | // CHECK: "?d3@@YA?AV?$B@VA@@@@XZ" |
99 | |
100 | B<A>* d4() { return 0; } |
101 | // CHECK: "?d4@@YAPAV?$B@VA@@@@XZ" |
102 | |
103 | const B<A>* d5() { return 0; } |
104 | // CHECK: "?d5@@YAPBV?$B@VA@@@@XZ" |
105 | |
106 | volatile B<A>* d6() { return 0; } |
107 | // CHECK: "?d6@@YAPCV?$B@VA@@@@XZ" |
108 | |
109 | const volatile B<A>* d7() { return 0; } |
110 | // CHECK: "?d7@@YAPDV?$B@VA@@@@XZ" |
111 | |
112 | B<A>& d8() { return *(B<A>*)0; } |
113 | // CHECK: "?d8@@YAAAV?$B@VA@@@@XZ" |
114 | |
115 | const B<A>& d9() { return *(B<A>*)0; } |
116 | // CHECK: "?d9@@YAABV?$B@VA@@@@XZ" |
117 | |
118 | volatile B<A>& d10() { return *(B<A>*)0; } |
119 | // CHECK: "?d10@@YAACV?$B@VA@@@@XZ" |
120 | |
121 | const volatile B<A>& d11() { return *(B<A>*)0; } |
122 | // CHECK: "?d11@@YAADV?$B@VA@@@@XZ" |
123 | |
124 | enum Enum { DEFAULT }; |
125 | |
126 | Enum e1() { return DEFAULT; } |
127 | // CHECK: "?e1@@YA?AW4Enum@@XZ" |
128 | |
129 | const Enum e2() { return DEFAULT; } |
130 | // CHECK: "?e2@@YA?BW4Enum@@XZ" |
131 | |
132 | Enum* e3() { return 0; } |
133 | // CHECK: "?e3@@YAPAW4Enum@@XZ" |
134 | |
135 | Enum& e4() { return *(Enum*)0; } |
136 | // CHECK: "?e4@@YAAAW4Enum@@XZ" |
137 | |
138 | struct S {}; |
139 | |
140 | struct S f1() { struct S s; return s; } |
141 | // CHECK: "?f1@@YA?AUS@@XZ" |
142 | |
143 | const struct S f2() { struct S s; return s; } |
144 | // CHECK: "?f2@@YA?BUS@@XZ" |
145 | |
146 | struct S* f3() { return 0; } |
147 | // CHECK: "?f3@@YAPAUS@@XZ" |
148 | |
149 | const struct S* f4() { return 0; } |
150 | // CHECK: "?f4@@YAPBUS@@XZ" |
151 | |
152 | const volatile struct S* f5() { return 0; } |
153 | // CHECK: "?f5@@YAPDUS@@XZ" |
154 | |
155 | struct S& f6() { return *(struct S*)0; } |
156 | // CHECK: "?f6@@YAAAUS@@XZ" |
157 | |
158 | struct S* const f7() { return 0; } |
159 | // CHECK: "?f7@@YAQAUS@@XZ" |
160 | |
161 | int S::* f8() { return 0; } |
162 | // CHECK: "?f8@@YAPQS@@HXZ" |
163 | |
164 | int S::* const f9() { return 0; } |
165 | // CHECK: "?f9@@YAQQS@@HXZ" |
166 | |
167 | int S::* __restrict f10() { return 0; } |
168 | // CHECK: "?f10@@YAPIQS@@HXZ" |
169 | |
170 | int S::* const __restrict f11() { return 0; } |
171 | // CHECK: "?f11@@YAQIQS@@HXZ" |
172 | |
173 | typedef int (*function_pointer)(int); |
174 | |
175 | function_pointer g1() { return 0; } |
176 | // CHECK: "?g1@@YAP6AHH@ZXZ" |
177 | |
178 | const function_pointer g2() { return 0; } |
179 | // CHECK: "?g2@@YAQ6AHH@ZXZ" |
180 | |
181 | function_pointer* g3() { return 0; } |
182 | // CHECK: "?g3@@YAPAP6AHH@ZXZ" |
183 | |
184 | const function_pointer* g4() { return 0; } |
185 | // CHECK: "?g4@@YAPBQ6AHH@ZXZ" |
186 | |
187 | extern int &z; |
188 | int & __restrict h1() { return z; } |
189 | // CHECK: "?h1@@YAAIAHXZ" |
190 | |