diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-01-03 22:36:02 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-01-03 22:36:02 +0000 |
commit | f90b27ad077c3339b62befc892382845339f9490 (patch) | |
tree | 43c0b1485e694007d51d4ddf51c8244aed3e5434 /lib/CodeGen/Mangle.cpp | |
parent | 0fe5397b26695926a835fa99eceb7fc879b307af (diff) |
Implement pack expansions whose pattern is a base-specifier.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122782 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/Mangle.cpp')
-rw-r--r-- | lib/CodeGen/Mangle.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index 0aa9f402f9..834ef4e569 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/lib/CodeGen/Mangle.cpp @@ -2137,8 +2137,9 @@ void CXXNameMangler::mangleTemplateArg(const NamedDecl *P, // ::= I <template-arg>* E # argument pack // ::= sp <expression> # pack expansion of (C++0x) switch (A.getKind()) { - default: - assert(0 && "Unknown template argument kind!"); + case TemplateArgument::Null: + llvm_unreachable("Cannot mangle NULL template argument"); + case TemplateArgument::Type: mangleType(A.getAsType()); break; @@ -2187,6 +2188,16 @@ void CXXNameMangler::mangleTemplateArg(const NamedDecl *P, break; } + + case TemplateArgument::Pack: { + // Note: proposal by Mike Herrick on 12/20/10 + Out << 'J'; + for (TemplateArgument::pack_iterator PA = A.pack_begin(), + PAEnd = A.pack_end(); + PA != PAEnd; ++PA) + mangleTemplateArg(P, *PA); + Out << 'E'; + } } } |