forked from OSchip/llvm-project
MS-ABI: Mangle empty template parameter packs correctly
Tested for compatibility with VS2013. llvm-svn: 210198
This commit is contained in:
parent
e31a3ed3d4
commit
06fa05ae90
|
@ -1174,11 +1174,16 @@ void MicrosoftCXXNameMangler::mangleTemplateArg(const TemplateDecl *TD,
|
|||
case TemplateArgument::Expression:
|
||||
mangleExpression(TA.getAsExpr());
|
||||
break;
|
||||
case TemplateArgument::Pack:
|
||||
// Unlike Itanium, there is no character code to indicate an argument pack.
|
||||
for (const TemplateArgument &PA : TA.getPackAsArray())
|
||||
mangleTemplateArg(TD, PA);
|
||||
case TemplateArgument::Pack: {
|
||||
llvm::ArrayRef<TemplateArgument> TemplateArgs = TA.getPackAsArray();
|
||||
if (TemplateArgs.empty()) {
|
||||
Out << "$S";
|
||||
} else {
|
||||
for (const TemplateArgument &PA : TemplateArgs)
|
||||
mangleTemplateArg(TD, PA);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TemplateArgument::Template:
|
||||
mangleType(cast<TagDecl>(
|
||||
TA.getAsTemplate().getAsTemplateDecl()->getTemplatedDecl()));
|
||||
|
|
|
@ -133,3 +133,9 @@ void A::foo() __restrict && {}
|
|||
|
||||
int operator"" _deg(long double) { return 0; }
|
||||
// CHECK-DAG: @"\01??__K_deg@@YAHO@Z"
|
||||
|
||||
template <char...>
|
||||
void templ_fun_with_pack() {}
|
||||
|
||||
template void templ_fun_with_pack<>();
|
||||
// CHECK-DAG: @"\01??$templ_fun_with_pack@$S@@YAXXZ"
|
||||
|
|
Loading…
Reference in New Issue