This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Abort in redirect_edge_and_branch on vax at line 866
- From: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- To: gcc-bugs at gcc dot gnu dot org, jh at suse dot cz, rth at redhat dot com
- Date: Tue, 8 Jan 2002 15:51:49 -0500 (EST)
- Subject: Abort in redirect_edge_and_branch on vax at line 866
I get an abort in redirect_edge_and_branch on vax-dec-ultrix4.3 compiling
execute/950704-1.c at -O3. The code is:
/* If the insn doesn't go where we think, we're confused. */
if (JUMP_LABEL (insn) != old_label)
abort ();
The insn causing the problem looks like this in 950704-1.c.09.addressof:
(jump_insn 496 495 1004 (set (pc)
(if_then_else (lt (cc0)
(const_int 0 [0x0]))
(label_ref 518)
(pc))) 116 {blt} (nil)
(nil))
After 950704-1.c.10.gcse, we have
(note 1001 494 496 [bb 21] NOTE_INSN_BASIC_BLOCK)
(jump_insn 496 1001 1004 (set (pc)
(pc)) 116 {blt} (nil)
(nil))
(note 1004 496 1273 [bb 22] NOTE_INSN_BASIC_BLOCK)
As can be seen, the JUMP_LABEL is gone from the insn. redirect_edge_and_branch
still seems to know about label_ref 518:
(gdb) p debug_rtx (old_label)
(code_label 518 1316 1011 51 "" "" [3 uses])
Is the problem that the edge wasn't updated when the label was removed
from insn 496? Or, can we just ignore old_label when there is no
JUMP_LABEL in the insn. Or, should the gcse pass have completely
removed bb 21?
Dave
--
J. David Anglin dave.anglin@nrc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6605)