]> granicus.if.org Git - clang/commitdiff
Use mangleTemplatePrefix when we know that we're mangling a nested template name.
authorAnders Carlsson <andersca@mac.com>
Sun, 27 Sep 2009 19:53:49 +0000 (19:53 +0000)
committerAnders Carlsson <andersca@mac.com>
Sun, 27 Sep 2009 19:53:49 +0000 (19:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82912 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 660a36bce0e6d31c3490eae1e108a9a24d730b0b..ab157e56bfba9381da03174cc377d77c18739dbb 100644 (file)
@@ -480,11 +480,13 @@ void CXXNameMangler::mangleNestedName(const NamedDecl *ND) {
 void CXXNameMangler::mangleNestedName(const TemplateDecl *TD, 
                                       const TemplateArgument *TemplateArgs,
                                       unsigned NumTemplateArgs) {
+  // <nested-name> ::= N [<CV-qualifiers>] <template-prefix> <template-args> E
+
   Out << 'N';
-  manglePrefix(TD->getDeclContext());
-  mangleUnqualifiedName(TD);
   
+  mangleTemplatePrefix(TD);
   mangleTemplateArgs(TemplateArgs, NumTemplateArgs);
+  
   Out << 'E';
 }
 
index cda6df58ea2dc98fa8b0762e57d7ec467fd32a84..c53a6300aa19cf388220ec1289d3830a3a94761c 100644 (file)
@@ -46,3 +46,11 @@ template <typename T> void f2(V<T>, typename V<T>::U) { }
 
 // CHECK: @_Z2f2IiEv1VIT_ENS2_1UE
 template void f2<int>(V<int>, int);
+
+namespace NS {
+template <typename T> struct S1 {};
+template<typename T> void ft3(S1<T>, S1<char>) {  }
+
+// CHECK: @_ZN2NS3ft3IiEEvNS_2S1IT_EENS1_IcEE
+template void ft3<int>(S1<int>, S1<char>);
+}