This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Question on fixup_abnormal_edges
- From: Michael Matz <matz at suse dot de>
- To: Olivier Hainque <hainque at ACT-Europe dot FR>
- Cc: Jan Hubicka <jh at suse dot cz>, <gcc at gcc dot gnu dot org>
- Date: Tue, 1 Oct 2002 12:00:35 +0200 (CEST)
- Subject: Re: Question on fixup_abnormal_edges
Hi,
On Tue, 1 Oct 2002, Jan Hubicka wrote:
> > for (e = bb->succ; e; e = e->succ_next)
> > if (e->flags & EDGE_FALLTHRU)
> > break;
> > [...]
> > insert_insn_on_edge (seq, e);
> >
> >
> > Is it expectable to have a null "e" after the loop, or is this a
> > "should never happen" ?
>
> It should never happen. Where are you getting it?
It can happen. The relevant sequence in 3.2 and HEAD branch reads as
below, including the comment explaining it.
for (e = bb->succ; e; e = e->succ_next)
if (e->flags & EDGE_FALLTHRU)
break;
...
/* Sometimes there's still the return value USE.
If it's placed after a trapping call (i.e. that
call is the last insn anyway), we have no fallthru
edge. Simply delete this use and don't try to insert
on the non-existant edge. */
if (GET_CODE (PATTERN (insn)) != USE)
{
...
insert_insn_on_edge (seq, e);
...
Ciao,
Michael.