[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:
parent
67f25272f1
commit
831b71e0b5
|
@ -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.
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue