// RUN: clang-cc %s -emit-llvm -o - | FileCheck %s // CHECK: private constant [15 x i8] c"externFunction\00" // CHECK: private constant [26 x i8] c"void NS::externFunction()\00" // CHECK: private constant [22 x i8] c"classTemplateFunction\00" // CHECK: private constant [60 x i8] c"void NS::ClassTemplate::classTemplateFunction()\00" // CHECK: private constant [53 x i8] c"void NS::ClassTemplate::classTemplateFunction()\00" // CHECK: private constant [18 x i8] c"functionTemplate1\00" // CHECK: private constant [45 x i8] c"void NS::Base::functionTemplate1(NS::Base *)\00" // CHECK: private constant [38 x i8] c"void NS::Base::functionTemplate1(int)\00" // CHECK: private constant [12 x i8] c"~Destructor\00" // CHECK: private constant [35 x i8] c"void NS::Destructor::~Destructor()\00" // CHECK: private constant [12 x i8] c"Constructor\00" // CHECK: private constant [46 x i8] c"void NS::Constructor::Constructor(NS::Base *)\00" // CHECK: private constant [39 x i8] c"void NS::Constructor::Constructor(int)\00" // CHECK: private constant [36 x i8] c"void NS::Constructor::Constructor()\00" // CHECK: private constant [16 x i8] c"virtualFunction\00" // CHECK: private constant [44 x i8] c"virtual void NS::Derived::virtualFunction()\00" // CHECK: private constant [26 x i8] c"functionReturingTemplate2\00" // CHECK: private constant [64 x i8] c"ClassTemplate NS::Base::functionReturingTemplate2()\00" // CHECK: private constant [26 x i8] c"functionReturingTemplate1\00" // CHECK: private constant [57 x i8] c"ClassTemplate NS::Base::functionReturingTemplate1()\00" // CHECK: private constant [23 x i8] c"withTemplateParameter2\00" // CHECK: private constant [65 x i8] c"void NS::Base::withTemplateParameter2(ClassTemplate)\00" // CHECK: private constant [23 x i8] c"withTemplateParameter1\00" // CHECK: private constant [58 x i8] c"void NS::Base::withTemplateParameter1(ClassTemplate)\00" // CHECK: private constant [23 x i8] c"functionReturningClass\00" // CHECK: private constant [45 x i8] c"NS::Base *NS::Base::functionReturningClass()\00" // CHECK: private constant [23 x i8] c"functionWithParameters\00" // CHECK: private constant [64 x i8] c"void NS::Base::functionWithParameters(int, float *, NS::Base *)\00" // CHECK: private constant [17 x i8] c"variadicFunction\00" // CHECK: private constant [42 x i8] c"void NS::Base::variadicFunction(int, ...)\00" // CHECK: private constant [41 x i8] c"virtual void NS::Base::virtualFunction()\00" // CHECK: private constant [15 x i8] c"inlineFunction\00" // CHECK: private constant [32 x i8] c"void NS::Base::inlineFunction()\00" // CHECK: private constant [11 x i8] c"staticFunc\00" // CHECK: private constant [28 x i8] c"void NS::Base::staticFunc()\00" int printf(const char * _Format, ...); namespace NS { template class ClassTemplate { public: void classTemplateFunction() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } }; class Base { public: static void staticFunc() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } inline void inlineFunction() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } virtual void virtualFunction() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } void functionWithParameters(int, float*, Base* base) { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } Base *functionReturningClass() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); return 0; } void variadicFunction(int, ...) { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } void withTemplateParameter1(ClassTemplate) { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } void withTemplateParameter2(ClassTemplate) { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } ClassTemplate functionReturingTemplate1() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); return ClassTemplate(); } ClassTemplate functionReturingTemplate2() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); return ClassTemplate(); } template void functionTemplate1(T t) { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } }; class Derived : public Base { public: // Virtual function without being explicitally written. void virtualFunction() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } }; class Constructor { public: Constructor() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } Constructor(int) { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } Constructor(Base *) { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } }; class Destructor { public: ~Destructor() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } }; extern void externFunction() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } } int main() { NS::Base::staticFunc(); NS::Base b; b.inlineFunction(); b.virtualFunction(); b.variadicFunction(0); b.functionWithParameters(0, 0, 0); b.functionReturningClass(); b.withTemplateParameter1(NS::ClassTemplate()); b.withTemplateParameter2(NS::ClassTemplate()); b.functionReturingTemplate1(); b.functionReturingTemplate2(); b.functionTemplate1(0); b.functionTemplate1(0); NS::Derived d; d.virtualFunction(); NS::ClassTemplate t1; t1.classTemplateFunction(); NS::ClassTemplate t2; t2.classTemplateFunction(); NS::Constructor c1; NS::Constructor c2(0); NS::Constructor c3((NS::Base *)0); { NS::Destructor destructor; } NS::externFunction(); return 0; }