From: Javier Miranda Date: Thu, 6 Aug 2020 17:56:50 +0000 (-0400) Subject: [Ada] Wrong detection of potentially blocking call in protected object X-Git-Tag: basepoints/gcc-12~4095 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f1722339efa953eed5c69ec8869fc62b41e72ee4;p=thirdparty%2Fgcc.git [Ada] Wrong detection of potentially blocking call in protected object gcc/ada/ * exp_ch9.adb (Build_Task_Activation_Call): Do not generate a call to activate tasks if we are within the scope of a protected type and pragma Detect_Blocking is active. --- diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index 26e7321ef88b..f56b74635753 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -4960,6 +4960,18 @@ package body Exp_Ch9 is if No (Chain) or else Is_Ignored_Ghost_Entity (Chain) then return; + + -- The availability of the activation chain entity does not ensure + -- that we have tasks to activate because it may have been declared + -- by the frontend to pass a required extra formal to a build-in-place + -- subprogram call. If we are within the scope of a protected type and + -- pragma Detect_Blocking is active we can assume that no tasks will be + -- activated; if tasks are created in a protected object and this pragma + -- is active then the frontend emits a warning and Program_Error is + -- raised at runtime. + + elsif Detect_Blocking and then Within_Protected_Type (Current_Scope) then + return; end if; -- The location of the activation call must be as close as possible to