diff options
Diffstat (limited to 'clang/lib/CodeGen/Mangle.cpp')
-rw-r--r-- | clang/lib/CodeGen/Mangle.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp index 0aa9f402f96..834ef4e5693 100644 --- a/clang/lib/CodeGen/Mangle.cpp +++ b/clang/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'; + } } } |