This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: document edge flags
- To: Zack Weinberg <zack at codesourcery dot com>
- Subject: Re: document edge flags
- From: Jan Hubicka <jh at suse dot cz>
- Date: Mon, 5 Nov 2001 13:51:50 +0100
- Cc: Richard Henderson <rth at redhat dot com>, Jan Hubicka <jh at suse dot cz>, gcc-patches at gcc dot gnu dot org
- References: <20011030144119.B30945@atrey.karlin.mff.cuni.cz> <20011030074203.J28319@codesourcery.com> <20011104231349.B17976@redhat.com> <20011105000317.K267@codesourcery.com>
BTW
I've put together also small chapter about cfg to our manual. My friends
are just fixing the english before I will contribute it. Just to let you
know :)
Hope it will be less contraversal than this stuff.
>
> I tend to think of them as distinct. Tail call is when we optimize a
> recursive call to the current function into a branch; sibling call is
> when we turn a call to a different function with the same signature
> into a branch.
In this case we are speaking only about sibling calls..
>
> > > /* EDGE_EH marks an edge from a (possibly) trapping instruction to the
> > > exception handler. This includes calls to functions that may throw
> > > exceptions. */
> >
> > I don't believe we should have EDGE_EH from a non-trapping insn.
>
> Does this mean that if you write
>
> try {
> a();
> } catch (...) { /* stuff */ }
>
> and a may throw, there is no EDGE_EH edge from a to the catch block?
Actually the (possibly) in my sentense meant that the instruction does not
need unconditionally trap, just gcc may not be sure that it doesn't trap.
Call to a() is possibly trapping, as gcc does not know what a is doing,
as load from memory and similar cases.
Thanks for caring this issue...
Honza
>
> zw