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.