[ms-cxxabi] Mangle function pointer template arguments correctly

Reviewers: rjmccall

CC: timurrrr, llvm-commits

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

llvm-svn: 177589
This commit is contained in:
Reid Kleckner 2013-03-20 22:29:42 +00:00
parent 67f25272f1
commit 831b71e0b5
2 changed files with 16 additions and 1 deletions

View File

@ -827,6 +827,9 @@ MicrosoftCXXNameMangler::mangleTemplateArgs(const TemplateDecl *TD,
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::mangleTemplateArgs(const TemplateDecl *TD,
break;
case TemplateArgument::Template:
case TemplateArgument::TemplateExpansion:
case TemplateArgument::Declaration:
case TemplateArgument::NullPtr:
case TemplateArgument::Pack: {
// Issue a diagnostic.

View File

@ -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"
}