1 The problem here is that we have an indirect jump to a label.
2 JUMP_LABEL (insn) will be NULL but we will have a reg note REG_LABEL
3 for the label. This patch fixes the problem by using that reg note.
5 PR 24069 is reproducible with a profiledbootstrap on powerpc-linux-gnu
6 and PR 20606 is reproducible with a java compiling from byte-code
7 with -findirect-dispatch and -fPIC both of which are hard to a testcase
10 --- gcc/gcc/cfgbuild.c 25 Jun 2005 01:59:28 -0000 1.68
11 +++ gcc/gcc/cfgbuild.c 2 Oct 2005 18:22:25 -0000
12 @@ -347,8 +347,19 @@ make_edges (basic_block min, basic_block
13 /* Otherwise, we have a plain conditional or unconditional jump. */
16 - gcc_assert (JUMP_LABEL (insn));
17 - make_label_edge (edge_cache, bb, JUMP_LABEL (insn), 0);
18 + rtx label = JUMP_LABEL (insn);
19 + /* For indirect jumps to a label, JUMP_LABEL will be NULL, grab
20 + the label from the REG_LABEL note which should have been setup
21 + correctly already for the indirect jump. */
24 + label = find_reg_note (insn, REG_LABEL, NULL_RTX);
26 + label = XEXP (label, 0);
30 + make_label_edge (edge_cache, bb, label, 0);