diff options
author | Jeffrey A Law <law@cygnus.com> | 1999-08-02 05:53:02 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-08-01 23:53:02 -0600 |
commit | eec9ef57bf59ea4e488f663e8007d11e6c599f21 (patch) | |
tree | d3635cb1f31aef2dde23078f449a1cfd2c6ddf75 /gcc/cse.c | |
parent | 63429dd7f8b1ccc45f1ea712f7c0a06bdfb7e367 (diff) | |
download | gcc-eec9ef57bf59ea4e488f663e8007d11e6c599f21.zip gcc-eec9ef57bf59ea4e488f663e8007d11e6c599f21.tar.gz gcc-eec9ef57bf59ea4e488f663e8007d11e6c599f21.tar.bz2 |
cse.c (cse_insn): Fix loop which deletes insns after a jump that has become an unconditional jump.
* cse.c (cse_insn): Fix loop which deletes insns after a jump
that has become an unconditional jump.
From-SVN: r28388
Diffstat (limited to 'gcc/cse.c')
-rw-r--r-- | gcc/cse.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -7424,9 +7424,12 @@ cse_insn (insn, libcall_insn) && GET_CODE (NEXT_INSN (p)) != BARRIER && GET_CODE (NEXT_INSN (p)) != CODE_LABEL) { + /* Note, we must update P with the return value from + delete_insn, otherwise we could get an infinite loop + if NEXT_INSN (p) had INSN_DELETED_P set. */ if (GET_CODE (NEXT_INSN (p)) != NOTE || NOTE_LINE_NUMBER (NEXT_INSN (p)) == NOTE_INSN_DELETED) - delete_insn (NEXT_INSN (p)); + p = delete_insn (NEXT_INSN (p)); else p = NEXT_INSN (p); } |