This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix PR ipa/64813


> 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 <mliska@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  <mliska@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
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]