diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-01-14 23:41:42 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-01-14 23:41:42 +0000 |
commit | 2be29f423acad3bbe39099a78db2805acb5bdf17 (patch) | |
tree | 9f0cf2a12cef339c6f54a06ed7c9445d60bb5875 /lib/AST/TemplateBase.cpp | |
parent | 6a24bfda084f06a0b252b7befe8cbb17fce7f94e (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.cpp | 12 |
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()); |