summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2011-10-23 18:59:44 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2011-10-23 18:59:44 +0000
commit9f58d7b7890024e39b1230ee7d3eb0e7a27d32a6 (patch)
tree8aa8139d3e3338748f350d4a60ba3cdd3b309375 /clang/lib/Sema/SemaDeclCXX.cpp
parent05156e32314cac1cb5c727007b53195cb9144d36 (diff)
downloadbcm5719-llvm-9f58d7b7890024e39b1230ee7d3eb0e7a27d32a6.tar.gz
bcm5719-llvm-9f58d7b7890024e39b1230ee7d3eb0e7a27d32a6.zip
Diagnose unexpanded parameter packs in member initialisers (including
in-class member initialisers). llvm-svn: 142758
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 4c7ebbd56ae..0be473ea9c9 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -1635,6 +1635,12 @@ Sema::ActOnCXXInClassMemberInitializer(Decl *D, SourceLocation EqualLoc,
return;
}
+ if (DiagnoseUnexpandedParameterPack(InitExpr, UPPC_Initializer)) {
+ FD->setInvalidDecl();
+ FD->removeInClassInitializer();
+ return;
+ }
+
ExprResult Init = InitExpr;
if (!FD->getType()->isDependentType() && !InitExpr->isTypeDependent()) {
// FIXME: if there is no EqualLoc, this is list-initialization.
@@ -2031,6 +2037,9 @@ Sema::BuildMemberInitializer(ValueDecl *Member,
assert((DirectMember || IndirectMember) &&
"Member must be a FieldDecl or IndirectFieldDecl");
+ if (Args.DiagnoseUnexpandedParameterPack(*this))
+ return true;
+
if (Member->isInvalidDecl())
return true;
OpenPOWER on IntegriCloud