+2015-03-23 Yvan Roux <yvan.roux@linaro.org>
+
+ Backport from trunk r220616.
+ 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-03-23 Yvan Roux <yvan.roux@linaro.org>
Backport from trunk r216841.
gimple call;
gimple ret;
+ bool alias_is_noreturn = TREE_THIS_VOLATILE (alias);
if (in_lto_p)
cgraph_get_body (node);
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))
restmp = gimple_fold_indirect_ref (resdecl);
call = gimple_build_call_vec (build_fold_addr_expr_loc (0, alias), vargs);
node->callees->call_stmt = call;
gimple_call_set_from_thunk (call, true);
- 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))