http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49260

--- Comment #6 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2011-06-20 
15:55:38 UTC ---
> The output of the FDE initial location happens in dwarf2out.c
> (output_call_frame_info).  If I step throught that function, I see that
> the FDEs are only emitted if fde_needed_for_eh_p (fde).  For the two
> missing ones, I see that this function returns false due to this test:
> 
>   /* If exceptions are enabled, we have collected nothrow info.  */
>   if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
>     return false;
> 
> Here, both fde->all_throwers_are_sibcalls and fde->nothrow are 1.
> 
> I cannot say if this is wrong or the tests in fde_needed_for_eh_p
> needs to be augmented.

The former I presume: on the SPARC, in the assembly file, there is a call from
main::{lambda()#1}::_FUN() to main::{lambda()#1}::operator()() const and the
latter calls __cxa_throw.  And this isn't a sibcall (we're at -O0).

Both flags are set to 1 initially in set_nothrow_function_flags but should be
properly computed later in the function.

Reply via email to