diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-06-04 16:46:32 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-06-04 16:46:32 +0000 |
commit | 06fa05ae9032c2370beb586b07fc4e1b80ceb1f8 (patch) | |
tree | a5f6ccb64a95fd34aae1e77518549925b21ff880 /clang/lib/AST/MicrosoftMangle.cpp | |
parent | e31a3ed3d44f9a8b49c75ef1cba495dad7be8744 (diff) | |
download | bcm5719-llvm-06fa05ae9032c2370beb586b07fc4e1b80ceb1f8.tar.gz bcm5719-llvm-06fa05ae9032c2370beb586b07fc4e1b80ceb1f8.zip |
MS-ABI: Mangle empty template parameter packs correctly
Tested for compatibility with VS2013.
llvm-svn: 210198
Diffstat (limited to 'clang/lib/AST/MicrosoftMangle.cpp')
-rw-r--r-- | clang/lib/AST/MicrosoftMangle.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index d444bf09963..2cc1e5f46c6 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -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())); |