predefined-expr.cpp revision 3a1ce1ed0f5686384e712837bad28c576622e442
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 54int printf(const char * _Format, ...); 55 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} 227