------- Comment #9 from mkuvyrkov at gcc dot gnu dot org 2006-12-19 14:00
-------
(In reply to comment #8)
> Subject: Re: [4.2/4.3 regression] ICE with scheduling and __builtin_trap
>
> Hi,
> barrier in the middle of basic block is invalid and should be noticed by
> verify_flow_info and ICE. What part of my patch you quote is supposed
> to fix the problem?
>
cfgrtl.c: rtl_verify_flow_info () makes the same statement as
control_flow_insn_p ():
/* We may have a barrier inside a basic block before dead code
elimination. There is no BLOCK_FOR_INSN field in a barrier. */
This hunk from your patch would've helped, I guess:
*************** control_flow_insn_p (rtx insn)
*** 118,123 ****
--- 119,129 ----
|| can_throw_internal (insn));
case INSN:
+ /* We represent EH manipulation via unspec followed by barrier.
+ Such instruction is control flow instruction even when there is
+ no other clue specifying it. */
+ if (NEXT_INSN (insn) && GET_CODE (NEXT_INSN (insn)) == BARRIER)
+ return true;
return (flag_non_call_exceptions && can_throw_internal (insn));
case BARRIER:
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29841