diff options
author | Marek Polacek <polacek@redhat.com> | 2018-04-12 20:02:47 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2018-04-12 20:02:47 +0000 |
commit | 4930c53ee69f18a6fd689527864d419ce0333e7a (patch) | |
tree | 2ce0c031a7622545758ae62e0e2977a0ff82f60a | |
parent | ed086e7e0a9f56c0e6f20236fb3cf2c64c4b4b71 (diff) | |
download | gcc-4930c53ee69f18a6fd689527864d419ce0333e7a.zip gcc-4930c53ee69f18a6fd689527864d419ce0333e7a.tar.gz gcc-4930c53ee69f18a6fd689527864d419ce0333e7a.tar.bz2 |
re PR c++/85258 (ICE with invalid range-based for-loop)
PR c++/85258
* constexpr.c (reduced_constant_expression_p): Return false for null
trees.
* g++.dg/parse/error61.C: New test.
From-SVN: r259355
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/constexpr.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/error61.C | 14 |
4 files changed, 30 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e9a32b0..e3bc2d9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-04-12 Marek Polacek <polacek@redhat.com> + + PR c++/85258 + * constexpr.c (reduced_constant_expression_p): Return false for null + trees. + 2018-04-11 Marek Polacek <polacek@redhat.com> PR c++/85032 diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 75f56df..82f14ba 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -1773,6 +1773,9 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, bool reduced_constant_expression_p (tree t) { + if (t == NULL_TREE) + return false; + switch (TREE_CODE (t)) { case PTRMEM_CST: @@ -1794,9 +1797,8 @@ reduced_constant_expression_p (tree t) field = NULL_TREE; FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), i, idx, val) { - if (!val) - /* We're in the middle of initializing this element. */ - return false; + /* If VAL is null, we're in the middle of initializing this + element. */ if (!reduced_constant_expression_p (val)) return false; if (field) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2b4f250..73a358e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-04-12 Marek Polacek <polacek@redhat.com> + + PR c++/85258 + * g++.dg/parse/error61.C: New test. + 2018-04-12 Cesar Philippidis <cesar@codesourcery.com> * testsuite/libgomp.oacc-c-c++-common/pr84955.c: Revert 259346. diff --git a/gcc/testsuite/g++.dg/parse/error61.C b/gcc/testsuite/g++.dg/parse/error61.C new file mode 100644 index 0000000..199e1aa --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/error61.C @@ -0,0 +1,14 @@ +// PR c++/85258 +// { dg-do compile { target c++11 } } + +template<int> void foo() +{ + int x[8]; + for (int& i, j : x) // { dg-error "multiple" } + i = 0; // { dg-error "local variable" } +} + +void bar() +{ + foo<0>(); +} |