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 | 872ce0dc31c265da8f55fa4976a7f9fe25cf74e6 (patch) | |
tree | 1c6f4548cb6de2b302f036405afc593a9cb57481 /clang/lib/CodeGen/Mangle.cpp | |
parent | 3e83c30c4c21bb653052369b8bf3b7b008fd8a20 (diff) | |
download | bcm5719-llvm-872ce0dc31c265da8f55fa4976a7f9fe25cf74e6.tar.gz bcm5719-llvm-872ce0dc31c265da8f55fa4976a7f9fe25cf74e6.zip |
Mangle ::std::allocator as Sa.
llvm-svn: 82880
Diffstat (limited to 'clang/lib/CodeGen/Mangle.cpp')
-rw-r--r-- | clang/lib/CodeGen/Mangle.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp index 3db736b7b48..639d719b79f 100644 --- a/clang/lib/CodeGen/Mangle.cpp +++ b/clang/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) { |