aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2002-03-05 12:01:09 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2002-03-05 12:01:09 +0100
commit6d051694012ae2a672775499b5bac5c860575f62 (patch)
treecbe11b8bd74b28a3471cca15fd289add04ad61fe
parenta562995d9198cc6ec9aa64137dde261370cdbb90 (diff)
downloadgcc-6d051694012ae2a672775499b5bac5c860575f62.zip
gcc-6d051694012ae2a672775499b5bac5c860575f62.tar.gz
gcc-6d051694012ae2a672775499b5bac5c860575f62.tar.bz2
ssa-ccp.c (ssa_ccp_substitute_constants): Don't crash if def is NULL.
* ssa-ccp.c (ssa_ccp_substitute_constants): Don't crash if def is NULL. * gcc.dg/20020304-1.c: New test. From-SVN: r50311
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/ssa-ccp.c8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/20020304-1.c37
4 files changed, 52 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dc43ba3..1ea58af 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-03-05 Jakub Jelinek <jakub@redhat.com>
+
+ * ssa-ccp.c (ssa_ccp_substitute_constants): Don't crash if def
+ is NULL.
+
2002-03-05 Richard Henderson <rth@redhat.com>
* rs6000.h (TOTAL_ALTIVEC_REGS): Fix off-by-one error.
diff --git a/gcc/ssa-ccp.c b/gcc/ssa-ccp.c
index 9d2d9c9..d1b597c 100644
--- a/gcc/ssa-ccp.c
+++ b/gcc/ssa-ccp.c
@@ -856,10 +856,14 @@ ssa_ccp_substitute_constants ()
{
if (values[i].lattice_val == CONSTANT)
{
- rtx def = VARRAY_RTX (ssa_definition, i);
- rtx set = single_set (def);
+ rtx def = VARRAY_RTX (ssa_definition, i), set;
struct df_link *curruse;
+ /* Definition might have been deleted already. */
+ if (! def)
+ continue;
+
+ set = single_set (def);
if (! set)
continue;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8e4daad..378dba7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2002-03-05 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/20020304-1.c: New test.
+
2002-03-04 Zack Weinberg <zack@codesourcery.com>
* gcc.c-torture/compile/20020304-1.c: New test case
diff --git a/gcc/testsuite/gcc.dg/20020304-1.c b/gcc/testsuite/gcc.dg/20020304-1.c
new file mode 100644
index 0000000..f6d6b4e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/20020304-1.c
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fssa -fssa-ccp" } */
+
+double a[10][35], b[10][8];
+int c, c, d, e, f, g, h;
+
+int foo ()
+{
+ int i, j, k, l;
+
+ if (c > 10)
+ c = 10;
+
+ for (j = 0; j < c; j++)
+ {
+ k = 0;
+ for (l = 0; l < h; l++)
+ {
+ if (d != 5)
+ return -1;
+ k = l * g;
+ a[j][k] = (double) e; k++;
+ a[j][k] = (double) f; k++;
+ }
+ for (i = 0;i < 35; i++)
+ {
+ if (a[j][i] >= 0.9)
+ a[j][i] = 0.9;
+ if (a[j][i] <= 0.1)
+ a[j][i] = 0.1;
+ }
+ k = 0;
+ b[j][k] = (double) e; k++;
+ b[j][k] = (double) f; k++;
+ }
+ return 0;
+}