r177589 - [ms-cxxabi] Mangle function pointer template arguments correctly

Reid Kleckner reid at kleckner.net
Wed Mar 20 15:29:42 PDT 2013


Author: rnk
Date: Wed Mar 20 17:29:42 2013
New Revision: 177589

URL: http://llvm.org/viewvc/llvm-project?rev=177589&view=rev
Log:
[ms-cxxabi] Mangle function pointer template arguments correctly

Reviewers: rjmccall

CC: timurrrr, llvm-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D554

Modified:
    cfe/trunk/lib/AST/MicrosoftMangle.cpp
    cfe/trunk/test/CodeGenCXX/mangle-ms-templates.cpp

Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=177589&r1=177588&r2=177589&view=diff
==============================================================================
--- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original)
+++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Wed Mar 20 17:29:42 2013
@@ -827,6 +827,9 @@ MicrosoftCXXNameMangler::mangleTemplateA
     case TemplateArgument::Type:
       mangleType(TA.getAsType(), SourceRange());
       break;
+    case TemplateArgument::Declaration:
+      mangle(cast<NamedDecl>(TA.getAsDecl()), "$1?");
+      break;
     case TemplateArgument::Integral:
       mangleIntegerLiteral(TA.getAsIntegral(),
                            TA.getIntegralType()->isBooleanType());
@@ -836,7 +839,6 @@ MicrosoftCXXNameMangler::mangleTemplateA
       break;
     case TemplateArgument::Template:
     case TemplateArgument::TemplateExpansion:
-    case TemplateArgument::Declaration:
     case TemplateArgument::NullPtr:
     case TemplateArgument::Pack: {
       // Issue a diagnostic.

Modified: cfe/trunk/test/CodeGenCXX/mangle-ms-templates.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-ms-templates.cpp?rev=177589&r1=177588&r2=177589&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/mangle-ms-templates.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/mangle-ms-templates.cpp Wed Mar 20 17:29:42 2013
@@ -78,3 +78,16 @@ namespace space {
 void use() {
   space::foo(42);
 }
+
+// PR13455
+typedef void (*FunctionPointer)(void);
+
+template <FunctionPointer function>
+void FunctionPointerTemplate() {
+  function();
+}
+
+void spam() {
+  FunctionPointerTemplate<spam>();
+// CHECK: "\01??$FunctionPointerTemplate@$1?spam@@YAXXZ@@YAXXZ"
+}





More information about the cfe-commits mailing list