blob: e726adb16337e08cb5d719205cb752c5376c6670 [file] [log] [blame]
Daniel Dunbar8fbe78f2009-12-15 20:14:24 +00001// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
Anders Carlsson2fb08242009-09-08 18:24:21 +00002
Daniel Dunbar0482cfd2009-09-12 23:06:21 +00003// CHECK: private constant [15 x i8] c"externFunction\00"
4// CHECK: private constant [26 x i8] c"void NS::externFunction()\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +00005
Daniel Dunbar0482cfd2009-09-12 23:06:21 +00006// CHECK: private constant [22 x i8] c"classTemplateFunction\00"
7// CHECK: private constant [60 x i8] c"void NS::ClassTemplate<NS::Base *>::classTemplateFunction()\00"
8// CHECK: private constant [53 x i8] c"void NS::ClassTemplate<int>::classTemplateFunction()\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +00009
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000010// CHECK: private constant [18 x i8] c"functionTemplate1\00"
11// CHECK: private constant [45 x i8] c"void NS::Base::functionTemplate1(NS::Base *)\00"
12// CHECK: private constant [38 x i8] c"void NS::Base::functionTemplate1(int)\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000013
Sam Weinig07d211e2009-12-24 23:15:03 +000014// CHECK: private constant [23 x i8] c"anonymousUnionFunction\00"
15// CHECK: private constant [83 x i8] c"void NS::ContainerForAnonymousRecords::<anonymous union>::anonymousUnionFunction()\00"
16
17// CHECK: private constant [24 x i8] c"anonymousStructFunction\00"
18// CHECK: private constant [85 x i8] c"void NS::ContainerForAnonymousRecords::<anonymous struct>::anonymousStructFunction()\00"
19
20// CHECK: private constant [23 x i8] c"anonymousClassFunction\00"
21// CHECK: private constant [83 x i8] c"void NS::ContainerForAnonymousRecords::<anonymous class>::anonymousClassFunction()\00"
22
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000023// CHECK: private constant [12 x i8] c"~Destructor\00"
Sam Weinigd060ed42009-12-06 23:55:13 +000024// CHECK: private constant [30 x i8] c"NS::Destructor::~Destructor()\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000025
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000026// CHECK: private constant [12 x i8] c"Constructor\00"
Sam Weinigd060ed42009-12-06 23:55:13 +000027// CHECK: private constant [41 x i8] c"NS::Constructor::Constructor(NS::Base *)\00"
28// CHECK: private constant [34 x i8] c"NS::Constructor::Constructor(int)\00"
29// CHECK: private constant [31 x i8] c"NS::Constructor::Constructor()\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000030
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000031// CHECK: private constant [16 x i8] c"virtualFunction\00"
32// CHECK: private constant [44 x i8] c"virtual void NS::Derived::virtualFunction()\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000033
Sam Weinig4e83bd22009-12-27 01:38:20 +000034// CHECK: private constant [22 x i8] c"constVolatileFunction\00"
35// CHECK: private constant [54 x i8] c"void NS::Base::constVolatileFunction() const volatile\00"
36
37// CHECK: private constant [17 x i8] c"volatileFunction\00"
38// CHECK: private constant [43 x i8] c"void NS::Base::volatileFunction() volatile\00"
39
40// CHECK: private constant [14 x i8] c"constFunction\00"
41// CHECK: private constant [37 x i8] c"void NS::Base::constFunction() const\00"
42
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000043// CHECK: private constant [26 x i8] c"functionReturingTemplate2\00"
44// CHECK: private constant [64 x i8] c"ClassTemplate<NS::Base *> NS::Base::functionReturingTemplate2()\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000045
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000046// CHECK: private constant [26 x i8] c"functionReturingTemplate1\00"
47// CHECK: private constant [57 x i8] c"ClassTemplate<int> NS::Base::functionReturingTemplate1()\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000048
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000049// CHECK: private constant [23 x i8] c"withTemplateParameter2\00"
50// CHECK: private constant [65 x i8] c"void NS::Base::withTemplateParameter2(ClassTemplate<NS::Base *>)\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000051
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000052// CHECK: private constant [23 x i8] c"withTemplateParameter1\00"
53// CHECK: private constant [58 x i8] c"void NS::Base::withTemplateParameter1(ClassTemplate<int>)\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000054
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000055// CHECK: private constant [23 x i8] c"functionReturningClass\00"
56// CHECK: private constant [45 x i8] c"NS::Base *NS::Base::functionReturningClass()\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000057
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000058// CHECK: private constant [23 x i8] c"functionWithParameters\00"
59// CHECK: private constant [64 x i8] c"void NS::Base::functionWithParameters(int, float *, NS::Base *)\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000060
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000061// CHECK: private constant [17 x i8] c"variadicFunction\00"
62// CHECK: private constant [42 x i8] c"void NS::Base::variadicFunction(int, ...)\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000063
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000064// CHECK: private constant [41 x i8] c"virtual void NS::Base::virtualFunction()\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000065
Daniel Dunbar0482cfd2009-09-12 23:06:21 +000066// CHECK: private constant [15 x i8] c"inlineFunction\00"
67// CHECK: private constant [32 x i8] c"void NS::Base::inlineFunction()\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000068
Sam Weinig4e83bd22009-12-27 01:38:20 +000069// CHECK: private constant [15 x i8] c"staticFunction\00"
70// CHECK: private constant [39 x i8] c"static void NS::Base::staticFunction()\00"
Anders Carlsson2fb08242009-09-08 18:24:21 +000071
Sam Weinig07d211e2009-12-24 23:15:03 +000072// CHECK: private constant [26 x i8] c"topLevelNamespaceFunction\00"
73// CHECK: private constant [59 x i8] c"void ClassInTopLevelNamespace::topLevelNamespaceFunction()\00"
74
75// CHECK: private constant [27 x i8] c"anonymousNamespaceFunction\00"
76// CHECK: private constant [84 x i8] c"void <anonymous namespace>::ClassInAnonymousNamespace::anonymousNamespaceFunction()\00"
77
Mike Stumpf8c1f0d2009-10-08 23:05:06 +000078int printf(const char * _Format, ...);
Anders Carlsson2fb08242009-09-08 18:24:21 +000079
Sam Weinig07d211e2009-12-24 23:15:03 +000080class ClassInTopLevelNamespace {
81public:
82 void topLevelNamespaceFunction() {
83 printf("__func__ %s\n", __func__);
84 printf("__FUNCTION__ %s\n", __FUNCTION__);
85 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
86 }
87};
88
89namespace {
90
91 class ClassInAnonymousNamespace {
92 public:
93 void anonymousNamespaceFunction() {
94 printf("__func__ %s\n", __func__);
95 printf("__FUNCTION__ %s\n", __FUNCTION__);
96 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
97 }
98 };
99
100} // end anonymous namespace
101
Anders Carlsson2fb08242009-09-08 18:24:21 +0000102namespace NS {
103
104template<typename T>
105class ClassTemplate {
106public:
107 void classTemplateFunction() {
108 printf("__func__ %s\n", __func__);
109 printf("__FUNCTION__ %s\n", __FUNCTION__);
110 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
111 }
112};
113
114class Base {
115public:
Sam Weinig4e83bd22009-12-27 01:38:20 +0000116 static void staticFunction() {
Anders Carlsson2fb08242009-09-08 18:24:21 +0000117 printf("__func__ %s\n", __func__);
118 printf("__FUNCTION__ %s\n", __FUNCTION__);
119 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
120 }
121
122 inline void inlineFunction() {
123 printf("__func__ %s\n", __func__);
124 printf("__FUNCTION__ %s\n", __FUNCTION__);
125 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
126 }
127
128 virtual void virtualFunction() {
129 printf("__func__ %s\n", __func__);
130 printf("__FUNCTION__ %s\n", __FUNCTION__);
131 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
132 }
133
134 void functionWithParameters(int, float*, Base* base) {
135 printf("__func__ %s\n", __func__);
136 printf("__FUNCTION__ %s\n", __FUNCTION__);
137 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
138 }
139
140 Base *functionReturningClass() {
141 printf("__func__ %s\n", __func__);
142 printf("__FUNCTION__ %s\n", __FUNCTION__);
143 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
144 return 0;
145 }
146
147 void variadicFunction(int, ...) {
148 printf("__func__ %s\n", __func__);
149 printf("__FUNCTION__ %s\n", __FUNCTION__);
150 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
151 }
152
153 void withTemplateParameter1(ClassTemplate<int>) {
154 printf("__func__ %s\n", __func__);
155 printf("__FUNCTION__ %s\n", __FUNCTION__);
156 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
157 }
158
159 void withTemplateParameter2(ClassTemplate<Base *>) {
160 printf("__func__ %s\n", __func__);
161 printf("__FUNCTION__ %s\n", __FUNCTION__);
162 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
163 }
164
165 ClassTemplate<int> functionReturingTemplate1() {
166 printf("__func__ %s\n", __func__);
167 printf("__FUNCTION__ %s\n", __FUNCTION__);
168 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
169 return ClassTemplate<int>();
170 }
171
172 ClassTemplate<Base *> functionReturingTemplate2() {
173 printf("__func__ %s\n", __func__);
174 printf("__FUNCTION__ %s\n", __FUNCTION__);
175 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
176 return ClassTemplate<Base *>();
177 }
178
179 template<typename T>
180 void functionTemplate1(T t) {
181 printf("__func__ %s\n", __func__);
182 printf("__FUNCTION__ %s\n", __FUNCTION__);
183 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
184 }
Sam Weinig4e83bd22009-12-27 01:38:20 +0000185
186 void constFunction() const {
187 printf("__func__ %s\n", __func__);
188 printf("__FUNCTION__ %s\n", __FUNCTION__);
189 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
190 }
191
192 void volatileFunction() volatile {
193 printf("__func__ %s\n", __func__);
194 printf("__FUNCTION__ %s\n", __FUNCTION__);
195 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
196 }
197
198 void constVolatileFunction() const volatile {
199 printf("__func__ %s\n", __func__);
200 printf("__FUNCTION__ %s\n", __FUNCTION__);
201 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
202 }
Anders Carlsson2fb08242009-09-08 18:24:21 +0000203};
204
205class Derived : public Base {
206public:
207 // Virtual function without being explicitally written.
208 void virtualFunction() {
209 printf("__func__ %s\n", __func__);
210 printf("__FUNCTION__ %s\n", __FUNCTION__);
211 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
212 }
213};
214
215class Constructor {
216public:
217 Constructor() {
218 printf("__func__ %s\n", __func__);
219 printf("__FUNCTION__ %s\n", __FUNCTION__);
220 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
221 }
222
223 Constructor(int) {
224 printf("__func__ %s\n", __func__);
225 printf("__FUNCTION__ %s\n", __FUNCTION__);
226 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
227 }
228
229 Constructor(Base *) {
230 printf("__func__ %s\n", __func__);
231 printf("__FUNCTION__ %s\n", __FUNCTION__);
232 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
233 }
Anders Carlsson2fb08242009-09-08 18:24:21 +0000234};
235
236class Destructor {
237public:
238 ~Destructor() {
239 printf("__func__ %s\n", __func__);
240 printf("__FUNCTION__ %s\n", __FUNCTION__);
241 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
242 }
243};
244
Sam Weinig07d211e2009-12-24 23:15:03 +0000245class ContainerForAnonymousRecords {
246public:
247 class {
248 public:
249 void anonymousClassFunction() {
250 printf("__func__ %s\n", __func__);
251 printf("__FUNCTION__ %s\n", __FUNCTION__);
252 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
253 }
254 } anonymousClass;
255
256 struct {
257 void anonymousStructFunction() {
258 printf("__func__ %s\n", __func__);
259 printf("__FUNCTION__ %s\n", __FUNCTION__);
260 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
261 }
262 } anonymousStruct;
263
264 union {
265 void anonymousUnionFunction() {
266 printf("__func__ %s\n", __func__);
267 printf("__FUNCTION__ %s\n", __FUNCTION__);
268 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
269 }
270 } anonymousUnion;
271};
272
Anders Carlsson2fb08242009-09-08 18:24:21 +0000273extern void externFunction() {
274 printf("__func__ %s\n", __func__);
275 printf("__FUNCTION__ %s\n", __FUNCTION__);
276 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
277}
278
Sam Weinig07d211e2009-12-24 23:15:03 +0000279} // end NS namespace
Anders Carlsson2fb08242009-09-08 18:24:21 +0000280
281int main() {
Sam Weinig07d211e2009-12-24 23:15:03 +0000282 ClassInAnonymousNamespace anonymousNamespace;
283 anonymousNamespace.anonymousNamespaceFunction();
Anders Carlsson2fb08242009-09-08 18:24:21 +0000284
Sam Weinig07d211e2009-12-24 23:15:03 +0000285 ClassInTopLevelNamespace topLevelNamespace;
286 topLevelNamespace.topLevelNamespaceFunction();
287
Sam Weinig4e83bd22009-12-27 01:38:20 +0000288 NS::Base::staticFunction();
Sam Weinig07d211e2009-12-24 23:15:03 +0000289
Anders Carlsson2fb08242009-09-08 18:24:21 +0000290 NS::Base b;
291 b.inlineFunction();
292 b.virtualFunction();
293 b.variadicFunction(0);
294 b.functionWithParameters(0, 0, 0);
295 b.functionReturningClass();
296
297 b.withTemplateParameter1(NS::ClassTemplate<int>());
298 b.withTemplateParameter2(NS::ClassTemplate<NS::Base *>());
299 b.functionReturingTemplate1();
300 b.functionReturingTemplate2();
301 b.functionTemplate1<int>(0);
302 b.functionTemplate1<NS::Base *>(0);
Sam Weinig4e83bd22009-12-27 01:38:20 +0000303 b.constFunction();
304 b.volatileFunction();
305 b.constVolatileFunction();
306
Anders Carlsson2fb08242009-09-08 18:24:21 +0000307 NS::Derived d;
308 d.virtualFunction();
309
310 NS::ClassTemplate<int> t1;
311 t1.classTemplateFunction();
312 NS::ClassTemplate<NS::Base *> t2;
313 t2.classTemplateFunction();
314
315 NS::Constructor c1;
316 NS::Constructor c2(0);
317 NS::Constructor c3((NS::Base *)0);
318
319 {
320 NS::Destructor destructor;
321 }
Sam Weinig07d211e2009-12-24 23:15:03 +0000322
323 NS::ContainerForAnonymousRecords anonymous;
324 anonymous.anonymousClass.anonymousClassFunction();
325 anonymous.anonymousStruct.anonymousStructFunction();
326 anonymous.anonymousUnion.anonymousUnionFunction();
327
Anders Carlsson2fb08242009-09-08 18:24:21 +0000328 NS::externFunction();
Sam Weinig07d211e2009-12-24 23:15:03 +0000329
Anders Carlsson2fb08242009-09-08 18:24:21 +0000330 return 0;
331}