]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGenCXX/predefined-expr.cpp
Update clang to 91430.
[FreeBSD/FreeBSD.git] / test / CodeGenCXX / predefined-expr.cpp
1 // RUN: clang-cc %s -emit-llvm -o - | FileCheck %s
2
3 // CHECK: private constant [15 x i8] c"externFunction\00"
4 // CHECK: private constant [26 x i8] c"void NS::externFunction()\00"
5
6 // 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"
9
10 // 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"
13
14 // CHECK: private constant [12 x i8] c"~Destructor\00"
15 // CHECK: private constant [30 x i8] c"NS::Destructor::~Destructor()\00"
16
17 // CHECK: private constant [12 x i8] c"Constructor\00"
18 // CHECK: private constant [41 x i8] c"NS::Constructor::Constructor(NS::Base *)\00"
19 // CHECK: private constant [34 x i8] c"NS::Constructor::Constructor(int)\00"
20 // CHECK: private constant [31 x i8] c"NS::Constructor::Constructor()\00"
21
22 // CHECK: private constant [16 x i8] c"virtualFunction\00"
23 // CHECK: private constant [44 x i8] c"virtual void NS::Derived::virtualFunction()\00"
24
25 // CHECK: private constant [26 x i8] c"functionReturingTemplate2\00"
26 // CHECK: private constant [64 x i8] c"ClassTemplate<NS::Base *> NS::Base::functionReturingTemplate2()\00"
27
28 // CHECK: private constant [26 x i8] c"functionReturingTemplate1\00"
29 // CHECK: private constant [57 x i8] c"ClassTemplate<int> NS::Base::functionReturingTemplate1()\00"
30
31 // 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"
33
34 // CHECK: private constant [23 x i8] c"withTemplateParameter1\00"
35 // CHECK: private constant [58 x i8] c"void NS::Base::withTemplateParameter1(ClassTemplate<int>)\00"
36
37 // CHECK: private constant [23 x i8] c"functionReturningClass\00"
38 // CHECK: private constant [45 x i8] c"NS::Base *NS::Base::functionReturningClass()\00"
39
40 // 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"
42
43 // CHECK: private constant [17 x i8] c"variadicFunction\00"
44 // CHECK: private constant [42 x i8] c"void NS::Base::variadicFunction(int, ...)\00"
45
46 // CHECK: private constant [41 x i8] c"virtual void NS::Base::virtualFunction()\00"
47
48 // CHECK: private constant [15 x i8] c"inlineFunction\00"
49 // CHECK: private constant [32 x i8] c"void NS::Base::inlineFunction()\00"
50
51 // CHECK: private constant [11 x i8] c"staticFunc\00"
52 // CHECK: private constant [28 x i8] c"void NS::Base::staticFunc()\00"
53
54 int printf(const char * _Format, ...);
55
56 namespace NS {
57
58 template<typename T>
59 class ClassTemplate {
60 public:
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
68 class Base {
69 public:
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
141 class Derived : public Base {
142 public:
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
151 class Constructor {
152 public:
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
173 class Destructor {
174 public:
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
182 extern 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
190 int 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 }