summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/MicrosoftMangle.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-06-04 16:46:32 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-06-04 16:46:32 +0000
commit06fa05ae9032c2370beb586b07fc4e1b80ceb1f8 (patch)
treea5f6ccb64a95fd34aae1e77518549925b21ff880 /clang/lib/AST/MicrosoftMangle.cpp
parente31a3ed3d44f9a8b49c75ef1cba495dad7be8744 (diff)
downloadbcm5719-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.cpp13
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()));
OpenPOWER on IntegriCloud