https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116832
--- Comment #13 from Liam Powell <liam at liampwll dot com> --- I did end up looking at this a bit more. What caused this to break in the first place was the switch to zero cost exceptions. It's possible to fix the original behaviour but it's not trivial. Just restoring Undefer_Abort to the exception handler and setting the correct deferral level is not enough as the delicate ping-pong between Exit_One_ATC_Level and Undefer_Abort still breaks in my examples after the first or second cycle. I really can't come up with any reason why they did it that way compared to my way after more digging through the code. Also just a plain Undefer_Abort in the exception handler won't work if you do try to restore the old behaviour. The reason it used to work is because SJLJ and ZCX used to have different different semantics around exception in exception handlers. SJLJ would defer aborts in exception handlers while ZCX would leave them alone. This was changed in 2020 in commit 05e59503c6e57851104649d8781727c4571a8b2c so now neither option has aborts deferred.
