> Hello. > > Following patch is fix for PR ipa/64813. The patch was tested on a darwin > target > by Dominique. > > Ready for trunk? OK, Honza > Thanks, > Martin
> >From ce1c7031e2616d840ce55559c1bc45587d64134f Mon Sep 17 00:00:00 2001 > From: mliska <mli...@suse.cz> > Date: Fri, 30 Jan 2015 15:12:59 +0100 > Subject: [PATCH] Handle noreturn function thunk creation. > > gcc/ChangeLog: > > 2015-02-09 Martin Liska <mli...@suse.cz> > > PR ipa/64813 > * cgraphunit.c (cgraph_node::expand_thunk): Do not create > a return value for call to a function that is noreturn. > --- > gcc/cgraphunit.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c > index 8280fc4..77c8dd8 100644 > --- a/gcc/cgraphunit.c > +++ b/gcc/cgraphunit.c > @@ -1572,6 +1572,7 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool > force_gimple_thunk) > > gcall *call; > greturn *ret; > + bool alias_is_noreturn = TREE_THIS_VOLATILE (alias); > > if (in_lto_p) > get_untransformed_body (); > @@ -1608,7 +1609,7 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool > force_gimple_thunk) > bsi = gsi_start_bb (bb); > > /* Build call to the function being thunked. */ > - if (!VOID_TYPE_P (restype)) > + if (!VOID_TYPE_P (restype) && !alias_is_noreturn) > { > if (DECL_BY_REFERENCE (resdecl)) > { > @@ -1667,14 +1668,14 @@ cgraph_node::expand_thunk (bool output_asm_thunks, > bool force_gimple_thunk) > callees->call_stmt = call; > gimple_call_set_from_thunk (call, true); > gimple_call_set_with_bounds (call, instrumentation_clone); > - if (restmp) > + if (restmp && !alias_is_noreturn) > { > gimple_call_set_lhs (call, restmp); > gcc_assert (useless_type_conversion_p (TREE_TYPE (restmp), > TREE_TYPE (TREE_TYPE > (alias)))); > } > gsi_insert_after (&bsi, call, GSI_NEW_STMT); > - if (!(gimple_call_flags (call) & ECF_NORETURN)) > + if (!alias_is_noreturn) > { > if (restmp && !this_adjusting > && (fixed_offset || virtual_offset)) > -- > 2.1.2 >