diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-08-26 09:31:30 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2006-08-26 09:31:30 +0200 |
commit | fa1ff4eb8cb4ec1474d6ab338b6840a2140b588d (patch) | |
tree | 87d9a8578bc5a8967ed24c9ba921f21c3bccb117 /gcc | |
parent | 7acf7efa8947cf2990cbdc670ea3adeace4a4394 (diff) | |
download | gcc-fa1ff4eb8cb4ec1474d6ab338b6840a2140b588d.zip gcc-fa1ff4eb8cb4ec1474d6ab338b6840a2140b588d.tar.gz gcc-fa1ff4eb8cb4ec1474d6ab338b6840a2140b588d.tar.bz2 |
re PR middle-end/28683 (ICE (segfault in add_reg_br_prob_note) when comparing pointers with -O (and higher))
PR middle-end/28683
* cfgexpand.c (add_reg_br_prob_note): Check if last has exactly
3 following insns.
* gcc.c-torture/compile/20060823-1.c: New test.
From-SVN: r116467
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cfgexpand.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20060823-1.c | 18 |
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d9f6e4d..6360ec6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-08-26 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/28683 + * cfgexpand.c (add_reg_br_prob_note): Check if last has exactly + 3 following insns. + 2006-08-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de> * flow.c (verify_wide_reg): Use internal_error for consistency failure. diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 630a82a..9839d09 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -58,7 +58,9 @@ add_reg_br_prob_note (rtx last, int probability) if (!any_condjump_p (last) || !JUMP_P (NEXT_INSN (last)) || !simplejump_p (NEXT_INSN (last)) + || !NEXT_INSN (NEXT_INSN (last)) || !BARRIER_P (NEXT_INSN (NEXT_INSN (last))) + || !NEXT_INSN (NEXT_INSN (NEXT_INSN (last))) || !LABEL_P (NEXT_INSN (NEXT_INSN (NEXT_INSN (last)))) || NEXT_INSN (NEXT_INSN (NEXT_INSN (NEXT_INSN (last))))) goto failed; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 39d2fc8..b9ddcf0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-08-26 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/28683 + * gcc.c-torture/compile/20060823-1.c: New test. + 2006-08-25 Volker Reichelt <reichelt@igpm.rwth-aachen.de> PR c++/28853 diff --git a/gcc/testsuite/gcc.c-torture/compile/20060823-1.c b/gcc/testsuite/gcc.c-torture/compile/20060823-1.c new file mode 100644 index 0000000..fbce7fe --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20060823-1.c @@ -0,0 +1,18 @@ +/* PR middle-end/28683 */ + +extern void foo (int *); + +struct A +{ + int f; +}; + +struct A * +test (struct A *r) +{ + int *f = &r->f; + static int i = 0; + if (!i && !((void *) f == (void *) r)) + foo (&i); + return r; +} |