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.