summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/Mangle.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-09-26 23:10:05 +0000
committerAnders Carlsson <andersca@mac.com>2009-09-26 23:10:05 +0000
commit872ce0dc31c265da8f55fa4976a7f9fe25cf74e6 (patch)
tree1c6f4548cb6de2b302f036405afc593a9cb57481 /clang/lib/CodeGen/Mangle.cpp
parent3e83c30c4c21bb653052369b8bf3b7b008fd8a20 (diff)
downloadbcm5719-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.cpp30
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) {
OpenPOWER on IntegriCloud