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.

Reply via email to