On Fri, Aug 21, 2015 at 01:27:43PM +0200, Richard Biener wrote:
> On Fri, Aug 21, 2015 at 12:52 PM, Marek Polacek <pola...@redhat.com> wrote:
> > This fixes the libgo breakage.  Seems I really should have removed the
> > edge after we split the block with null dereference after __builtin_trap
> > statement so that it's unreachable.
> >
> > Bootstrapped/regtested on x86_64-linux + ppc64-linux + bootstrapped on
> > aarch64-linux, ok for trunk?
> 
> Hum.  I don't see why this is needed - CFG cleanup (which of course needs
> to run!) should do this for you.  In fact stray unreachable blocks are usually
> more of a problem.

Aha.  It seems cleanup does that if I change the code to generate
__builtin_unreachable instead of __builtin_trap.  A hint maybe? ;)

What's going on here is that we find a potential NULL dereference
(PHI argument has NULL), we call isolate_path, that duplicates a bb
and then cuts off the outgoing edges of this duplicated bb.  And in
some cases it leaves COND_EXPR at the end of the bb -> ICE.
The we insert __builtin_trap on this isolated path.

        Marek

Reply via email to