diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-01-05 22:34:08 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-01-05 22:34:08 +0000 |
commit | 6aeaa60217e1ed11a621409acf1b53df0d14b591 (patch) | |
tree | 1289786b43b7d0df3be63a11d7abd8c64e2b1383 /lib/Sema/SemaDeclCXX.cpp | |
parent | 1c7946a9fbba8671cc57f7dfd00721f8c035f913 (diff) |
Tweak the fix to PR8977: an empty expression-list represents value initialization, not default initialization. Fixes PR11712.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147620 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 46a47a2215..56b526b1d7 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -8898,8 +8898,6 @@ void Sema::AddCXXDirectInitializerToDecl(Decl *RealDecl, MultiExprArg Exprs, SourceLocation RParenLoc, bool TypeMayContainAuto) { - assert(Exprs.size() != 0 && Exprs.get() && "missing expressions"); - // If there is no declaration, there was an error parsing it. Just ignore // the initializer. if (RealDecl == 0) @@ -8912,9 +8910,18 @@ void Sema::AddCXXDirectInitializerToDecl(Decl *RealDecl, return; } - // C++0x [decl.spec.auto]p6. Deduce the type which 'auto' stands in for. + // C++0x [dcl.spec.auto]p6. Deduce the type which 'auto' stands in for. if (TypeMayContainAuto && VDecl->getType()->getContainedAutoType()) { - // FIXME: n3225 doesn't actually seem to indicate this is ill-formed + if (Exprs.size() == 0) { + // It isn't possible to write this directly, but it is possible to + // end up in this situation with "auto x(some_pack...);" + Diag(LParenLoc, diag::err_auto_var_init_no_expression) + << VDecl->getDeclName() << VDecl->getType() + << VDecl->getSourceRange(); + RealDecl->setInvalidDecl(); + return; + } + if (Exprs.size() > 1) { Diag(Exprs.get()[1]->getSourceRange().getBegin(), diag::err_auto_var_init_multiple_expressions) |