1 // RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-pc-win32 | FileCheck %s
9 const int a3() { return 0; }
10 // CHECK: "?a3@@YA?BHXZ"
12 volatile int a4() { return 0; }
13 // CHECK: "?a4@@YA?CHXZ"
15 const volatile int a5() { return 0; }
16 // CHECK: "?a5@@YA?DHXZ"
18 float a6() { return 0.0f
; }
19 // CHECK: "?a6@@YAMXZ"
21 int *b1() { return 0; }
22 // CHECK: "?b1@@YAPAHXZ"
24 const char *b2() { return 0; }
25 // CHECK: "?b2@@YAPBDXZ"
27 float *b3() { return 0; }
28 // CHECK: "?b3@@YAPAMXZ"
30 const float *b4() { return 0; }
31 // CHECK: "?b4@@YAPBMXZ"
33 volatile float *b5() { return 0; }
34 // CHECK: "?b5@@YAPCMXZ"
36 const volatile float *b6() { return 0; }
37 // CHECK: "?b6@@YAPDMXZ"
39 float &b7() { return *(float*)0; }
40 // CHECK: "?b7@@YAAAMXZ"
42 const float &b8() { return *(float*)0; }
43 // CHECK: "?b8@@YAABMXZ"
45 volatile float &b9() { return *(float*)0; }
46 // CHECK: "?b9@@YAACMXZ"
48 const volatile float &b10() { return *(float*)0; }
49 // CHECK: "?b10@@YAADMXZ"
51 const char** b11() { return 0; }
52 // CHECK: "?b11@@YAPAPBDXZ"
56 A
c1() { return A(); }
57 // CHECK: "?c1@@YA?AVA@@XZ"
59 const A
c2() { return A(); }
60 // CHECK: "?c2@@YA?BVA@@XZ"
62 volatile A
c3() { return A(); }
63 // CHECK: "?c3@@YA?CVA@@XZ"
65 const volatile A
c4() { return A(); }
66 // CHECK: "?c4@@YA?DVA@@XZ"
68 const A
* c5() { return 0; }
69 // CHECK: "?c5@@YAPBVA@@XZ"
71 volatile A
* c6() { return 0; }
72 // CHECK: "?c6@@YAPCVA@@XZ"
74 const volatile A
* c7() { return 0; }
75 // CHECK: "?c7@@YAPDVA@@XZ"
77 A
&c8() { return *(A
*)0; }
78 // CHECK: "?c8@@YAAAVA@@XZ"
80 const A
&c9() { return *(A
*)0; }
81 // CHECK: "?c9@@YAABVA@@XZ"
83 volatile A
&c10() { return *(A
*)0; }
84 // CHECK: "?c10@@YAACVA@@XZ"
86 const volatile A
&c11() { return *(A
*)0; }
87 // CHECK: "?c11@@YAADVA@@XZ"
89 template<typename T
> class B
{};
91 B
<int> d1() { return B
<int>(); }
92 // CHECK: "?d1@@YA?AV?$B@H@@XZ"
94 B
<const char*> d2() {return B
<const char*>(); }
95 // CHECK: "?d2@@YA?AV?$B@PBD@@XZ"
97 B
<A
> d3() {return B
<A
>(); }
98 // CHECK: "?d3@@YA?AV?$B@VA@@@@XZ"
100 B
<A
>* d4() { return 0; }
101 // CHECK: "?d4@@YAPAV?$B@VA@@@@XZ"
103 const B
<A
>* d5() { return 0; }
104 // CHECK: "?d5@@YAPBV?$B@VA@@@@XZ"
106 volatile B
<A
>* d6() { return 0; }
107 // CHECK: "?d6@@YAPCV?$B@VA@@@@XZ"
109 const volatile B
<A
>* d7() { return 0; }
110 // CHECK: "?d7@@YAPDV?$B@VA@@@@XZ"
112 B
<A
>& d8() { return *(B
<A
>*)0; }
113 // CHECK: "?d8@@YAAAV?$B@VA@@@@XZ"
115 const B
<A
>& d9() { return *(B
<A
>*)0; }
116 // CHECK: "?d9@@YAABV?$B@VA@@@@XZ"
118 volatile B
<A
>& d10() { return *(B
<A
>*)0; }
119 // CHECK: "?d10@@YAACV?$B@VA@@@@XZ"
121 const volatile B
<A
>& d11() { return *(B
<A
>*)0; }
122 // CHECK: "?d11@@YAADV?$B@VA@@@@XZ"
124 enum Enum
{ DEFAULT
};
126 Enum
e1() { return DEFAULT
; }
127 // CHECK: "?e1@@YA?AW4Enum@@XZ"
129 const Enum
e2() { return DEFAULT
; }
130 // CHECK: "?e2@@YA?BW4Enum@@XZ"
132 Enum
* e3() { return 0; }
133 // CHECK: "?e3@@YAPAW4Enum@@XZ"
135 Enum
& e4() { return *(Enum
*)0; }
136 // CHECK: "?e4@@YAAAW4Enum@@XZ"
140 struct S
f1() { struct S s
; return s
; }
141 // CHECK: "?f1@@YA?AUS@@XZ"
143 const struct S
f2() { struct S s
; return s
; }
144 // CHECK: "?f2@@YA?BUS@@XZ"
146 struct S
* f3() { return 0; }
147 // CHECK: "?f3@@YAPAUS@@XZ"
149 const struct S
* f4() { return 0; }
150 // CHECK: "?f4@@YAPBUS@@XZ"
152 const volatile struct S
* f5() { return 0; }
153 // CHECK: "?f5@@YAPDUS@@XZ"
155 struct S
& f6() { return *(struct S
*)0; }
156 // CHECK: "?f6@@YAAAUS@@XZ"
158 struct S
* const f7() { return 0; }
159 // CHECK: "?f7@@YAQAUS@@XZ"
161 int S::* f8() { return 0; }
162 // CHECK: "?f8@@YAPQS@@HXZ"
164 int S::* const f9() { return 0; }
165 // CHECK: "?f9@@YAQQS@@HXZ"
167 int S::* __restrict
f10() { return 0; }
168 // CHECK: "?f10@@YAPIQS@@HXZ"
170 int S::* const __restrict
f11() { return 0; }
171 // CHECK: "?f11@@YAQIQS@@HXZ"
173 typedef int (*function_pointer
)(int);
175 function_pointer
g1() { return 0; }
176 // CHECK: "?g1@@YAP6AHH@ZXZ"
178 const function_pointer
g2() { return 0; }
179 // CHECK: "?g2@@YAQ6AHH@ZXZ"
181 function_pointer
* g3() { return 0; }
182 // CHECK: "?g3@@YAPAP6AHH@ZXZ"
184 const function_pointer
* g4() { return 0; }
185 // CHECK: "?g4@@YAPBQ6AHH@ZXZ"
188 int & __restrict
h1() { return z
; }
189 // CHECK: "?h1@@YAAIAHXZ"