summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplate.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-12-16 08:48:57 +0000
committerDouglas Gregor <dgregor@apple.com>2010-12-16 08:48:57 +0000
commit6ff1fbf65f9e02b0f63069aae5af3a1efa4fb6e1 (patch)
tree5f242d2674690812480ad6cb06d41a77259e178d /clang/lib/Sema/SemaTemplate.cpp
parentf8e4b48b3d2fe0b4cea99df8b7f2f2a644a05838 (diff)
downloadbcm5719-llvm-6ff1fbf65f9e02b0f63069aae5af3a1efa4fb6e1.tar.gz
bcm5719-llvm-6ff1fbf65f9e02b0f63069aae5af3a1efa4fb6e1.zip
Check for unexpanded parameter packs in default arguments.
llvm-svn: 121962
Diffstat (limited to 'clang/lib/Sema/SemaTemplate.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplate.cpp26
1 files changed, 21 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index 4b8c455731a..a79c17cdbfa 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -536,6 +536,11 @@ Decl *Sema::ActOnTypeParameter(Scope *S, bool Typename, bool Ellipsis,
Diag(EqualLoc, diag::err_template_param_pack_default_arg);
return Param;
}
+
+ // Check for unexpanded parameter packs.
+ if (DiagnoseUnexpandedParameterPack(Loc, DefaultTInfo,
+ UPPC_DefaultArgument))
+ return Param;
// Check the template argument itself.
if (CheckTemplateArgument(Param, DefaultTInfo)) {
@@ -642,6 +647,10 @@ Decl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
// Check the well-formedness of the default template argument, if provided.
if (Default) {
+ // Check for unexpanded parameter packs.
+ if (DiagnoseUnexpandedParameterPack(Default, UPPC_DefaultArgument))
+ return Param;
+
TemplateArgument Converted;
if (CheckTemplateArgument(Param, Param->getType(), Default, Converted)) {
Param->setInvalidDecl();
@@ -683,6 +692,12 @@ Decl *Sema::ActOnTemplateTemplateParameter(Scope* S,
IdResolver.AddDecl(Param);
}
+ if (Params->size() == 0) {
+ Diag(Param->getLocation(), diag::err_template_template_parm_no_parms)
+ << SourceRange(Params->getLAngleLoc(), Params->getRAngleLoc());
+ Param->setInvalidDecl();
+ }
+
if (!Default.isInvalid()) {
// Check only that we have a template template argument. We don't want to
// try to check well-formedness now, because our template template parameter
@@ -699,14 +714,15 @@ Decl *Sema::ActOnTemplateTemplateParameter(Scope* S,
return Param;
}
+ // Check for unexpanded parameter packs.
+ if (DiagnoseUnexpandedParameterPack(DefaultArg.getLocation(),
+ DefaultArg.getArgument().getAsTemplate(),
+ UPPC_DefaultArgument))
+ return Param;
+
Param->setDefaultArgument(DefaultArg, false);
}
- if (Params->size() == 0) {
- Diag(Param->getLocation(), diag::err_template_template_parm_no_parms)
- << SourceRange(Params->getLAngleLoc(), Params->getRAngleLoc());
- Param->setInvalidDecl();
- }
return Param;
}
OpenPOWER on IntegriCloud