diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-11-03 00:06:36 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2007-11-03 00:06:36 +0100 |
commit | ec8628e835f6852551875ee1e916fae3d3980778 (patch) | |
tree | e962cd39928e115988fa732d89233e97cd79ce3f /gcc | |
parent | eba5fc70add5affbea167c0084fdfc39acba5bac (diff) | |
download | gcc-ec8628e835f6852551875ee1e916fae3d3980778.zip gcc-ec8628e835f6852551875ee1e916fae3d3980778.tar.gz gcc-ec8628e835f6852551875ee1e916fae3d3980778.tar.bz2 |
re PR middle-end/33670 (cc1 segfault with -O2 -fsched-stalled-insns=0 for twolf)
PR middle-end/33670
* haifa-sched.c (ok_for_early_queue_removal): Don't walk out of the
current sched region.
* gcc.dg/pr33670.c: New test.
From-SVN: r129863
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/haifa-sched.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr33670.c | 19 |
4 files changed, 36 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6a6f682..4f1b10a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-11-03 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/33670 + * haifa-sched.c (ok_for_early_queue_removal): Don't walk out of the + current sched region. + 2007-11-02 Jakub Jelinek <jakub@redhat.com> * config/ia64/ia64.c (struct reg_write_state): Change into diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index d366008..38d0136 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -1590,6 +1590,12 @@ ok_for_early_queue_removal (rtx insn) { int cost; + if (prev_insn == current_sched_info->prev_head) + { + prev_insn = NULL; + break; + } + if (!NOTE_P (prev_insn)) { dep_t dep; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ccd4ccb..1cfe8ad 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-11-03 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/33670 + * gcc.dg/pr33670.c: New test. + 2007-11-02 Jakub Jelinek <jakub@redhat.com> PR c++/33516 diff --git a/gcc/testsuite/gcc.dg/pr33670.c b/gcc/testsuite/gcc.dg/pr33670.c new file mode 100644 index 0000000..5232af9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr33670.c @@ -0,0 +1,19 @@ +/* PR middle-end/33670 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fsched-stalled-insns=0" } */ + +struct B +{ + int p; + int n; +}; +extern struct B ***b; +extern int a; + +int +foo (int d, int e) +{ + int c; + for (c = d; c <= e; c++) + b[a][c]->n = b[a][c]->p; +} |