aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2003-03-23 21:25:13 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2003-03-23 21:25:13 +0000
commit766dec0ecdb5e4d705c8be49a7b0e826c4356cbf (patch)
tree9759e639cd287e6895534bee594b69640a3b17b7 /gcc
parentef3e98869075132505d8e1e1c9deaa5fee42e0eb (diff)
downloadgcc-766dec0ecdb5e4d705c8be49a7b0e826c4356cbf.zip
gcc-766dec0ecdb5e4d705c8be49a7b0e826c4356cbf.tar.gz
gcc-766dec0ecdb5e4d705c8be49a7b0e826c4356cbf.tar.bz2
re PR c/10178 (ICE in tree_low_cst)
PR c/10178 * stmt.c (expand_end_case_type): Check for overflow in range when determining whether to use a bit-test implementation. * gcc.c-torture/compile/20030323-1.c: New test case. From-SVN: r64757
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/stmt.c1
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20030323-1.c17
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f98fa02..9dc6621 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-03-23 Roger Sayle <roger@eyesopen.com>
+
+ PR c/10178
+ * stmt.c (expand_end_case_type): Check for overflow in range when
+ determining whether to use a bit-test implementation.
+
2003-03-23 Richard Henderson <rth@redhat.com>
* cfgcleanup.c (try_optimize_cfg): Allow merging of tablejumps
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 823afbf..d8f36c5 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -5505,6 +5505,7 @@ expand_end_case_type (orig_index, orig_type)
else if (CASE_USE_BIT_TESTS
&& ! TREE_CONSTANT (index_expr)
&& compare_tree_int (range, GET_MODE_BITSIZE (word_mode)) < 0
+ && compare_tree_int (range, 0) > 0
&& lshift_cheap_p ()
&& ((uniq == 1 && count >= 3)
|| (uniq == 2 && count >= 5)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 34b0946..05b170c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2003-03-23 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.c-torture/compile/20030323-1.c: New test case.
+
2003-03-22 Ulrich Weigand <uweigand@de.ibm.com>
* gcc.dg/20030321-1.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/20030323-1.c b/gcc/testsuite/gcc.c-torture/compile/20030323-1.c
new file mode 100644
index 0000000..8ea602d
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20030323-1.c
@@ -0,0 +1,17 @@
+/* PR c/10178. The following code would ICE because we didn't check for
+ overflow when computing the range of the switch-statment, and therefore
+ decided it could be implemented using bit-tests. */
+
+int
+banana(long citron)
+{
+ switch (citron) {
+ case 0x80000000:
+ case 0x40000:
+ case 0x40001:
+ return 1;
+ break;
+ }
+ return 0;
+}
+