https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59813

--- Comment #14 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The only difference the patch makes that matters for those tests is in
unwind-dw2.c, where in _Unwind_Resume_or_Rethrow function there is:
-  _20 = _Unwind_RaiseException (exc_4(D));
+  _20 = _Unwind_RaiseException (exc_4(D)); [tail call]
change.  This is in:
{
  struct _Unwind_Context this_context, cur_context;
  _Unwind_Reason_Code code;
  unsigned long frames;



  if (exc->private_1 == 0)
    return _Unwind_RaiseException (exc);
...
}
where this_context and cur_context variables are indeed addressable variables,
but are only first touched in the ... code, so before my change we'd refuse to
make _Unwind_RaiseException call into a tail call, but now it is a tail call
and I don't see anything that would make it look wrong at the GIMPLE level.
If the aarch64 backend can't handle tail calls in functions doing
__builtin_eh_return or something similar, then it needs to punt in those
special cases.

Reply via email to