From 853bb50382ef23935fbb0ff3a8126b01b8e33f55 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Sat, 26 Sep 2009 23:14:39 +0000 Subject: [PATCH] Mangle ::std::basic_string as Sb. llvm-svn: 82881 --- clang/lib/CodeGen/Mangle.cpp | 6 ++++++ clang/test/CodeGenCXX/mangle-subst-std.cpp | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp index 639d719b79fb..ff2388e79830 100644 --- a/clang/lib/CodeGen/Mangle.cpp +++ b/clang/lib/CodeGen/Mangle.cpp @@ -1149,6 +1149,12 @@ bool CXXNameMangler::mangleStandardSubstitution(const NamedDecl *ND) { Out << "Sa"; return true; } + + // < ::= Sb # ::std::basic_string + if (TD->getIdentifier()->isStr("basic_string")) { + Out << "Sb"; + return true; + } } return false; diff --git a/clang/test/CodeGenCXX/mangle-subst-std.cpp b/clang/test/CodeGenCXX/mangle-subst-std.cpp index 0fd5eb1c9b90..c35804e2d35f 100644 --- a/clang/test/CodeGenCXX/mangle-subst-std.cpp +++ b/clang/test/CodeGenCXX/mangle-subst-std.cpp @@ -9,10 +9,19 @@ namespace std { }; namespace std { - template struct allocator { allocator(); }; + template 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, typename std::allocator) { } + +namespace std { + template 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, typename std::basic_string) { }