aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/TemplateBase.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-01-14 23:41:42 +0000
committerDouglas Gregor <dgregor@apple.com>2011-01-14 23:41:42 +0000
commit2be29f423acad3bbe39099a78db2805acb5bdf17 (patch)
tree9f0cf2a12cef339c6f54a06ed7c9445d60bb5875 /lib/AST/TemplateBase.cpp
parent6a24bfda084f06a0b252b7befe8cbb17fce7f94e (diff)
Teach template template argument pack expansions to keep track of the
number of expansions, when we know it, and propagate that information through Sema. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123493 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/TemplateBase.cpp')
-rw-r--r--lib/AST/TemplateBase.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/AST/TemplateBase.cpp b/lib/AST/TemplateBase.cpp
index 26c0c08971..f3def3eff2 100644
--- a/lib/AST/TemplateBase.cpp
+++ b/lib/AST/TemplateBase.cpp
@@ -135,6 +135,14 @@ bool TemplateArgument::containsUnexpandedParameterPack() const {
return false;
}
+llvm::Optional<unsigned> TemplateArgument::getNumTemplateExpansions() const {
+ assert(Kind == TemplateExpansion);
+ if (TemplateArg.NumExpansions)
+ return TemplateArg.NumExpansions - 1;
+
+ return llvm::Optional<unsigned>();
+}
+
void TemplateArgument::Profile(llvm::FoldingSetNodeID &ID,
const ASTContext &Context) const {
ID.AddInteger(Kind);
@@ -223,7 +231,7 @@ TemplateArgument TemplateArgument::getPackExpansionPattern() const {
return cast<PackExpansionExpr>(getAsExpr())->getPattern();
case TemplateExpansion:
- return TemplateArgument(getAsTemplateOrTemplatePattern(), false);
+ return TemplateArgument(getAsTemplateOrTemplatePattern());
case Declaration:
case Integral:
@@ -389,8 +397,8 @@ TemplateArgumentLoc::getPackExpansionPattern(SourceLocation &Ellipsis,
}
case TemplateArgument::TemplateExpansion:
- // FIXME: Variadic templates num expansions
Ellipsis = getTemplateEllipsisLoc();
+ NumExpansions = Argument.getNumTemplateExpansions();
return TemplateArgumentLoc(Argument.getPackExpansionPattern(),
getTemplateQualifierRange(),
getTemplateNameLoc());