From 201ce7485c3401adad861fd0979f1bfefc064ff7 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Thu, 17 Sep 2009 03:17:01 +0000 Subject: [PATCH] Add new functions to the mangler for the and productions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82113 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/Mangle.cpp | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index 3d7fc83322..21398677dc 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/lib/CodeGen/Mangle.cpp @@ -63,6 +63,8 @@ namespace { void mangleFunctionEncoding(const FunctionDecl *FD); void mangleName(const NamedDecl *ND); void mangleUnqualifiedName(const NamedDecl *ND); + void mangleUnscopedName(const NamedDecl *ND); + void mangleUnscopedTemplateName(const FunctionDecl *ND); void mangleSourceName(const IdentifierInfo *II); void mangleLocalName(const NamedDecl *ND); void mangleNestedName(const NamedDecl *ND); @@ -233,21 +235,36 @@ void CXXNameMangler::mangleName(const NamedDecl *ND) { // ::= // ::= // ::= - // ::= # See Scope Encoding below + // ::= // - // ::= - // ::= St # ::std:: - if (ND->getDeclContext()->isTranslationUnit()) - mangleUnqualifiedName(ND); - else if (isStdNamespace(ND->getDeclContext())) { - Out << "St"; - mangleUnqualifiedName(ND); + if (ND->getDeclContext()->isTranslationUnit() || + isStdNamespace(ND->getDeclContext())) { + const FunctionDecl *FD = dyn_cast(ND); + if (FD && FD->getPrimaryTemplate()) + mangleUnscopedTemplateName(FD); + else + mangleUnscopedName(ND); } else if (isa(ND->getDeclContext())) mangleLocalName(ND); else mangleNestedName(ND); } +void CXXNameMangler::mangleUnscopedName(const NamedDecl *ND) { + // ::= + // ::= St # ::std:: + if (isStdNamespace(ND->getDeclContext())) + Out << "St"; + + mangleUnqualifiedName(ND); +} + +void CXXNameMangler::mangleUnscopedTemplateName(const FunctionDecl *FD) { + // ::= + // ::= + mangleUnscopedName(FD); +} + void CXXNameMangler::mangleCalloffset(int64_t nv, int64_t v) { // ::= h _ // ::= v _ -- 2.50.1