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" +} _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
