summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/Mangle.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-01-04 18:56:13 +0000
committerDouglas Gregor <dgregor@apple.com>2011-01-04 18:56:13 +0000
commitbe63bbfd2401a72b66c190e012985397471af24d (patch)
tree78949b623a26f800d97cbc8c0684c253043ee94b /clang/lib/CodeGen/Mangle.cpp
parent41a1550ef59b0eaab87e55393d6441ec06b6f2a7 (diff)
downloadbcm5719-llvm-be63bbfd2401a72b66c190e012985397471af24d.tar.gz
bcm5719-llvm-be63bbfd2401a72b66c190e012985397471af24d.zip
Implement name mangling for sizeof...(pack), to silence the last of
the switch-enum warnings. Test is forthcoming, once I've dealt with some template argument deduction issues. llvm-svn: 122820
Diffstat (limited to 'clang/lib/CodeGen/Mangle.cpp')
-rw-r--r--clang/lib/CodeGen/Mangle.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp
index 834ef4e5693..0969b8716f6 100644
--- a/clang/lib/CodeGen/Mangle.cpp
+++ b/clang/lib/CodeGen/Mangle.cpp
@@ -2048,6 +2048,28 @@ void CXXNameMangler::mangleExpression(const Expr *E, unsigned Arity) {
Out << "sp";
mangleExpression(cast<PackExpansionExpr>(E)->getPattern());
break;
+
+ case Expr::SizeOfPackExprClass: {
+ // FIXME: Variadic templates missing mangling for function parameter packs?
+ Out << "sZ";
+ const NamedDecl *Pack = cast<SizeOfPackExpr>(E)->getPack();
+ if (const TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Pack))
+ mangleTemplateParameter(TTP->getIndex());
+ else if (const NonTypeTemplateParmDecl *NTTP
+ = dyn_cast<NonTypeTemplateParmDecl>(Pack))
+ mangleTemplateParameter(NTTP->getIndex());
+ else if (const TemplateTemplateParmDecl *TempTP
+ = dyn_cast<TemplateTemplateParmDecl>(Pack))
+ mangleTemplateParameter(TempTP->getIndex());
+ else {
+ // FIXME: This case isn't handled by the Itanium C++ ABI
+ Diagnostic &Diags = Context.getDiags();
+ unsigned DiagID = Diags.getCustomDiagID(Diagnostic::Error,
+ "cannot mangle sizeof...(function parameter pack)");
+ Diags.Report(DiagID);
+ return;
+ }
+ }
}
}
OpenPOWER on IntegriCloud