aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>2006-05-11 15:07:45 +0000
committerVolker Reichelt <reichelt@gcc.gnu.org>2006-05-11 15:07:45 +0000
commit7ebcc52c5a640d18127d21d0d359bb318b452f7d (patch)
tree98ed978ffff827c601b236cd6a98e5dd586e68a5 /gcc
parent81e61fb4e6c11f360ee7cd5193fabac638ca0365 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/fold-const.c6
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/other/fold1.C8
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" }
+};