This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/49260] cpp0x/lambda/lambda-eh2.C fails execution
- From: "ebotcazou at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 20 Jun 2011 15:56:49 +0000
- Subject: [Bug c++/49260] cpp0x/lambda/lambda-eh2.C fails execution
- Auto-submitted: auto-generated
- References: <bug-49260-4@http.gcc.gnu.org/bugzilla/>
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.