Handle noreturn function thunk creation.
PR ipa/64813 * cgraphunit.c (cgraph_node::expand_thunk): Do not create a return value for call to a function that is noreturn. From-SVN: r220616
This commit is contained in:
parent
ece70d335d
commit
c43ade8004
2 changed files with 10 additions and 3 deletions
|
@ -1,3 +1,9 @@
|
|||
2015-02-11 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.
|
||||
|
||||
2015-02-11 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR lto/65015
|
||||
|
|
|
@ -1580,6 +1580,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 ();
|
||||
|
@ -1616,7 +1617,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))
|
||||
{
|
||||
|
@ -1675,14 +1676,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))
|
||||
|
|
Loading…
Add table
Reference in a new issue