https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86284
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2018-06-25
Version|unknown |9.0
Ever confirmed|0 |1
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
We already insert GIMPLE_RETURNs (just with no value...) during the GIMPLE
lowering phase. Not sure how difficult/good it were to change those to
calls to __builtin_trap() (or make them at least IL "consistent" and return
an uninitialized thing).
That is, starting with .008.lower we have
test ()
{
volatile int i;
i = 0;
return;
}
which looks suspicious. That's where we could improve.
/* If the function falls off the end, we need a null return statement.
If we've already got one in the return_statements vector, we don't
need to do anything special. Otherwise build one by hand. */
bool may_fallthru = gimple_seq_may_fallthru (lowered_body);
if (may_fallthru
&& (data.return_statements.is_empty ()
|| (gimple_return_retval (data.return_statements.last().stmt)
!= NULL)))
{
x = gimple_build_return (NULL);
gimple_set_location (x, cfun->function_end_locus);
gimple_set_block (x, DECL_INITIAL (current_function_decl));
gsi_insert_after (&i, x, GSI_CONTINUE_LINKING);
may_fallthru = false;
}
Nowadays we can have SSA names in this IL state so
return dummy_2(D);
would do.