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