From 068f347772fee0cdf66614230d7dba69cd3fa2e6 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Thu, 17 Sep 2009 05:31:47 +0000 Subject: Revert r82123 for now. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82125 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/Mangle.cpp | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) (limited to 'lib/CodeGen/Mangle.cpp') diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index f42e395e55..8241ad61d0 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/lib/CodeGen/Mangle.cpp @@ -93,8 +93,8 @@ namespace { void mangleCXXCtorType(CXXCtorType T); void mangleCXXDtorType(CXXDtorType T); - void mangleTemplateArgs(const TemplateArgumentList &L); - void mangleTemplateArg(const TemplateArgument &A); + void mangleTemplateArgumentList(const TemplateArgumentList &L); + void mangleTemplateArgument(const TemplateArgument &A); }; } @@ -252,10 +252,9 @@ void CXXNameMangler::mangleName(const NamedDecl *ND) { if (ND->getDeclContext()->isTranslationUnit() || isStdNamespace(ND->getDeclContext())) { const FunctionDecl *FD = dyn_cast(ND); - if (FD && FD->getPrimaryTemplate()) { + if (FD && FD->getPrimaryTemplate()) mangleUnscopedTemplateName(FD); - mangleTemplateArgs(*FD->getTemplateSpecializationArgs()); - } else + else mangleUnscopedName(ND); } else if (isa(ND->getDeclContext())) mangleLocalName(ND); @@ -387,6 +386,12 @@ void CXXNameMangler::mangleUnqualifiedName(const NamedDecl *ND) { assert(false && "Can't mangle a using directive name!"); break; } + + if (const FunctionDecl *Function = dyn_cast(ND)) { + if (const TemplateArgumentList *TemplateArgs + = Function->getTemplateSpecializationArgs()) + mangleTemplateArgumentList(*TemplateArgs); + } } void CXXNameMangler::mangleSourceName(const IdentifierInfo *II) { @@ -710,7 +715,7 @@ void CXXNameMangler::mangleType(const TagType *T) { // If this is a class template specialization, mangle the template arguments. if (ClassTemplateSpecializationDecl *Spec = dyn_cast(T->getDecl())) - mangleTemplateArgs(Spec->getTemplateArgs()); + mangleTemplateArgumentList(Spec->getTemplateArgs()); } // ::= @@ -872,20 +877,20 @@ void CXXNameMangler::mangleCXXDtorType(CXXDtorType T) { } } -void CXXNameMangler::mangleTemplateArgs(const TemplateArgumentList &L) { +void CXXNameMangler::mangleTemplateArgumentList(const TemplateArgumentList &L) { // ::= I + E Out << "I"; for (unsigned i = 0, e = L.size(); i != e; ++i) { const TemplateArgument &A = L[i]; - mangleTemplateArg(A); + mangleTemplateArgument(A); } Out << "E"; } -void CXXNameMangler::mangleTemplateArg(const TemplateArgument &A) { +void CXXNameMangler::mangleTemplateArgument(const TemplateArgument &A) { // ::= # type or template // ::= X E # expression // ::= # simple expressions @@ -927,11 +932,6 @@ bool CXXNameMangler::mangleSubstitution(const NamedDecl *ND) { } bool CXXNameMangler::mangleSubstitution(QualType T) { - if (!T.getCVRQualifiers()) { - if (const RecordType *RT = dyn_cast(T)) - return mangleSubstitution(RT->getDecl()); - } - uintptr_t TypePtr = reinterpret_cast(T.getAsOpaquePtr()); return mangleSubstitution(TypePtr); @@ -972,13 +972,6 @@ bool CXXNameMangler::mangleSubstitution(uintptr_t Ptr) { } void CXXNameMangler::addSubstitution(QualType T) { - if (!T.getCVRQualifiers()) { - if (const RecordType *RT = dyn_cast(T)) { - addSubstitution(RT->getDecl()); - return; - } - } - uintptr_t TypePtr = reinterpret_cast(T.getAsOpaquePtr()); addSubstitution(TypePtr); } -- cgit v1.2.3-18-g5258