summaryrefslogtreecommitdiffstats
path: root/test/CodeGenCXX/mangle-local-class-names.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2013-10-22 04:14:18 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2013-10-22 04:14:18 +0000
commit588a51a471b4cb23613e8183e05d2d193d2ab813 (patch)
tree6694aba70d5968f2b4e245f4fa0b2bfd64f0c312 /test/CodeGenCXX/mangle-local-class-names.cpp
parent2cfbf0552f90c7ef42975ca1b9064888550ca2ee (diff)
Sema: Do not allow template declarations inside local classes
Summary: Enforce the rule in C++11 [temp.mem]p2 that local classes cannot have member templates. This fixes PR16947. N.B. C++14 has slightly different wording to afford generic lambdas declared inside of functions. Fun fact: Some formulations of local classes with member templates would cause clang to crash during Itanium mangling, such as the following: void outer_mem() { struct Inner { template <typename = void> struct InnerTemplateClass { static void itc_mem() {} }; }; Inner::InnerTemplateClass<>::itc_mem(); } Reviewers: eli.friedman, rsmith, doug.gregor, faisalv Reviewed By: doug.gregor CC: cfe-commits, ygao Differential Revision: http://llvm-reviews.chandlerc.com/D1866 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@193144 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/mangle-local-class-names.cpp')
-rw-r--r--test/CodeGenCXX/mangle-local-class-names.cpp10
1 files changed, 0 insertions, 10 deletions
diff --git a/test/CodeGenCXX/mangle-local-class-names.cpp b/test/CodeGenCXX/mangle-local-class-names.cpp
index 186d76a225..8b950fcd17 100644
--- a/test/CodeGenCXX/mangle-local-class-names.cpp
+++ b/test/CodeGenCXX/mangle-local-class-names.cpp
@@ -75,16 +75,6 @@ inline void OmittingCode(float x) {
}
void CallOmittingCode() { OmittingCode(1); }
-// CHECK: @_ZZ25LocalTemplateFunctionTestdEN5Local3fooIdEET_S1_
-int LocalTemplateFunctionTest(double d) {
- struct Local {
- template<class T> T foo(T t) {
- return t;
- }
- };
- return Local().foo(d);
-}
-
// CHECK: @_ZZ15LocalAnonStructvENUt0_1gEv
inline void LocalAnonStruct() {
if (0) {