]> granicus.if.org Git - clang/commitdiff
Mangle ::std::basic_string as Sb.
authorAnders Carlsson <andersca@mac.com>
Sat, 26 Sep 2009 23:14:39 +0000 (23:14 +0000)
committerAnders Carlsson <andersca@mac.com>
Sat, 26 Sep 2009 23:14:39 +0000 (23:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82881 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/Mangle.cpp
test/CodeGenCXX/mangle-subst-std.cpp

index 639d719b79fb4bf08da5ac542ccfb18ff74cb5b7..ff2388e798309d30a726d6fab0f214cc3639ee6d 100644 (file)
@@ -1149,6 +1149,12 @@ bool CXXNameMangler::mangleStandardSubstitution(const NamedDecl *ND) {
       Out << "Sa";
       return true;
     }
+    
+    // <<substitution> ::= Sb # ::std::basic_string
+    if (TD->getIdentifier()->isStr("basic_string")) {
+      Out << "Sb";
+      return true;
+    }
   }
   
   return false;
index 0fd5eb1c9b90b4bfd6bbb7ef891ed03f170a9737..c35804e2d35f03d98bd67fb3d8c8680073b6bc62 100644 (file)
@@ -9,10 +9,19 @@ namespace std {
 };
 
 namespace std {
-  template<typename T> struct allocator { allocator(); };
+  template<typename T> struct allocator { };
 }
 
 // FIXME: typename is really not allowed here, but it's kept 
 // as a workaround for PR5061.
 // CHECK: define void @_Z1fSaIcESaIiE
 void f(typename std::allocator<char>, typename std::allocator<int>) { }
+
+namespace std {
+  template<typename T> struct basic_string { };
+}
+
+// FIXME: typename is really not allowed here, but it's kept 
+// as a workaround for PR5061.
+// CHECK: define void @_Z1fSbIcESbIiE
+void f(typename std::basic_string<char>, typename std::basic_string<int>) { }