aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2003-04-16 20:39:12 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2003-04-16 20:39:12 +0000
commitf2d80e7e8132037e56bdd430ffaf50a9dfa71593 (patch)
tree545acfb6d943c6885a63e73a9b1b8a6b921f7172 /gcc
parent1cdbd6309a9c08a9bbb6cb79ffea4ac10228fe74 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cfgrtl.c11
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);