[Ada] Implement AI12-0073 (Ravenscar disallows Synchronous_Barriers)

Message ID 20200608080044.GA90488@adacore.com
State New
Headers show
Series
  • [Ada] Implement AI12-0073 (Ravenscar disallows Synchronous_Barriers)
Related show

Commit Message

Pierre-Marie de Rodat June 8, 2020, 8 a.m.
In Ada2020 the Ravenscar profile (but not the Jorvik profile) includes
a "No_Dependence => Ada.Synchronous_Barriers" restriction. This is a
binding interpretation so it applies also to earlier Ada versions, but
the unit Ada.Synchronous_Barriers did not exist before Ada 2012.

Tested on x86_64-pc-linux-gnu, committed on trunk

2020-06-08  Steve Baird  <baird@adacore.com>

gcc/ada/

	* sem_prag.adb (Analyze_Pragma.Set_Ravenscar_Profile): Add
	appropriate call to Set_Restriction_No_Dependence if Ada_Version
	>= Ada2012 and Profile is either Ravenscar or a GNAT-defined

	Ravenscar variant (i.e., not Jorvik).

Patch

--- gcc/ada/sem_prag.adb
+++ gcc/ada/sem_prag.adb
@@ -11283,10 +11283,6 @@  package body Sem_Prag is
          --    No_Dependence => Ada.Execution_Time.Group_Budget
          --    No_Dependence => Ada.Execution_Time.Timers
 
-         --  ??? Eventually when AI12-0073 is implemented, we'll register a
-         --  No_Dependence restriction on Ada.Synchronous_Barriers
-         --  for Ravenscar but not for Jorvik.
-
          if Ada_Version >= Ada_2005 then
             Pref_Id := Make_Identifier (Loc, Name_Find ("ada"));
             Sel_Id  := Make_Identifier (Loc, Name_Find ("execution_time"));
@@ -11325,7 +11321,7 @@  package body Sem_Prag is
          end if;
 
          --  Set the following restriction which was added to Ada 2012 (see
-         --  AI-0171):
+         --  AI05-0171):
          --    No_Dependence => System.Multiprocessors.Dispatching_Domains
 
          if Ada_Version >= Ada_2012 then
@@ -11350,7 +11346,32 @@  package body Sem_Prag is
               (Unit    => Nod,
                Warn    => Treat_Restrictions_As_Warnings,
                Profile => Ravenscar);
+
+            --  Set the following restriction which was added to Ada 2020,
+            --  but as a binding interpretation:
+            --     No_Dependence => Ada.Synchronous_Barriers
+            --  for Ravenscar (and therefore for Ravenscar variants) but not
+            --  for Jorvik. The unit Ada.Synchronous_Barriers was introduced
+            --  in Ada2012 (AI05-0174).
+
+            if Profile /= Jorvik then
+               Pref_Id := Make_Identifier (Loc, Name_Find ("ada"));
+               Sel_Id  := Make_Identifier (Loc, Name_Find
+                                                  ("synchronous_barriers"));
+
+               Nod :=
+                 Make_Selected_Component
+                   (Sloc          => Loc,
+                    Prefix        => Pref_Id,
+                    Selector_Name => Sel_Id);
+
+               Set_Restriction_No_Dependence
+                 (Unit    => Nod,
+                  Warn    => Treat_Restrictions_As_Warnings,
+                  Profile => Ravenscar);
+            end if;
          end if;
+
       end Set_Ravenscar_Profile;
 
    --  Start of processing for Analyze_Pragma