From 6d051694012ae2a672775499b5bac5c860575f62 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 5 Mar 2002 12:01:09 +0100 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/ssa-ccp.c | 8 +++++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/20020304-1.c | 37 +++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/20020304-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dc43ba38ef5..1ea58afb6b6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-03-05 Jakub Jelinek + + * ssa-ccp.c (ssa_ccp_substitute_constants): Don't crash if def + is NULL. + 2002-03-05 Richard Henderson * rs6000.h (TOTAL_ALTIVEC_REGS): Fix off-by-one error. diff --git a/gcc/ssa-ccp.c b/gcc/ssa-ccp.c index 9d2d9c9170e..d1b597c1b29 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 8e4daad4f60..378dba70cbf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-03-05 Jakub Jelinek + + * gcc.dg/20020304-1.c: New test. + 2002-03-04 Zack Weinberg * 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 00000000000..f6d6b4e49a7 --- /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; +} -- 2.30.2