diff options
author | Anders Carlsson <andersca@mac.com> | 2009-09-17 05:31:47 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-09-17 05:31:47 +0000 |
commit | 068f347772fee0cdf66614230d7dba69cd3fa2e6 (patch) | |
tree | 69d7c826bfc127dd5c1aeccfca612dde5e5b7de4 /lib/CodeGen/Mangle.cpp | |
parent | b237fd6f36145c023ed12fe83f21727cbe197158 (diff) |
Revert r82123 for now.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82125 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/Mangle.cpp')
-rw-r--r-- | lib/CodeGen/Mangle.cpp | 35 |
1 files changed, 14 insertions, 21 deletions
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<FunctionDecl>(ND); - if (FD && FD->getPrimaryTemplate()) { + if (FD && FD->getPrimaryTemplate()) mangleUnscopedTemplateName(FD); - mangleTemplateArgs(*FD->getTemplateSpecializationArgs()); - } else + else mangleUnscopedName(ND); } else if (isa<FunctionDecl>(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<FunctionDecl>(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<ClassTemplateSpecializationDecl>(T->getDecl())) - mangleTemplateArgs(Spec->getTemplateArgs()); + mangleTemplateArgumentList(Spec->getTemplateArgs()); } // <type> ::= <array-type> @@ -872,20 +877,20 @@ void CXXNameMangler::mangleCXXDtorType(CXXDtorType T) { } } -void CXXNameMangler::mangleTemplateArgs(const TemplateArgumentList &L) { +void CXXNameMangler::mangleTemplateArgumentList(const TemplateArgumentList &L) { // <template-args> ::= I <template-arg>+ 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) { // <template-arg> ::= <type> # type or template // ::= X <expression> E # expression // ::= <expr-primary> # 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<RecordType>(T)) - return mangleSubstitution(RT->getDecl()); - } - uintptr_t TypePtr = reinterpret_cast<uintptr_t>(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<RecordType>(T)) { - addSubstitution(RT->getDecl()); - return; - } - } - uintptr_t TypePtr = reinterpret_cast<uintptr_t>(T.getAsOpaquePtr()); addSubstitution(TypePtr); } |