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.