diff options
author | Volker Reichelt <reichelt@igpm.rwth-aachen.de> | 2006-05-11 15:07:45 +0000 |
---|---|---|
committer | Volker Reichelt <reichelt@gcc.gnu.org> | 2006-05-11 15:07:45 +0000 |
commit | 7ebcc52c5a640d18127d21d0d359bb318b452f7d (patch) | |
tree | 98ed978ffff827c601b236cd6a98e5dd586e68a5 | |
parent | 81e61fb4e6c11f360ee7cd5193fabac638ca0365 (diff) | |
download | gcc-7ebcc52c5a640d18127d21d0d359bb318b452f7d.zip gcc-7ebcc52c5a640d18127d21d0d359bb318b452f7d.tar.gz gcc-7ebcc52c5a640d18127d21d0d359bb318b452f7d.tar.bz2 |
re PR c++/27384 (ICE with invalid array size)
PR middle-end/27384
* fold-const.c (size_binop): Move sanity check for arguments to
the beginning of the function.
* g++.dg/other/fold1.C: New test.
From-SVN: r113701
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/fold-const.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/fold1.C | 8 |
4 files changed, 18 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7d27747..1ab7732 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2006-05-11 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + PR middle-end/27384 + * fold-const.c (size_binop): Move sanity check for arguments to + the beginning of the function. + PR middle-end/27488 * fold-const.c (tree_expr_nonnegative_p): Return early on invalid expression. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 80d08c7..ef06eea 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -1732,6 +1732,9 @@ size_binop (enum tree_code code, tree arg0, tree arg1) { tree type = TREE_TYPE (arg0); + if (arg0 == error_mark_node || arg1 == error_mark_node) + return error_mark_node; + gcc_assert (TREE_CODE (type) == INTEGER_TYPE && TYPE_IS_SIZETYPE (type) && type == TREE_TYPE (arg1)); @@ -1751,9 +1754,6 @@ size_binop (enum tree_code code, tree arg0, tree arg1) return int_const_binop (code, arg0, arg1, 0); } - if (arg0 == error_mark_node || arg1 == error_mark_node) - return error_mark_node; - return fold_build2 (code, type, arg0, arg1); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 27501e4..0a3faff 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2006-05-11 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + PR middle-end/27384 + * g++.dg/other/fold1.C: New test. + PR middle-end/27488 * gcc.dg/fold-nonneg-1.c: New test. diff --git a/gcc/testsuite/g++.dg/other/fold1.C b/gcc/testsuite/g++.dg/other/fold1.C new file mode 100644 index 0000000..f1f0dd9 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/fold1.C @@ -0,0 +1,8 @@ +// PR middle-end/27384 +// { dg-do compile } + +struct A +{ + static const int i = i; // { dg-error "not declared" } + int x[i]; // { dg-error "variable-size array" } +}; |