blob: 95bc255bdde090a493be059e713fe79af6b4eb2c [file] [log] [blame]
Anders Carlsson3a082d82009-09-08 18:24:21 +00001// RUN: clang-cc %s -emit-llvm -o - | FileCheck %s
2
Daniel Dunbar0a23d762009-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 Carlsson3a082d82009-09-08 18:24:21 +00005
Daniel Dunbar0a23d762009-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 Carlsson3a082d82009-09-08 18:24:21 +00009
Daniel Dunbar0a23d762009-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 Carlsson3a082d82009-09-08 18:24:21 +000013
Daniel Dunbar0a23d762009-09-12 23:06:21 +000014// CHECK: private constant [12 x i8] c"~Destructor\00"
15// CHECK: private constant [35 x i8] c"void NS::Destructor::~Destructor()\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000016
Daniel Dunbar0a23d762009-09-12 23:06:21 +000017// CHECK: private constant [12 x i8] c"Constructor\00"
18// CHECK: private constant [46 x i8] c"void NS::Constructor::Constructor(NS::Base *)\00"
19// CHECK: private constant [39 x i8] c"void NS::Constructor::Constructor(int)\00"
20// CHECK: private constant [36 x i8] c"void NS::Constructor::Constructor()\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000021
Daniel Dunbar0a23d762009-09-12 23:06:21 +000022// CHECK: private constant [16 x i8] c"virtualFunction\00"
23// CHECK: private constant [44 x i8] c"virtual void NS::Derived::virtualFunction()\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000024
Daniel Dunbar0a23d762009-09-12 23:06:21 +000025// CHECK: private constant [26 x i8] c"functionReturingTemplate2\00"
26// CHECK: private constant [64 x i8] c"ClassTemplate<NS::Base *> NS::Base::functionReturingTemplate2()\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000027
Daniel Dunbar0a23d762009-09-12 23:06:21 +000028// CHECK: private constant [26 x i8] c"functionReturingTemplate1\00"
29// CHECK: private constant [57 x i8] c"ClassTemplate<int> NS::Base::functionReturingTemplate1()\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000030
Daniel Dunbar0a23d762009-09-12 23:06:21 +000031// CHECK: private constant [23 x i8] c"withTemplateParameter2\00"
32// CHECK: private constant [65 x i8] c"void NS::Base::withTemplateParameter2(ClassTemplate<NS::Base *>)\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000033
Daniel Dunbar0a23d762009-09-12 23:06:21 +000034// CHECK: private constant [23 x i8] c"withTemplateParameter1\00"
35// CHECK: private constant [58 x i8] c"void NS::Base::withTemplateParameter1(ClassTemplate<int>)\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000036
Daniel Dunbar0a23d762009-09-12 23:06:21 +000037// CHECK: private constant [23 x i8] c"functionReturningClass\00"
38// CHECK: private constant [45 x i8] c"NS::Base *NS::Base::functionReturningClass()\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000039
Daniel Dunbar0a23d762009-09-12 23:06:21 +000040// CHECK: private constant [23 x i8] c"functionWithParameters\00"
41// CHECK: private constant [64 x i8] c"void NS::Base::functionWithParameters(int, float *, NS::Base *)\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000042
Daniel Dunbar0a23d762009-09-12 23:06:21 +000043// CHECK: private constant [17 x i8] c"variadicFunction\00"
44// CHECK: private constant [42 x i8] c"void NS::Base::variadicFunction(int, ...)\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000045
Daniel Dunbar0a23d762009-09-12 23:06:21 +000046// CHECK: private constant [41 x i8] c"virtual void NS::Base::virtualFunction()\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000047
Daniel Dunbar0a23d762009-09-12 23:06:21 +000048// CHECK: private constant [15 x i8] c"inlineFunction\00"
49// CHECK: private constant [32 x i8] c"void NS::Base::inlineFunction()\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000050
Daniel Dunbar0a23d762009-09-12 23:06:21 +000051// CHECK: private constant [11 x i8] c"staticFunc\00"
52// CHECK: private constant [28 x i8] c"void NS::Base::staticFunc()\00"
Anders Carlsson3a082d82009-09-08 18:24:21 +000053
Mike Stump76bee4b2009-10-08 23:05:06 +000054int printf(const char * _Format, ...);
Anders Carlsson3a082d82009-09-08 18:24:21 +000055
56namespace NS {
57
58template<typename T>
59class ClassTemplate {
60public:
61 void classTemplateFunction() {
62 printf("__func__ %s\n", __func__);
63 printf("__FUNCTION__ %s\n", __FUNCTION__);
64 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
65 }
66};
67
68class Base {
69public:
70 static void staticFunc() {
71 printf("__func__ %s\n", __func__);
72 printf("__FUNCTION__ %s\n", __FUNCTION__);
73 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
74 }
75
76 inline void inlineFunction() {
77 printf("__func__ %s\n", __func__);
78 printf("__FUNCTION__ %s\n", __FUNCTION__);
79 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
80 }
81
82 virtual void virtualFunction() {
83 printf("__func__ %s\n", __func__);
84 printf("__FUNCTION__ %s\n", __FUNCTION__);
85 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
86 }
87
88 void functionWithParameters(int, float*, Base* base) {
89 printf("__func__ %s\n", __func__);
90 printf("__FUNCTION__ %s\n", __FUNCTION__);
91 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
92 }
93
94 Base *functionReturningClass() {
95 printf("__func__ %s\n", __func__);
96 printf("__FUNCTION__ %s\n", __FUNCTION__);
97 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
98 return 0;
99 }
100
101 void variadicFunction(int, ...) {
102 printf("__func__ %s\n", __func__);
103 printf("__FUNCTION__ %s\n", __FUNCTION__);
104 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
105 }
106
107 void withTemplateParameter1(ClassTemplate<int>) {
108 printf("__func__ %s\n", __func__);
109 printf("__FUNCTION__ %s\n", __FUNCTION__);
110 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
111 }
112
113 void withTemplateParameter2(ClassTemplate<Base *>) {
114 printf("__func__ %s\n", __func__);
115 printf("__FUNCTION__ %s\n", __FUNCTION__);
116 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
117 }
118
119 ClassTemplate<int> functionReturingTemplate1() {
120 printf("__func__ %s\n", __func__);
121 printf("__FUNCTION__ %s\n", __FUNCTION__);
122 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
123 return ClassTemplate<int>();
124 }
125
126 ClassTemplate<Base *> functionReturingTemplate2() {
127 printf("__func__ %s\n", __func__);
128 printf("__FUNCTION__ %s\n", __FUNCTION__);
129 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
130 return ClassTemplate<Base *>();
131 }
132
133 template<typename T>
134 void functionTemplate1(T t) {
135 printf("__func__ %s\n", __func__);
136 printf("__FUNCTION__ %s\n", __FUNCTION__);
137 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
138 }
139};
140
141class Derived : public Base {
142public:
143 // Virtual function without being explicitally written.
144 void virtualFunction() {
145 printf("__func__ %s\n", __func__);
146 printf("__FUNCTION__ %s\n", __FUNCTION__);
147 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
148 }
149};
150
151class Constructor {
152public:
153 Constructor() {
154 printf("__func__ %s\n", __func__);
155 printf("__FUNCTION__ %s\n", __FUNCTION__);
156 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
157 }
158
159 Constructor(int) {
160 printf("__func__ %s\n", __func__);
161 printf("__FUNCTION__ %s\n", __FUNCTION__);
162 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
163 }
164
165 Constructor(Base *) {
166 printf("__func__ %s\n", __func__);
167 printf("__FUNCTION__ %s\n", __FUNCTION__);
168 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
169 }
170
171};
172
173class Destructor {
174public:
175 ~Destructor() {
176 printf("__func__ %s\n", __func__);
177 printf("__FUNCTION__ %s\n", __FUNCTION__);
178 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
179 }
180};
181
182extern void externFunction() {
183 printf("__func__ %s\n", __func__);
184 printf("__FUNCTION__ %s\n", __FUNCTION__);
185 printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__);
186}
187
188}
189
190int main() {
191 NS::Base::staticFunc();
192
193 NS::Base b;
194 b.inlineFunction();
195 b.virtualFunction();
196 b.variadicFunction(0);
197 b.functionWithParameters(0, 0, 0);
198 b.functionReturningClass();
199
200 b.withTemplateParameter1(NS::ClassTemplate<int>());
201 b.withTemplateParameter2(NS::ClassTemplate<NS::Base *>());
202 b.functionReturingTemplate1();
203 b.functionReturingTemplate2();
204 b.functionTemplate1<int>(0);
205 b.functionTemplate1<NS::Base *>(0);
206
207 NS::Derived d;
208 d.virtualFunction();
209
210 NS::ClassTemplate<int> t1;
211 t1.classTemplateFunction();
212 NS::ClassTemplate<NS::Base *> t2;
213 t2.classTemplateFunction();
214
215 NS::Constructor c1;
216 NS::Constructor c2(0);
217 NS::Constructor c3((NS::Base *)0);
218
219 {
220 NS::Destructor destructor;
221 }
222
223 NS::externFunction();
224
225 return 0;
226}