void mangleTemplateArgs(const TemplateDecl *TD,
const TemplateArgumentList &TemplateArgs);
- void mangleTemplateArg(const TemplateDecl *TD, const TemplateArgument &TA,
- int ArgIndex);
+ void mangleTemplateArg(const TemplateDecl *TD, const TemplateArgument &TA);
};
/// MicrosoftMangleContext - Overrides the default MangleContext for the
unsigned NumTemplateArgs = TemplateArgs.size();
for (unsigned i = 0; i < NumTemplateArgs; ++i) {
const TemplateArgument &TA = TemplateArgs[i];
- mangleTemplateArg(TD, TA, i);
+ mangleTemplateArg(TD, TA);
}
Out << '@';
}
void MicrosoftCXXNameMangler::mangleTemplateArg(const TemplateDecl *TD,
- const TemplateArgument &TA,
- int ArgIndex) {
+ const TemplateArgument &TA) {
switch (TA.getKind()) {
case TemplateArgument::Null:
llvm_unreachable("Can't mangle null template arguments!");
+ case TemplateArgument::TemplateExpansion:
+ llvm_unreachable("Can't mangle template expansion arguments!");
case TemplateArgument::Type: {
QualType T = TA.getAsType();
mangleType(T, SourceRange(), QMM_Escape);
break;
case TemplateArgument::Pack:
// Unlike Itanium, there is no character code to indicate an argument pack.
- // FIXME: ArgIndex will be off, but we only use if for diagnostics that
- // should ultimately be removed.
for (TemplateArgument::pack_iterator I = TA.pack_begin(), E = TA.pack_end();
I != E; ++I)
- mangleTemplateArg(TD, *I, ArgIndex);
+ mangleTemplateArg(TD, *I);
break;
case TemplateArgument::Template:
mangleType(cast<TagDecl>(
TA.getAsTemplate().getAsTemplateDecl()->getTemplatedDecl()));
break;
- case TemplateArgument::TemplateExpansion: {
- // Issue a diagnostic.
- DiagnosticsEngine &Diags = Context.getDiags();
- unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
- "cannot mangle template argument %0 of kind %select{ERROR|ERROR|"
- "pointer/reference|nullptr|integral|template|template pack expansion|"
- "ERROR|parameter pack}1 yet");
- Diags.Report(TD->getLocation(), DiagID)
- << ArgIndex + 1
- << TA.getKind()
- << TD->getSourceRange();
- }
}
}