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.
