summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/MicrosoftMangle.cpp
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2018-09-08 20:58:39 +0000
committerNico Weber <nicolasweber@gmx.de>2018-09-08 20:58:39 +0000
commite2dd15785b281d842c35a4854c1bee28ebf70594 (patch)
tree6c1d5546bbc25e18828f4a8193f763a05eeda0bd /clang/lib/AST/MicrosoftMangle.cpp
parent2e00b98027b51ee5bfb88a4daea8b78bf9a01e62 (diff)
downloadbcm5719-llvm-e2dd15785b281d842c35a4854c1bee28ebf70594.tar.gz
bcm5719-llvm-e2dd15785b281d842c35a4854c1bee28ebf70594.zip
ms: Insert $$Z in mangling between directly consecutive parameter packs.
Fixes PR38783. Differential Revision: https://reviews.llvm.org/D51784 llvm-svn: 341755
Diffstat (limited to 'clang/lib/AST/MicrosoftMangle.cpp')
-rw-r--r--clang/lib/AST/MicrosoftMangle.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp
index 348f05d3682..6f1a1f4fed6 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -1384,9 +1384,16 @@ void MicrosoftCXXNameMangler::mangleTemplateArgs(
assert(TPL->size() == TemplateArgs.size() &&
"size mismatch between args and parms!");
- unsigned Idx = 0;
- for (const TemplateArgument &TA : TemplateArgs.asArray())
- mangleTemplateArg(TD, TA, TPL->getParam(Idx++));
+ for (size_t i = 0; i < TemplateArgs.size(); ++i) {
+ const TemplateArgument &TA = TemplateArgs[i];
+
+ // Separate consecutive packs by $$Z.
+ if (i > 0 && TA.getKind() == TemplateArgument::Pack &&
+ TemplateArgs[i - 1].getKind() == TemplateArgument::Pack)
+ Out << "$$Z";
+
+ mangleTemplateArg(TD, TA, TPL->getParam(i));
+ }
}
void MicrosoftCXXNameMangler::mangleTemplateArg(const TemplateDecl *TD,
OpenPOWER on IntegriCloud