summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-04-15 05:51:25 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-04-15 05:51:25 +0000
commit2e159fb6db4eb6d0b88cfc380e72a7049af9265e (patch)
treed02f6fe66dc85c1b00e3886d664ea62292aca3b2
parent88368bae4cbf9cca6f8148e5397cf0cf805ebd57 (diff)
downloadbcm5719-llvm-2e159fb6db4eb6d0b88cfc380e72a7049af9265e.tar.gz
bcm5719-llvm-2e159fb6db4eb6d0b88cfc380e72a7049af9265e.zip
AST: Elaborated type specifier mangling occurs before nested-name
The Ts/Tu/Te manglings should occur before the nested-name's N. llvm-svn: 206247
-rw-r--r--clang/lib/AST/ItaniumMangle.cpp4
-rw-r--r--clang/test/CodeGenCXX/mangle.cpp8
2 files changed, 6 insertions, 6 deletions
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index 24e643e1f2c..bb7de2f0809 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -2359,8 +2359,6 @@ void CXXNameMangler::mangleType(const TemplateSpecializationType *T) {
}
void CXXNameMangler::mangleType(const DependentNameType *T) {
- // Typename types are always nested
- Out << 'N';
// Proposal by cxx-abi-dev, 2014-03-26
// <class-enum-type> ::= <name> # non-dependent or dependent type name or
// # dependent elaborated type specifier using
@@ -2388,6 +2386,8 @@ void CXXNameMangler::mangleType(const DependentNameType *T) {
default:
llvm_unreachable("unexpected keyword for dependent type name");
}
+ // Typename types are always nested
+ Out << 'N';
manglePrefix(T->getQualifier());
mangleSourceName(T->getIdentifier());
Out << 'E';
diff --git a/clang/test/CodeGenCXX/mangle.cpp b/clang/test/CodeGenCXX/mangle.cpp
index 24207dbce64..c55e3e0f8a5 100644
--- a/clang/test/CodeGenCXX/mangle.cpp
+++ b/clang/test/CodeGenCXX/mangle.cpp
@@ -959,7 +959,7 @@ namespace test45 {
template <typename T>
void f(enum T::e *) {}
template void f<S>(S::e *);
- // CHECK-LABEL: define weak_odr void @_ZN6test451fINS_1SEEEvPNTeT_1eE(i32*)
+ // CHECK-LABEL: define weak_odr void @_ZN6test451fINS_1SEEEvPTeNT_1eE(i32*)
}
namespace test46 {
@@ -969,7 +969,7 @@ namespace test46 {
template <typename T>
void f(struct T::s *) {}
template void f<S>(S::s *);
- // CHECK-LABEL: define weak_odr void @_ZN6test461fINS_1SEEEvPNTsT_1sE(%"struct.test46::S::s"*)
+ // CHECK-LABEL: define weak_odr void @_ZN6test461fINS_1SEEEvPTsNT_1sE(%"struct.test46::S::s"*)
}
namespace test47 {
@@ -979,7 +979,7 @@ namespace test47 {
template <typename T>
void f(class T::c *) {}
template void f<S>(S::c *);
- // CHECK-LABEL: define weak_odr void @_ZN6test471fINS_1SEEEvPNTsT_1cE(%"class.test47::S::c"*)
+ // CHECK-LABEL: define weak_odr void @_ZN6test471fINS_1SEEEvPTsNT_1cE(%"class.test47::S::c"*)
}
namespace test48 {
@@ -989,5 +989,5 @@ namespace test48 {
template <typename T>
void f(union T::u *) {}
template void f<S>(S::u *);
- // CHECK-LABEL: define weak_odr void @_ZN6test481fINS_1SEEEvPNTuT_1uE(%"union.test48::S::u"*)
+ // CHECK-LABEL: define weak_odr void @_ZN6test481fINS_1SEEEvPTuNT_1uE(%"union.test48::S::u"*)
}
OpenPOWER on IntegriCloud