diff options
author | Sam Weinig <sam.weinig@gmail.com> | 2009-12-24 23:15:03 +0000 |
---|---|---|
committer | Sam Weinig <sam.weinig@gmail.com> | 2009-12-24 23:15:03 +0000 |
commit | 6be112049b24ffaa8508646aa695834b4b5ca2b2 (patch) | |
tree | 05967611636e173fa38d9ad13e76c1be6d91e3c8 /test/CodeGenCXX/predefined-expr.cpp | |
parent | 607d037c3f4376cbc8979d0eb9cd2f49a58ea033 (diff) |
Fix for PR5844. Be explicit about anonymous struct/class/union/namespaces in __PRETTY_FUNCTION__ predefined expression.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92149 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/predefined-expr.cpp')
-rw-r--r-- | test/CodeGenCXX/predefined-expr.cpp | 85 |
1 files changed, 80 insertions, 5 deletions
diff --git a/test/CodeGenCXX/predefined-expr.cpp b/test/CodeGenCXX/predefined-expr.cpp index 6bd53c95f7..92abcabbca 100644 --- a/test/CodeGenCXX/predefined-expr.cpp +++ b/test/CodeGenCXX/predefined-expr.cpp @@ -11,6 +11,15 @@ // 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 [23 x i8] c"anonymousUnionFunction\00" +// CHECK: private constant [83 x i8] c"void NS::ContainerForAnonymousRecords::<anonymous union>::anonymousUnionFunction()\00" + +// CHECK: private constant [24 x i8] c"anonymousStructFunction\00" +// CHECK: private constant [85 x i8] c"void NS::ContainerForAnonymousRecords::<anonymous struct>::anonymousStructFunction()\00" + +// CHECK: private constant [23 x i8] c"anonymousClassFunction\00" +// CHECK: private constant [83 x i8] c"void NS::ContainerForAnonymousRecords::<anonymous class>::anonymousClassFunction()\00" + // CHECK: private constant [12 x i8] c"~Destructor\00" // CHECK: private constant [30 x i8] c"NS::Destructor::~Destructor()\00" @@ -51,8 +60,36 @@ // CHECK: private constant [11 x i8] c"staticFunc\00" // CHECK: private constant [28 x i8] c"void NS::Base::staticFunc()\00" +// CHECK: private constant [26 x i8] c"topLevelNamespaceFunction\00" +// CHECK: private constant [59 x i8] c"void ClassInTopLevelNamespace::topLevelNamespaceFunction()\00" + +// CHECK: private constant [27 x i8] c"anonymousNamespaceFunction\00" +// CHECK: private constant [84 x i8] c"void <anonymous namespace>::ClassInAnonymousNamespace::anonymousNamespaceFunction()\00" + int printf(const char * _Format, ...); +class ClassInTopLevelNamespace { +public: + void topLevelNamespaceFunction() { + printf("__func__ %s\n", __func__); + printf("__FUNCTION__ %s\n", __FUNCTION__); + printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); + } +}; + +namespace { + + class ClassInAnonymousNamespace { + public: + void anonymousNamespaceFunction() { + printf("__func__ %s\n", __func__); + printf("__FUNCTION__ %s\n", __FUNCTION__); + printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); + } + }; + +} // end anonymous namespace + namespace NS { template<typename T> @@ -167,7 +204,6 @@ public: printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } - }; class Destructor { @@ -179,17 +215,51 @@ public: } }; +class ContainerForAnonymousRecords { +public: + class { + public: + void anonymousClassFunction() { + printf("__func__ %s\n", __func__); + printf("__FUNCTION__ %s\n", __FUNCTION__); + printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); + } + } anonymousClass; + + struct { + void anonymousStructFunction() { + printf("__func__ %s\n", __func__); + printf("__FUNCTION__ %s\n", __FUNCTION__); + printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); + } + } anonymousStruct; + + union { + void anonymousUnionFunction() { + printf("__func__ %s\n", __func__); + printf("__FUNCTION__ %s\n", __FUNCTION__); + printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); + } + } anonymousUnion; +}; + extern void externFunction() { printf("__func__ %s\n", __func__); printf("__FUNCTION__ %s\n", __FUNCTION__); printf("__PRETTY_FUNCTION__ %s\n\n", __PRETTY_FUNCTION__); } -} +} // end NS namespace int main() { - NS::Base::staticFunc(); + ClassInAnonymousNamespace anonymousNamespace; + anonymousNamespace.anonymousNamespaceFunction(); + + ClassInTopLevelNamespace topLevelNamespace; + topLevelNamespace.topLevelNamespaceFunction(); + NS::Base::staticFunc(); + NS::Base b; b.inlineFunction(); b.virtualFunction(); @@ -219,8 +289,13 @@ int main() { { NS::Destructor destructor; } - + + NS::ContainerForAnonymousRecords anonymous; + anonymous.anonymousClass.anonymousClassFunction(); + anonymous.anonymousStruct.anonymousStructFunction(); + anonymous.anonymousUnion.anonymousUnionFunction(); + NS::externFunction(); - + return 0; } |