[Ada] Crash on task declaration with Restriction_Warning (No_Tasking)
authorEd Schonberg <schonberg@adacore.com>
Tue, 27 Oct 2020 13:24:51 +0000 (09:24 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Thu, 26 Nov 2020 08:39:53 +0000 (03:39 -0500)
gcc/ada/

* sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings):
when the restriction is a configuration pragma and specifies
No_Tasking, a global flag is set to reject task declarations,
and to prevent the construction of Master entities. The flag
must not be set if the pragma is a Restriction_Warning, in which
case task declarationns are allowed.

gcc/ada/sem_prag.adb

index 9c57ee31c89c8bc61cf10306e3955c9b149951cf..02cf0bc564831adc249bfc09e067a2ecdbf14434 100644 (file)
@@ -10438,10 +10438,13 @@ package body Sem_Prag is
                      Add_To_Config_Boolean_Restrictions (No_Elaboration_Code);
                   end if;
 
-               --  Special processing for No_Tasking restriction placed in
-               --  a configuration pragmas file.
+               --  Special processing for No_Tasking restriction (not just a
+               --  warning) when it appears as a configuration pragmas.
 
-               elsif R_Id = No_Tasking and then No (Cunit (Main_Unit)) then
+               elsif R_Id = No_Tasking
+                 and then No (Cunit (Main_Unit))
+                 and then not Warn
+               then
                   Set_Global_No_Tasking;
                end if;