diff options
author | Anders Carlsson <andersca@mac.com> | 2009-09-26 23:10:05 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-09-26 23:10:05 +0000 |
commit | 8c0315563f05a9face7209221325019e272075fb (patch) | |
tree | 076a68c5929a0b56e0d1653d5465e26955bcf04c /lib/CodeGen/Mangle.cpp | |
parent | aeb85374e92619b8e4ce92ac6e30756b5053a137 (diff) |
Mangle ::std::allocator as Sa.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82880 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/Mangle.cpp')
-rw-r--r-- | lib/CodeGen/Mangle.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index 3db736b7b4..639d719b79 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/lib/CodeGen/Mangle.cpp @@ -1132,18 +1132,26 @@ bool CXXNameMangler::mangleSubstitution(uintptr_t Ptr) { bool CXXNameMangler::mangleStandardSubstitution(const NamedDecl *ND) { // <substitution> ::= St # ::std:: + if (const NamespaceDecl *NS = dyn_cast<NamespaceDecl>(ND)) { + if (NS->getParent()->isTranslationUnit() && + NS->getOriginalNamespace()->getIdentifier()->isStr("std")) { + Out << "St"; + return true; + } + } + + if (const ClassTemplateDecl *TD = dyn_cast<ClassTemplateDecl>(ND)) { + if (!isStdNamespace(TD->getDeclContext())) + return false; + + // <substitution> ::= Sa # ::std::allocator + if (TD->getIdentifier()->isStr("allocator")) { + Out << "Sa"; + return true; + } + } - const NamespaceDecl *NS = dyn_cast<NamespaceDecl>(ND); - if (!NS) - return false; - if (!NS->getParent()->isTranslationUnit()) - return false; - - if (!NS->getOriginalNamespace()->getIdentifier()->isStr("std")) - return false; - - Out << "St"; - return true; + return false; } void CXXNameMangler::addSubstitution(QualType T) { |