From 64d34897909d2aafbe461490bd82951727fda20a Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 27 Jan 2014 23:30:16 -0500 Subject: [PATCH] re PR c++/59097 (ICE with invalid statement expression as array size) PR c++/59097 * decl.c (compute_array_index_type): Don't call maybe_constant_value for a non-integral expression. From-SVN: r207161 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 4 +++- gcc/testsuite/g++.dg/ext/stmtexpr15.C | 7 +++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/ext/stmtexpr15.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 635fb053e2c..3c58b6bb74a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-01-27 Jason Merrill + + PR c++/59097 + * decl.c (compute_array_index_type): Don't call + maybe_constant_value for a non-integral expression. + 2014-01-24 Balaji V. Iyer * call.c (magic_varargs_p): Replaced flag_enable_cilkplus with diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 38f2de0d069..7ebb05d451c 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -8262,7 +8262,9 @@ compute_array_index_type (tree name, tree size, tsubst_flags_t complain) abi_1_itype = error_mark_node; } - size = maybe_constant_value (size); + if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type)) + size = maybe_constant_value (size); + if (!TREE_CONSTANT (size)) size = osize; } diff --git a/gcc/testsuite/g++.dg/ext/stmtexpr15.C b/gcc/testsuite/g++.dg/ext/stmtexpr15.C new file mode 100644 index 00000000000..83a831cdd4c --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/stmtexpr15.C @@ -0,0 +1,7 @@ +// PR c++/59097 +// { dg-options "" } + +void foo() +{ + int x[({ return; })]; // { dg-error "non-integral" } +} -- 2.30.2