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.