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

--- Comment #8 from Liam Powell <liam at liampwll dot com> ---
Looking at this more, it appears that nested ATCs likely worked in the very
first commit which added Ada support. The Abort_Signal exception handler used
to call Undefer_Abort which would eventually lead to Exit_One_ATC_Level where
you'll still find this comment today:

>  --  Force the next Undefer_Abort to re-raise Abort_Signal

It appears this was broken a long time ago, but I haven't tracked down exactly
when, it was before GCC 8.2. At a much later point the call to Undefer_Abort
was removed as it did nothing at that time. Presumably the breakage occurred
after e9906cbf174623cc53b32ad2a0f6d603d6f975b5 as this would have hidden
whatever causes Deferral_Level to be set to zero, which is what causes the
procedure to do nothing.

So really my patch shouldn't be used and the original behaviour should be
restored, however I can not figure out what's different from the first Ada
commit that broke it. Specifically I can not find where the Deferral_Level is
set to non-zero, but I know it has to be there as there's an assertion to that
effect in Undefer_Abort.

Reply via email to