From 309f6456626fdc85181fd42d9ed8d9c0c5a6746a Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Tue, 27 Aug 2013 08:21:25 +0000 Subject: [PATCH] [-cxx-abi microsoft] Remove ArgIndex, we handle all template argument kinds! TemplateExpansion cannot happen here because MSVC doesn't mangle anything but the fully substituted template arguments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189325 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/MicrosoftMangle.cpp | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/lib/AST/MicrosoftMangle.cpp b/lib/AST/MicrosoftMangle.cpp index cb93f070ff..87527c9294 100644 --- a/lib/AST/MicrosoftMangle.cpp +++ b/lib/AST/MicrosoftMangle.cpp @@ -135,8 +135,7 @@ private: 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 @@ -903,17 +902,18 @@ MicrosoftCXXNameMangler::mangleTemplateArgs(const TemplateDecl *TD, 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); @@ -936,28 +936,14 @@ void MicrosoftCXXNameMangler::mangleTemplateArg(const TemplateDecl *TD, 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( 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(); - } } } -- 2.40.0