diff options
author | Mark Mitchell <mark@codesourcery.com> | 2003-04-16 20:39:12 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2003-04-16 20:39:12 +0000 |
commit | f2d80e7e8132037e56bdd430ffaf50a9dfa71593 (patch) | |
tree | 545acfb6d943c6885a63e73a9b1b8a6b921f7172 /gcc | |
parent | 1cdbd6309a9c08a9bbb6cb79ffea4ac10228fe74 (diff) | |
download | gcc-f2d80e7e8132037e56bdd430ffaf50a9dfa71593.zip gcc-f2d80e7e8132037e56bdd430ffaf50a9dfa71593.tar.gz gcc-f2d80e7e8132037e56bdd430ffaf50a9dfa71593.tar.bz2 |
re PR middle-end/8866 (Bug in switch statement code generation -- missing label)
PR middle-end/8866
* cfgtrl.c (try_redirect_by_replacing_jump): Do not delete
jumptables.
PR middle-end/8866
* libjava.lang/PR8866.java: New test.
From-SVN: r65698
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cfgrtl.c | 11 |
2 files changed, 9 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a7d59b8..f95d702 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-04-16 Mark Mitchell <mark@codesourcery.com> + + PR middle-end/8866 + * cfgtrl.c (try_redirect_by_replacing_jump): Do not delete + jumptables. + 2003-04-16 Richard Henderson <rth@redhat.com> * config/ia64/ia64.c (sdata_symbolic_operand): Use diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 0ba32c5..394632c 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -731,7 +731,7 @@ try_redirect_by_replacing_jump (e, target) else { rtx target_label = block_label (target); - rtx barrier, label, table; + rtx barrier; emit_jump_insn_after (gen_jump (target_label), insn); JUMP_LABEL (src->end) = target_label; @@ -740,15 +740,10 @@ try_redirect_by_replacing_jump (e, target) fprintf (rtl_dump_file, "Replacing insn %i by jump %i\n", INSN_UID (insn), INSN_UID (src->end)); - + /* Remove the original jump. If INSN is a tablejump, the jump + table will be removed later, if it is no longer needed. */ delete_insn_chain (kill_from, insn); - /* Recognize a tablejump that we are converting to a - simple jump and remove its associated CODE_LABEL - and ADDR_VEC or ADDR_DIFF_VEC. */ - if (tablejump_p (insn, &label, &table)) - delete_insn_chain (label, table); - barrier = next_nonnote_insn (src->end); if (!barrier || GET_CODE (barrier) != BARRIER) emit_barrier_after (src->end); |