This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

committed: Ada updates


Tested on x86-linux
--
2004-02-04  Robert Dewar  <dewar@gnat.com>

	* 5gtasinf.adb, 5gtasinf.ads, 5gtaprop.adb, ali.adb,
	ali.ads, gprcmd.adb: Minor reformatting

	* bindgen.adb: Output restrictions string for new style restrictions
	handling

	* impunit.adb: Add s-rident.ads (System.Rident) and
	s-restri (System.Restrictions)

	* lib-writ.adb: Fix bug in writing restrictions string (last few
	entries wrong)

	* s-restri.ads, s-restri.adb: Change name Restrictions to
	Run_Time_Restrictions to avoid conflict with package name.
	Add circuit to read and acquire run time restrictions.

2004-02-04  Jose Ruiz  <ruiz@act-europe.fr>

	* restrict.ads, restrict.adb: Use the new restriction
	No_Task_Attributes_Package instead of the old No_Task_Attributes.

	* sem_prag.adb: No_Task_Attributes is a synonym of
	No_Task_Attributes_Package.

	* snames.ads, snames.adb: New entry for proper handling of
	No_Task_Attributes.

	* s-rident.ads: Adding restriction No_Task_Attributes_Package
	(AI-00249) that supersedes the GNAT specific restriction
	No_Task_Attributes.

2004-02-04  Ed Schonberg  <schonberg@gnat.com>

	* sem_prag.adb: 
	(Analyze_Pragma, case Warnings): In an inlined body, as in an instance
	 body, an identifier may be wrapped in an unchecked conversion.

2004-02-04  Vincent Celier  <celier@gnat.com>

	* lib-writ.ads: Comment update for the W lines

	* bld.adb: (Expression): An empty string list is static

	* fname-uf.adb: Minor comment update

	* fname-uf.ads: (Get_File_Name): Document new parameter May_Fail

	* gnatbind.adb: 
	Initialize Cumulative_Restrictions with the restrictions on the target
--
Index: 5gtaprop.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/5gtaprop.adb,v
retrieving revision 1.9
diff -u -p -r1.9 5gtaprop.adb
--- 5gtaprop.adb	26 Jan 2004 21:56:05 -0000	1.9
+++ 5gtaprop.adb	4 Feb 2004 09:48:40 -0000
@@ -141,7 +141,6 @@ package body System.Task_Primitives.Oper
    procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
       pragma Unreferenced (T);
       pragma Unreferenced (On);
-
    begin
       null;
    end Stack_Guard;
@@ -251,7 +250,6 @@ package body System.Task_Primitives.Oper
 
    procedure Finalize_Lock (L : access Lock) is
       Result : Interfaces.C.int;
-
    begin
       Result := pthread_mutex_destroy (L);
       pragma Assert (Result = 0);
@@ -259,7 +257,6 @@ package body System.Task_Primitives.Oper
 
    procedure Finalize_Lock (L : access RTS_Lock) is
       Result : Interfaces.C.int;
-
    begin
       Result := pthread_mutex_destroy (L);
       pragma Assert (Result = 0);
@@ -271,10 +268,8 @@ package body System.Task_Primitives.Oper
 
    procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
       Result : Interfaces.C.int;
-
    begin
       Result := pthread_mutex_lock (L);
-
       Ceiling_Violation := Result = FUNC_ERR and then errno = EINVAL;
       pragma Assert (Result /= FUNC_ERR);
    end Write_Lock;
@@ -283,7 +278,6 @@ package body System.Task_Primitives.Oper
      (L : access RTS_Lock; Global_Lock : Boolean := False)
    is
       Result : Interfaces.C.int;
-
    begin
       if not Single_Lock or else Global_Lock then
          Result := pthread_mutex_lock (L);
@@ -293,7 +287,6 @@ package body System.Task_Primitives.Oper
 
    procedure Write_Lock (T : Task_ID) is
       Result : Interfaces.C.int;
-
    begin
       if not Single_Lock then
          Result := pthread_mutex_lock (T.Common.LL.L'Access);
@@ -316,7 +309,6 @@ package body System.Task_Primitives.Oper
 
    procedure Unlock (L : access Lock) is
       Result : Interfaces.C.int;
-
    begin
       Result := pthread_mutex_unlock (L);
       pragma Assert (Result = 0);
@@ -324,7 +316,6 @@ package body System.Task_Primitives.Oper
 
    procedure Unlock (L : access RTS_Lock; Global_Lock : Boolean := False) is
       Result : Interfaces.C.int;
-
    begin
       if not Single_Lock or else Global_Lock then
          Result := pthread_mutex_unlock (L);
@@ -334,7 +325,6 @@ package body System.Task_Primitives.Oper
 
    procedure Unlock (T : Task_ID) is
       Result : Interfaces.C.int;
-
    begin
       if not Single_Lock then
          Result := pthread_mutex_unlock (T.Common.LL.L'Access);
@@ -543,7 +533,6 @@ package body System.Task_Primitives.Oper
       Reason : System.Tasking.Task_States)
    is
       pragma Unreferenced (Reason);
-
       Result : Interfaces.C.int;
    begin
       Result := pthread_cond_signal (T.Common.LL.CV'Access);
@@ -813,10 +802,8 @@ package body System.Task_Primitives.Oper
 
    procedure Exit_Task is
       Result : Interfaces.C.int;
-
    begin
       Result := pthread_set_ada_tcb (pthread_self, System.Null_Address);
-
       pragma Assert (Result = 0);
    end Exit_Task;
 
@@ -826,7 +813,6 @@ package body System.Task_Primitives.Oper
 
    procedure Abort_Task (T : Task_ID) is
       Result : Interfaces.C.int;
-
    begin
       Result :=
         pthread_kill (T.Common.LL.Thread,
@@ -854,7 +840,6 @@ package body System.Task_Primitives.Oper
 
    function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
       pragma Unreferenced (Self_ID);
-
    begin
       return True;
    end Check_No_Locks;
@@ -961,8 +946,9 @@ package body System.Task_Primitives.Oper
       if Result = FUNC_ERR then
          raise Storage_Error;               --  Insufficient resources.
       end if;
-
    end Initialize_Athread_Library;
+
+--  Package initialization
 
 begin
    Initialize_Athread_Library;
Index: 5gtasinf.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/5gtasinf.adb,v
retrieving revision 1.6
diff -u -p -r1.6 5gtasinf.adb
--- 5gtasinf.adb	26 Jan 2004 21:56:05 -0000	1.6
+++ 5gtasinf.adb	4 Feb 2004 09:48:40 -0000
@@ -77,16 +77,14 @@ package body System.Task_Info is
       ---------
 
       function "+" (R : Resource_T) return Resource_Vector_T is
-         Result  : Resource_Vector_T  := NO_RESOURCES;
-
+         Result : Resource_Vector_T  := NO_RESOURCES;
       begin
          Result (Resource_T'Pos (R)) := True;
          return Result;
       end "+";
 
       function "+" (R1, R2 : Resource_T) return Resource_Vector_T is
-         Result  : Resource_Vector_T  := NO_RESOURCES;
-
+         Result : Resource_Vector_T  := NO_RESOURCES;
       begin
          Result (Resource_T'Pos (R1)) := True;
          Result (Resource_T'Pos (R2)) := True;
@@ -94,44 +92,37 @@ package body System.Task_Info is
       end "+";
 
       function "+"
-        (R    : Resource_T;
-         S    : Resource_Vector_T)
-         return Resource_Vector_T
+        (R : Resource_T;
+         S : Resource_Vector_T) return Resource_Vector_T
       is
-         Result  : Resource_Vector_T := S;
-
+         Result : Resource_Vector_T := S;
       begin
          Result (Resource_T'Pos (R)) := True;
          return Result;
       end "+";
 
       function "+"
-        (S    : Resource_Vector_T;
-         R    : Resource_T)
-         return Resource_Vector_T
+        (S : Resource_Vector_T;
+         R : Resource_T) return Resource_Vector_T
       is
-         Result  : Resource_Vector_T :=  S;
-
+         Result : Resource_Vector_T :=  S;
       begin
          Result (Resource_T'Pos (R)) := True;
          return Result;
       end "+";
 
       function "+" (S1, S2 : Resource_Vector_T) return Resource_Vector_T is
-         Result  : Resource_Vector_T;
-
+         Result : Resource_Vector_T;
       begin
          Result :=  S1 or S2;
          return Result;
       end "+";
 
       function "-"
-        (S    : Resource_Vector_T;
-         R    : Resource_T)
-         return Resource_Vector_T
+        (S : Resource_Vector_T;
+         R : Resource_T) return Resource_Vector_T
       is
-         Result  : Resource_Vector_T := S;
-
+         Result : Resource_Vector_T := S;
       begin
          Result (Resource_T'Pos (R)) := False;
          return Result;
@@ -177,21 +168,23 @@ package body System.Task_Info is
          end if;
 
          if Attr.NDPRI /= NDP_NONE then
---  ??? why is that comment out, should it be removed ?
+
+--  ??? why is this commented out, should it be removed ?
 --          if Geteuid /= 0 then
 --             raise Permission_Error;
 --          end if;
 
-            Status := sproc_attr_setprio
-              (Sproc_Attr'Unrestricted_Access,
-               int (Attr.NDPRI));
+            Status :=
+              sproc_attr_setprio
+                (Sproc_Attr'Unrestricted_Access, int (Attr.NDPRI));
          end if;
 
-         Status := sproc_create
-           (Sproc'Unrestricted_Access,
-            Sproc_Attr'Unrestricted_Access,
-            null,
-            System.Null_Address);
+         Status :=
+           sproc_create
+             (Sproc'Unrestricted_Access,
+              Sproc_Attr'Unrestricted_Access,
+              null,
+              System.Null_Address);
 
          if Status /= 0 then
             Status := sproc_attr_destroy (Sproc_Attr'Unrestricted_Access);
@@ -199,7 +192,6 @@ package body System.Task_Info is
          end if;
 
          Status := sproc_attr_destroy (Sproc_Attr'Unrestricted_Access);
-
       end if;
 
       if Status /= 0 then
@@ -217,12 +209,10 @@ package body System.Task_Info is
      (Sproc_Resources : Resource_Vector_T      := NO_RESOURCES;
       CPU             : CPU_Number             := ANY_CPU;
       Resident        : Page_Locking           := NOLOCK;
-      NDPRI           : Non_Degrading_Priority := NDP_NONE)
-      return            sproc_t
+      NDPRI           : Non_Degrading_Priority := NDP_NONE) return sproc_t
    is
       Attr : constant Sproc_Attributes :=
-        (Sproc_Resources, CPU, Resident, NDPRI);
-
+               (Sproc_Resources, CPU, Resident, NDPRI);
    begin
       return New_Sproc (Attr);
    end New_Sproc;
@@ -233,8 +223,7 @@ package body System.Task_Info is
 
    function Unbound_Thread_Attributes
      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
-      Thread_Timeslice : Duration          := 0.0)
-      return             Thread_Attributes
+      Thread_Timeslice : Duration          := 0.0) return Thread_Attributes
    is
    begin
       return (False, Thread_Resources, Thread_Timeslice);
@@ -265,11 +254,10 @@ package body System.Task_Info is
       CPU              : CPU_Number             := ANY_CPU;
       Resident         : Page_Locking           := NOLOCK;
       NDPRI            : Non_Degrading_Priority := NDP_NONE)
-      return             Thread_Attributes
+      return Thread_Attributes
    is
       Sproc : constant sproc_t := New_Sproc
-        (Sproc_Resources, CPU, Resident, NDPRI);
-
+                (Sproc_Resources, CPU, Resident, NDPRI);
    begin
       return (True, Thread_Resources, Thread_Timeslice, Sproc);
    end Bound_Thread_Attributes;
@@ -280,8 +268,7 @@ package body System.Task_Info is
 
    function New_Unbound_Thread_Attributes
      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
-      Thread_Timeslice : Duration          := 0.0)
-      return             Task_Info_Type
+      Thread_Timeslice : Duration          := 0.0) return Task_Info_Type
    is
    begin
       return new Thread_Attributes'
@@ -295,8 +282,7 @@ package body System.Task_Info is
    function New_Bound_Thread_Attributes
      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
       Thread_Timeslice : Duration          := 0.0;
-      Sproc            : sproc_t)
-      return             Task_Info_Type
+      Sproc            : sproc_t) return Task_Info_Type
    is
    begin
       return new Thread_Attributes'
@@ -314,11 +300,10 @@ package body System.Task_Info is
       CPU              : CPU_Number             := ANY_CPU;
       Resident         : Page_Locking           := NOLOCK;
       NDPRI            : Non_Degrading_Priority := NDP_NONE)
-      return             Task_Info_Type
+      return Task_Info_Type
    is
       Sproc : constant sproc_t := New_Sproc
-        (Sproc_Resources, CPU, Resident, NDPRI);
-
+                (Sproc_Resources, CPU, Resident, NDPRI);
    begin
       return new Thread_Attributes'
         (True, Thread_Resources, Thread_Timeslice, Sproc);
Index: 5gtasinf.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/5gtasinf.ads,v
retrieving revision 1.6
diff -u -p -r1.6 5gtasinf.ads
--- 5gtasinf.ads	21 Oct 2003 13:41:51 -0000	1.6
+++ 5gtasinf.ads	4 Feb 2004 09:48:40 -0000
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -63,14 +63,14 @@ package System.Task_Info is
 
    --  Each thread has a number of attributes that dictate it's scheduling.
    --  These attributes are:
-   --
+
    --      Bound_To_Sproc:  whether the thread is bound to a specific sproc
    --                       for its entire lifetime.
-   --
+
    --      Timeslice:       Amount of time that a thread is allowed to execute
    --                       before the system yeilds control to another thread
    --                       of equal priority.
-   --
+
    --      Resource_Vector: A bitmask used to control the binding of threads
    --                       to sprocs.
    --
@@ -113,33 +113,27 @@ package System.Task_Info is
 
    package Resource_Vector_Functions is
       function "+"
-        (R    : Resource_T)
-         return Resource_Vector_T;
+        (R : Resource_T) return Resource_Vector_T;
 
       function "+"
-        (R1   : Resource_T;
-         R2   : Resource_T)
-         return Resource_Vector_T;
+        (R1 : Resource_T;
+         R2 : Resource_T) return Resource_Vector_T;
 
       function "+"
-        (R    : Resource_T;
-         S    : Resource_Vector_T)
-         return Resource_Vector_T;
+        (R : Resource_T;
+         S : Resource_Vector_T) return Resource_Vector_T;
 
       function "+"
-        (S    : Resource_Vector_T;
-         R    : Resource_T)
-         return Resource_Vector_T;
+        (S : Resource_Vector_T;
+         R : Resource_T) return Resource_Vector_T;
 
       function "+"
-        (S1   : Resource_Vector_T;
-         S2   : Resource_Vector_T)
-         return Resource_Vector_T;
+        (S1 : Resource_Vector_T;
+         S2 : Resource_Vector_T) return Resource_Vector_T;
 
       function "-"
-        (S    : Resource_Vector_T;
-         R    : Resource_T)
-         return Resource_Vector_T;
+        (S : Resource_Vector_T;
+         R : Resource_T) return Resource_Vector_T;
    end Resource_Vector_Functions;
 
    ----------------------
@@ -208,8 +202,7 @@ package System.Task_Info is
      (Sproc_Resources : Resource_Vector_T      := NO_RESOURCES;
       CPU             : CPU_Number             := ANY_CPU;
       Resident        : Page_Locking           := NOLOCK;
-      NDPRI           : Non_Degrading_Priority := NDP_NONE)
-      return            sproc_t;
+      NDPRI           : Non_Degrading_Priority := NDP_NONE) return sproc_t;
    --  Allocates a sproc_t control structure and creates the
    --  corresponding sproc.
 
@@ -239,14 +232,12 @@ package System.Task_Info is
 
    function Unbound_Thread_Attributes
      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
-      Thread_Timeslice : Duration          := 0.0)
-      return             Thread_Attributes;
+      Thread_Timeslice : Duration          := 0.0) return Thread_Attributes;
 
    function Bound_Thread_Attributes
      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
       Thread_Timeslice : Duration          := 0.0;
-      Sproc            : sproc_t)
-      return             Thread_Attributes;
+      Sproc            : sproc_t) return Thread_Attributes;
 
    function Bound_Thread_Attributes
      (Thread_Resources : Resource_Vector_T      := NO_RESOURCES;
@@ -255,20 +246,19 @@ package System.Task_Info is
       CPU              : CPU_Number             := ANY_CPU;
       Resident         : Page_Locking           := NOLOCK;
       NDPRI            : Non_Degrading_Priority := NDP_NONE)
-      return             Thread_Attributes;
+      return Thread_Attributes;
 
    type Task_Info_Type is access all Thread_Attributes;
 
    function New_Unbound_Thread_Attributes
      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
       Thread_Timeslice : Duration          := 0.0)
-      return             Task_Info_Type;
+      return Task_Info_Type;
 
    function New_Bound_Thread_Attributes
      (Thread_Resources : Resource_Vector_T := NO_RESOURCES;
       Thread_Timeslice : Duration          := 0.0;
-      Sproc            : sproc_t)
-      return             Task_Info_Type;
+      Sproc            : sproc_t) return Task_Info_Type;
 
    function New_Bound_Thread_Attributes
      (Thread_Resources : Resource_Vector_T      := NO_RESOURCES;
@@ -277,7 +267,7 @@ package System.Task_Info is
       CPU              : CPU_Number             := ANY_CPU;
       Resident         : Page_Locking           := NOLOCK;
       NDPRI            : Non_Degrading_Priority := NDP_NONE)
-      return             Task_Info_Type;
+      return Task_Info_Type;
 
    Unspecified_Task_Info : constant Task_Info_Type := null;
 
Index: ali.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/ali.adb,v
retrieving revision 1.13
diff -u -p -r1.13 ali.adb
--- ali.adb	2 Feb 2004 12:31:47 -0000	1.13
+++ ali.adb	4 Feb 2004 09:48:40 -0000
@@ -24,13 +24,13 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
-with Butil;    use Butil;
-with Debug;    use Debug;
-with Fname;    use Fname;
-with Namet;    use Namet;
-with Opt;      use Opt;
-with Osint;    use Osint;
-with Output;   use Output;
+with Butil;  use Butil;
+with Debug;  use Debug;
+with Fname;  use Fname;
+with Namet;  use Namet;
+with Opt;    use Opt;
+with Osint;  use Osint;
+with Output; use Output;
 
 package body ALI is
 
@@ -105,8 +105,7 @@ package body ALI is
       Err          : Boolean;
       Read_Xref    : Boolean := False;
       Read_Lines   : String := "";
-      Ignore_Lines : String := "X")
-      return         ALI_Id
+      Ignore_Lines : String := "X") return ALI_Id
    is
       P         : Text_Ptr := T'First;
       Line      : Logical_Line_Number := 1;
@@ -328,8 +327,10 @@ package body ALI is
       -- Get_Name --
       --------------
 
-      function Get_Name (Lower : Boolean := False;
-                         Ignore_Spaces : Boolean := False) return Name_Id is
+      function Get_Name
+        (Lower         : Boolean := False;
+         Ignore_Spaces : Boolean := False) return Name_Id
+      is
       begin
          Name_Len := 0;
          Skip_Space;
Index: ali.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/ali.ads,v
retrieving revision 1.12
diff -u -p -r1.12 ali.ads
--- ali.ads	2 Feb 2004 12:31:47 -0000	1.12
+++ ali.ads	4 Feb 2004 09:48:40 -0000
@@ -814,8 +814,7 @@ package ALI is
       Err          : Boolean;
       Read_Xref    : Boolean := False;
       Read_Lines   : String := "";
-      Ignore_Lines : String := "X")
-      return         ALI_Id;
+      Ignore_Lines : String := "X") return ALI_Id;
    --  Given the text, T, of an ALI file, F, scan and store the information
    --  from the file, and return the Id of the resulting entry in the ALI
    --  table. Switch settings may be modified as described above in the
Index: bindgen.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/bindgen.adb,v
retrieving revision 1.19
diff -u -p -r1.19 bindgen.adb
--- bindgen.adb	2 Feb 2004 12:31:47 -0000	1.19
+++ bindgen.adb	4 Feb 2004 09:48:40 -0000
@@ -141,6 +141,16 @@ package body Bindgen is
    procedure Gen_Output_File_C (Filename : String);
    --  Generate output file (C code case)
 
+   procedure Gen_Restrictions_String_1;
+   --  Generate first restrictions string, which consists of the parameters
+   --  the first R line, as described in lib-writ.ads, with the restrictions
+   --  being those for the entire partition (from Cumulative_Restrictions).
+
+   procedure Gen_Restrictions_String_2;
+   --  Generate first restrictions string, which consists of the parameters
+   --  the second R line, as described in lib-writ.ads, with the restrictions
+   --  being those for the entire partition (from Cumulative_Restrictions).
+
    procedure Gen_Versions_Ada;
    --  Output series of definitions for unit versions (Ada code case)
 
@@ -358,13 +368,15 @@ package body Bindgen is
 
          Set_String ("      Restrictions : constant String :=");
          Write_Statement_Buffer;
-         Set_String ("        """);
 
-         for J in All_Restrictions loop
-            null;
-         end loop;
+         Set_String ("        """);
+         Gen_Restrictions_String_1;
+         Set_String (""" &");
+         Write_Statement_Buffer;
 
-         Set_String (""";");
+         Set_String ("        """);
+         Gen_Restrictions_String_2;
+         Set_String (""" & ASCII.Nul;");
          Write_Statement_Buffer;
          WBI ("");
 
@@ -606,11 +618,8 @@ package body Bindgen is
          --  Generate definition for restrictions string
 
          Set_String ("   const char *restrictions = """);
-
-         for J in All_Restrictions loop
-            null;
-         end loop;
-
+         Gen_Restrictions_String_1;
+         Gen_Restrictions_String_2;
          Set_String (""";");
          Write_Statement_Buffer;
 
@@ -2452,6 +2461,52 @@ package body Bindgen is
 
       Close_Binder_Output;
    end Gen_Output_File_C;
+
+   -------------------------------
+   -- Gen_Restrictions_String_1 --
+   -------------------------------
+
+   procedure Gen_Restrictions_String_1 is
+   begin
+      for R in All_Boolean_Restrictions loop
+         if Cumulative_Restrictions.Set (R) then
+            Set_Char ('r');
+         elsif Cumulative_Restrictions.Violated (R) then
+            Set_Char ('v');
+         else
+            Set_Char ('n');
+         end if;
+      end loop;
+   end Gen_Restrictions_String_1;
+
+   -------------------------------
+   -- Gen_Restrictions_String_2 --
+   -------------------------------
+
+   procedure Gen_Restrictions_String_2 is
+   begin
+      for RP in All_Parameter_Restrictions loop
+         if Cumulative_Restrictions.Set (RP) then
+            Set_Char ('r');
+            Set_Int (Int (Cumulative_Restrictions.Value (RP)));
+         else
+            Set_Char ('n');
+         end if;
+
+         if not Cumulative_Restrictions.Violated (RP)
+           or else RP not in Checked_Parameter_Restrictions
+         then
+            Set_Char ('n');
+         else
+            Set_Char ('v');
+            Set_Int (Int (Cumulative_Restrictions.Count (RP)));
+
+            if Cumulative_Restrictions.Unknown (RP) then
+               Set_Char ('+');
+            end if;
+         end if;
+      end loop;
+   end Gen_Restrictions_String_2;
 
    ----------------------
    -- Gen_Versions_Ada --
Index: bld.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/bld.adb,v
retrieving revision 1.6
diff -u -p -r1.6 bld.adb
--- bld.adb	12 Jan 2004 11:36:12 -0000	1.6
+++ bld.adb	4 Feb 2004 09:48:40 -0000
@@ -525,11 +525,16 @@ package body Bld is
                                   First_Expression_In_List (Current_Term);
 
                begin
-                  if String_Node /= Empty_Node then
+                  if String_Node = Empty_Node then
 
                      --  If String_Node is nil, it is an empty list,
-                     --  there is nothing to do
+                     --  set Expression_Kind if it is still Undecided
 
+                     if Expression_Kind = Undecided then
+                        Expression_Kind := Static_String;
+                     end if;
+
+                  else
                      Expression
                        (Project    => Project,
                         First_Term => Tree.First_Term (String_Node),
Index: fname-uf.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/fname-uf.adb,v
retrieving revision 1.10
diff -u -p -r1.10 fname-uf.adb
--- fname-uf.adb	2 Feb 2004 12:31:51 -0000	1.10
+++ fname-uf.adb	4 Feb 2004 09:48:40 -0000
@@ -123,8 +123,8 @@ package body Fname.UF is
    -------------------
 
    function Get_File_Name
-     (Uname   : Unit_Name_Type;
-      Subunit : Boolean;
+     (Uname    : Unit_Name_Type;
+      Subunit  : Boolean;
       May_Fail : Boolean := False) return File_Name_Type
    is
       Unit_Char : Character;
@@ -387,12 +387,12 @@ package body Fname.UF is
 
                   --  If we are in the second search of the table, we accept
                   --  the file name without checking, because we know that
-                  --  the file does not exist.
+                  --  the file does not exist, except when May_Fail is True,
+                  --  in which case we return No_File.
 
                   if No_File_Check then
                      if May_Fail then
                         return No_File;
-
                      else
                         return Fnam;
                      end if;
Index: fname-uf.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/fname-uf.ads,v
retrieving revision 1.6
diff -u -p -r1.6 fname-uf.ads
--- fname-uf.ads	2 Feb 2004 12:31:51 -0000	1.6
+++ fname-uf.ads	4 Feb 2004 09:48:40 -0000
@@ -44,14 +44,18 @@ package Fname.UF is
    -----------------
 
    function Get_File_Name
-     (Uname   : Unit_Name_Type;
-      Subunit : Boolean;
+     (Uname    : Unit_Name_Type;
+      Subunit  : Boolean;
       May_Fail : Boolean := False) return File_Name_Type;
    --  This function returns the file name that corresponds to a given unit
    --  name, Uname. The Subunit parameter is set True for subunits, and
    --  false for all other kinds of units. The caller is responsible for
    --  ensuring that the unit name meets the requirements given in package
    --  Uname and described above.
+   --  When May_Fail is True, if the file cannot be found, this function
+   --  returns No_File. When it is False, if the file cannot be found,
+   --  a file name compatible with one pattern Source_File_Name pragma is
+   --  returned.
 
    procedure Initialize;
    --  Initialize internal tables. This is called automatically when the
Index: gnatbind.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/gnatbind.adb,v
retrieving revision 1.10
diff -u -p -r1.10 gnatbind.adb
--- gnatbind.adb	2 Feb 2004 12:31:52 -0000	1.10
+++ gnatbind.adb	4 Feb 2004 09:48:40 -0000
@@ -447,6 +447,12 @@ begin
 
    Targparm.Get_Target_Parameters;
 
+   --  Initialize Cumulative_Restrictions with the restrictions on the target
+   --  scanned from the system.ads file. Then as we read ALI files, we will
+   --  accumulate additional restrictions specified in other files.
+
+   Cumulative_Restrictions := Targparm.Restrictions_On_Target;
+
    --  On OpenVMS, when -L is used, all external names used in pragmas Export
    --  are in upper case. The reason is that on OpenVMS, the macro-assembler
    --  MACASM-32, used to build Stand-Alone Libraries, only understands
Index: gprcmd.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/gprcmd.adb,v
retrieving revision 1.6
diff -u -p -r1.6 gprcmd.adb
--- gprcmd.adb	2 Feb 2004 12:31:53 -0000	1.6
+++ gprcmd.adb	4 Feb 2004 09:48:40 -0000
@@ -113,6 +113,7 @@ procedure Gprcmd is
          Put_Line
            (Standard_Error,
             "bad call to gprcmd with" & Argument_Count'Img & " arguments.");
+
          for J in 0 .. Argument_Count loop
             Put (Standard_Error, Argument (J) & " ");
          end loop;
@@ -473,9 +474,9 @@ begin
             end if;
          end;
 
-      else
-         --  Uknown command
+      --  Unknown command
 
+      else
          Check_Args (False);
       end if;
    end;
Index: impunit.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/impunit.adb,v
retrieving revision 1.10
diff -u -p -r1.10 impunit.adb
--- impunit.adb	12 Jan 2004 11:45:24 -0000	1.10
+++ impunit.adb	4 Feb 2004 09:48:40 -0000
@@ -297,6 +297,8 @@ package body Impunit is
      "s-assert",    -- System.Assertions
      "s-memory",    -- System.Memory
      "s-parint",    -- System.Partition_Interface
+     "s-restri",    -- System.Restrictions
+     "s-rident",    -- System.Rident
      "s-tasinf",    -- System.Task_Info
      "s-wchcnv",    -- System.Wch_Cnv
      "s-wchcon");   -- System.Wch_Con
Index: lib-writ.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/lib-writ.adb,v
retrieving revision 1.13
diff -u -p -r1.13 lib-writ.adb
--- lib-writ.adb	2 Feb 2004 12:31:53 -0000	1.13
+++ lib-writ.adb	4 Feb 2004 09:48:40 -0000
@@ -691,7 +691,7 @@ package body Lib.Writ is
          end loop;
       end Write_With_Lines;
 
-   --  Start of processing for Writ_ALI
+   --  Start of processing for Write_ALI
 
    begin
       --  We never write an ALI file if the original operating mode was
@@ -919,7 +919,6 @@ package body Lib.Writ is
          then
             if not Has_No_Elaboration_Code (Cunit (Unit)) then
                Main_Restrictions.Violated (No_Elaboration_Code) := True;
-               Main_Restrictions.Count    (No_Elaboration_Code) := -1;
             end if;
          end if;
       end loop;
Index: lib-writ.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/lib-writ.ads,v
retrieving revision 1.10
diff -u -p -r1.10 lib-writ.ads
--- lib-writ.ads	2 Feb 2004 12:31:54 -0000	1.10
+++ lib-writ.ads	4 Feb 2004 09:48:40 -0000
@@ -406,11 +406,13 @@ package Lib.Writ is
    --      One of these lines is present for each unit that is mentioned in
    --      an explicit with clause by the current unit. The first parameter
    --      is the unit name in internal format. The second parameter is the
-   --      file name of the file that must be compiled to compile this unit
-   --      (which is usually the file for the body, except for packages
-   --      which have no body). The third parameter is the file name of the
-   --      library information file that contains the results of compiling
-   --      this unit. The optional modifiers are used as follows:
+   --      file name of the file that must be compiled to compile this unit.
+   --      It is usually the file for the body, except for packages
+   --      which have no body; for units that need a body, if the source file
+   --      for the body cannot be found, the file name of the spec is used
+   --      instead. The third parameter is the file name of the library
+   --      information file that contains the results of compiling this unit.
+   --      The optional modifiers are used as follows:
    --
    --        E   pragma Elaborate applies to this unit
    --
Index: restrict.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/restrict.adb,v
retrieving revision 1.9
diff -u -p -r1.9 restrict.adb
--- restrict.adb	2 Feb 2004 12:31:55 -0000	1.9
+++ restrict.adb	4 Feb 2004 09:48:40 -0000
@@ -372,7 +372,7 @@ package body Restrict is
         and then Restrictions.Set (No_Protected_Type_Allocators)
         and then Restrictions.Set (No_Local_Protected_Objects)
         and then Restrictions.Set (No_Requeue_Statements)
-        and then Restrictions.Set (No_Task_Attributes)
+        and then Restrictions.Set (No_Task_Attributes_Package)
         and then Restrictions.Set (Max_Asynchronous_Select_Nesting)
         and then Restrictions.Set (Max_Task_Entries)
         and then Restrictions.Set (Max_Protected_Entries)
@@ -472,7 +472,7 @@ package body Restrict is
       Set_Restriction (No_Protected_Type_Allocators, N);
       Set_Restriction (No_Local_Protected_Objects,   N);
       Set_Restriction (No_Requeue_Statements,        N);
-      Set_Restriction (No_Task_Attributes,           N);
+      Set_Restriction (No_Task_Attributes_Package,   N);
 
       --  Set parameter restrictions
 
Index: restrict.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/restrict.ads,v
retrieving revision 1.7
diff -u -p -r1.7 restrict.ads
--- restrict.ads	2 Feb 2004 12:31:56 -0000	1.7
+++ restrict.ads	4 Feb 2004 09:48:40 -0000
@@ -77,27 +77,27 @@ package Restrict is
    end record;
 
    Unit_Array : constant array (Positive range <>) of Unit_Entry := (
-     (No_Asynchronous_Control,    "a-astaco"),
-     (No_Calendar,                "a-calend"),
-     (No_Calendar,                "calendar"),
-     (No_Delay,                   "a-calend"),
-     (No_Delay,                   "calendar"),
-     (No_Dynamic_Priorities,      "a-dynpri"),
-     (No_Finalization,            "a-finali"),
-     (No_IO,                      "a-direio"),
-     (No_IO,                      "directio"),
-     (No_IO,                      "a-sequio"),
-     (No_IO,                      "sequenio"),
-     (No_IO,                      "a-ststio"),
-     (No_IO,                      "a-textio"),
-     (No_IO,                      "text_io "),
-     (No_IO,                      "a-witeio"),
-     (No_Task_Attributes,         "a-tasatt"),
-     (No_Streams,                 "a-stream"),
-     (No_Unchecked_Conversion,    "a-unccon"),
-     (No_Unchecked_Conversion,    "unchconv"),
-     (No_Unchecked_Deallocation,  "a-uncdea"),
-     (No_Unchecked_Deallocation,  "unchdeal"));
+     (No_Asynchronous_Control,     "a-astaco"),
+     (No_Calendar,                 "a-calend"),
+     (No_Calendar,                 "calendar"),
+     (No_Delay,                    "a-calend"),
+     (No_Delay,                    "calendar"),
+     (No_Dynamic_Priorities,       "a-dynpri"),
+     (No_Finalization,             "a-finali"),
+     (No_IO,                       "a-direio"),
+     (No_IO,                       "directio"),
+     (No_IO,                       "a-sequio"),
+     (No_IO,                       "sequenio"),
+     (No_IO,                       "a-ststio"),
+     (No_IO,                       "a-textio"),
+     (No_IO,                       "text_io "),
+     (No_IO,                       "a-witeio"),
+     (No_Task_Attributes_Package,  "a-tasatt"),
+     (No_Streams,                  "a-stream"),
+     (No_Unchecked_Conversion,     "a-unccon"),
+     (No_Unchecked_Conversion,     "unchconv"),
+     (No_Unchecked_Deallocation,   "a-uncdea"),
+     (No_Unchecked_Deallocation,   "unchdeal"));
 
    --  The following map has True for all GNAT pragmas. It is used to
    --  implement pragma Restrictions (No_Implementation_Restrictions)
@@ -123,7 +123,7 @@ package Restrict is
       No_Select_Statements               => True,
       No_Standard_Storage_Pools          => True,
       No_Streams                         => True,
-      No_Task_Attributes                 => True,
+      No_Task_Attributes_Package         => True,
       No_Task_Termination                => True,
       No_Wide_Characters                 => True,
       Static_Priorities                  => True,
Index: sem_prag.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/sem_prag.adb,v
retrieving revision 1.18
diff -u -p -r1.18 sem_prag.adb
--- sem_prag.adb	2 Feb 2004 12:31:58 -0000	1.18
+++ sem_prag.adb	4 Feb 2004 09:48:41 -0000
@@ -3280,6 +3280,15 @@ package body Sem_Prag is
                      Set_Restriction (No_Requeue_Statements, N);
                      Set_Warning (No_Requeue_Statements);
 
+                  --  No_Task_Attributes is a synonym for
+                  --  No_Task_Attributes_Package
+
+                  elsif Chars (Expr) = Name_No_Task_Attributes then
+                     Check_Restriction
+                       (No_Implementation_Restrictions, Arg);
+                     Set_Restriction (No_Task_Attributes_Package, N);
+                     Set_Warning (No_Task_Attributes_Package);
+
                   --  Normal processing for all other cases
 
                   else
@@ -9648,7 +9657,8 @@ package body Sem_Prag is
                   --  the formal may be wrapped in a conversion if the actual
                   --  is a conversion. Retrieve the real entity name.
 
-                  if In_Instance_Body
+                  if (In_Instance_Body
+                       or else In_Inlined_Body)
                     and then Nkind (E_Id) = N_Unchecked_Type_Conversion
                   then
                      E_Id := Expression (E_Id);
Index: snames.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/snames.adb,v
retrieving revision 1.16
diff -u -p -r1.16 snames.adb
--- snames.adb	2 Feb 2004 12:32:00 -0000	1.16
+++ snames.adb	4 Feb 2004 09:48:41 -0000
@@ -335,6 +335,7 @@ package body Snames is
      "parameter_types#" &
      "reference#" &
      "no_requeue#" &
+     "no_task_attributes#" &
      "restricted#" &
      "result_mechanism#" &
      "result_type#" &
Index: snames.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/snames.ads,v
retrieving revision 1.16
diff -u -p -r1.16 snames.ads
--- snames.ads	2 Feb 2004 12:32:00 -0000	1.16
+++ snames.ads	4 Feb 2004 09:48:41 -0000
@@ -524,33 +524,34 @@ package Snames is
    Name_Parameter_Types                : constant Name_Id := N + 275;
    Name_Reference                      : constant Name_Id := N + 276;
    Name_No_Requeue                     : constant Name_Id := N + 277;
-   Name_Restricted                     : constant Name_Id := N + 278;
-   Name_Result_Mechanism               : constant Name_Id := N + 279;
-   Name_Result_Type                    : constant Name_Id := N + 280;
-   Name_Runtime                        : constant Name_Id := N + 281;
-   Name_SB                             : constant Name_Id := N + 282;
-   Name_Secondary_Stack_Size           : constant Name_Id := N + 283;
-   Name_Section                        : constant Name_Id := N + 284;
-   Name_Semaphore                      : constant Name_Id := N + 285;
-   Name_Spec_File_Name                 : constant Name_Id := N + 286;
-   Name_Static                         : constant Name_Id := N + 287;
-   Name_Stack_Size                     : constant Name_Id := N + 288;
-   Name_Subunit_File_Name              : constant Name_Id := N + 289;
-   Name_Task_Stack_Size_Default        : constant Name_Id := N + 290;
-   Name_Task_Type                      : constant Name_Id := N + 291;
-   Name_Time_Slicing_Enabled           : constant Name_Id := N + 292;
-   Name_Top_Guard                      : constant Name_Id := N + 293;
-   Name_UBA                            : constant Name_Id := N + 294;
-   Name_UBS                            : constant Name_Id := N + 295;
-   Name_UBSB                           : constant Name_Id := N + 296;
-   Name_Unit_Name                      : constant Name_Id := N + 297;
-   Name_Unknown                        : constant Name_Id := N + 298;
-   Name_Unrestricted                   : constant Name_Id := N + 299;
-   Name_Uppercase                      : constant Name_Id := N + 300;
-   Name_User                           : constant Name_Id := N + 301;
-   Name_VAX_Float                      : constant Name_Id := N + 302;
-   Name_VMS                            : constant Name_Id := N + 303;
-   Name_Working_Storage                : constant Name_Id := N + 304;
+   Name_No_Task_Attributes             : constant Name_Id := N + 278;
+   Name_Restricted                     : constant Name_Id := N + 279;
+   Name_Result_Mechanism               : constant Name_Id := N + 280;
+   Name_Result_Type                    : constant Name_Id := N + 281;
+   Name_Runtime                        : constant Name_Id := N + 282;
+   Name_SB                             : constant Name_Id := N + 283;
+   Name_Secondary_Stack_Size           : constant Name_Id := N + 284;
+   Name_Section                        : constant Name_Id := N + 285;
+   Name_Semaphore                      : constant Name_Id := N + 286;
+   Name_Spec_File_Name                 : constant Name_Id := N + 287;
+   Name_Static                         : constant Name_Id := N + 288;
+   Name_Stack_Size                     : constant Name_Id := N + 289;
+   Name_Subunit_File_Name              : constant Name_Id := N + 290;
+   Name_Task_Stack_Size_Default        : constant Name_Id := N + 291;
+   Name_Task_Type                      : constant Name_Id := N + 292;
+   Name_Time_Slicing_Enabled           : constant Name_Id := N + 293;
+   Name_Top_Guard                      : constant Name_Id := N + 294;
+   Name_UBA                            : constant Name_Id := N + 295;
+   Name_UBS                            : constant Name_Id := N + 296;
+   Name_UBSB                           : constant Name_Id := N + 297;
+   Name_Unit_Name                      : constant Name_Id := N + 298;
+   Name_Unknown                        : constant Name_Id := N + 299;
+   Name_Unrestricted                   : constant Name_Id := N + 300;
+   Name_Uppercase                      : constant Name_Id := N + 301;
+   Name_User                           : constant Name_Id := N + 302;
+   Name_VAX_Float                      : constant Name_Id := N + 303;
+   Name_VMS                            : constant Name_Id := N + 304;
+   Name_Working_Storage                : constant Name_Id := N + 305;
 
    --  Names of recognized attributes. The entries with the comment "Ada 83"
    --  are attributes that are defined in Ada 83, but not in Ada 95. These
@@ -564,158 +565,158 @@ package Snames is
    --  The entries marked VMS are recognized only in OpenVMS implementations
    --  of GNAT, and are treated as illegal in all other contexts.
 
-   First_Attribute_Name                : constant Name_Id := N + 305;
-   Name_Abort_Signal                   : constant Name_Id := N + 305;  -- GNAT
-   Name_Access                         : constant Name_Id := N + 306;
-   Name_Address                        : constant Name_Id := N + 307;
-   Name_Address_Size                   : constant Name_Id := N + 308;  -- GNAT
-   Name_Aft                            : constant Name_Id := N + 309;
-   Name_Alignment                      : constant Name_Id := N + 310;
-   Name_Asm_Input                      : constant Name_Id := N + 311;  -- GNAT
-   Name_Asm_Output                     : constant Name_Id := N + 312;  -- GNAT
-   Name_AST_Entry                      : constant Name_Id := N + 313;  -- VMS
-   Name_Bit                            : constant Name_Id := N + 314;  -- GNAT
-   Name_Bit_Order                      : constant Name_Id := N + 315;
-   Name_Bit_Position                   : constant Name_Id := N + 316;  -- GNAT
-   Name_Body_Version                   : constant Name_Id := N + 317;
-   Name_Callable                       : constant Name_Id := N + 318;
-   Name_Caller                         : constant Name_Id := N + 319;
-   Name_Code_Address                   : constant Name_Id := N + 320;  -- GNAT
-   Name_Component_Size                 : constant Name_Id := N + 321;
-   Name_Compose                        : constant Name_Id := N + 322;
-   Name_Constrained                    : constant Name_Id := N + 323;
-   Name_Count                          : constant Name_Id := N + 324;
-   Name_Default_Bit_Order              : constant Name_Id := N + 325; -- GNAT
-   Name_Definite                       : constant Name_Id := N + 326;
-   Name_Delta                          : constant Name_Id := N + 327;
-   Name_Denorm                         : constant Name_Id := N + 328;
-   Name_Digits                         : constant Name_Id := N + 329;
-   Name_Elaborated                     : constant Name_Id := N + 330; -- GNAT
-   Name_Emax                           : constant Name_Id := N + 331; -- Ada 83
-   Name_Enum_Rep                       : constant Name_Id := N + 332; -- GNAT
-   Name_Epsilon                        : constant Name_Id := N + 333; -- Ada 83
-   Name_Exponent                       : constant Name_Id := N + 334;
-   Name_External_Tag                   : constant Name_Id := N + 335;
-   Name_First                          : constant Name_Id := N + 336;
-   Name_First_Bit                      : constant Name_Id := N + 337;
-   Name_Fixed_Value                    : constant Name_Id := N + 338; -- GNAT
-   Name_Fore                           : constant Name_Id := N + 339;
-   Name_Has_Discriminants              : constant Name_Id := N + 340; -- GNAT
-   Name_Identity                       : constant Name_Id := N + 341;
-   Name_Img                            : constant Name_Id := N + 342; -- GNAT
-   Name_Integer_Value                  : constant Name_Id := N + 343; -- GNAT
-   Name_Large                          : constant Name_Id := N + 344; -- Ada 83
-   Name_Last                           : constant Name_Id := N + 345;
-   Name_Last_Bit                       : constant Name_Id := N + 346;
-   Name_Leading_Part                   : constant Name_Id := N + 347;
-   Name_Length                         : constant Name_Id := N + 348;
-   Name_Machine_Emax                   : constant Name_Id := N + 349;
-   Name_Machine_Emin                   : constant Name_Id := N + 350;
-   Name_Machine_Mantissa               : constant Name_Id := N + 351;
-   Name_Machine_Overflows              : constant Name_Id := N + 352;
-   Name_Machine_Radix                  : constant Name_Id := N + 353;
-   Name_Machine_Rounds                 : constant Name_Id := N + 354;
-   Name_Machine_Size                   : constant Name_Id := N + 355; -- GNAT
-   Name_Mantissa                       : constant Name_Id := N + 356; -- Ada 83
-   Name_Max_Size_In_Storage_Elements   : constant Name_Id := N + 357;
-   Name_Maximum_Alignment              : constant Name_Id := N + 358; -- GNAT
-   Name_Mechanism_Code                 : constant Name_Id := N + 359; -- GNAT
-   Name_Model_Emin                     : constant Name_Id := N + 360;
-   Name_Model_Epsilon                  : constant Name_Id := N + 361;
-   Name_Model_Mantissa                 : constant Name_Id := N + 362;
-   Name_Model_Small                    : constant Name_Id := N + 363;
-   Name_Modulus                        : constant Name_Id := N + 364;
-   Name_Null_Parameter                 : constant Name_Id := N + 365; -- GNAT
-   Name_Object_Size                    : constant Name_Id := N + 366; -- GNAT
-   Name_Partition_ID                   : constant Name_Id := N + 367;
-   Name_Passed_By_Reference            : constant Name_Id := N + 368; -- GNAT
-   Name_Pool_Address                   : constant Name_Id := N + 369;
-   Name_Pos                            : constant Name_Id := N + 370;
-   Name_Position                       : constant Name_Id := N + 371;
-   Name_Range                          : constant Name_Id := N + 372;
-   Name_Range_Length                   : constant Name_Id := N + 373; -- GNAT
-   Name_Round                          : constant Name_Id := N + 374;
-   Name_Safe_Emax                      : constant Name_Id := N + 375; -- Ada 83
-   Name_Safe_First                     : constant Name_Id := N + 376;
-   Name_Safe_Large                     : constant Name_Id := N + 377; -- Ada 83
-   Name_Safe_Last                      : constant Name_Id := N + 378;
-   Name_Safe_Small                     : constant Name_Id := N + 379; -- Ada 83
-   Name_Scale                          : constant Name_Id := N + 380;
-   Name_Scaling                        : constant Name_Id := N + 381;
-   Name_Signed_Zeros                   : constant Name_Id := N + 382;
-   Name_Size                           : constant Name_Id := N + 383;
-   Name_Small                          : constant Name_Id := N + 384;
-   Name_Storage_Size                   : constant Name_Id := N + 385;
-   Name_Storage_Unit                   : constant Name_Id := N + 386; -- GNAT
-   Name_Tag                            : constant Name_Id := N + 387;
-   Name_Target_Name                    : constant Name_Id := N + 388; -- GNAT
-   Name_Terminated                     : constant Name_Id := N + 389;
-   Name_To_Address                     : constant Name_Id := N + 390; -- GNAT
-   Name_Type_Class                     : constant Name_Id := N + 391; -- GNAT
-   Name_UET_Address                    : constant Name_Id := N + 392; -- GNAT
-   Name_Unbiased_Rounding              : constant Name_Id := N + 393;
-   Name_Unchecked_Access               : constant Name_Id := N + 394;
-   Name_Unconstrained_Array            : constant Name_Id := N + 395;
-   Name_Universal_Literal_String       : constant Name_Id := N + 396; -- GNAT
-   Name_Unrestricted_Access            : constant Name_Id := N + 397; -- GNAT
-   Name_VADS_Size                      : constant Name_Id := N + 398; -- GNAT
-   Name_Val                            : constant Name_Id := N + 399;
-   Name_Valid                          : constant Name_Id := N + 400;
-   Name_Value_Size                     : constant Name_Id := N + 401; -- GNAT
-   Name_Version                        : constant Name_Id := N + 402;
-   Name_Wchar_T_Size                   : constant Name_Id := N + 403; -- GNAT
-   Name_Wide_Width                     : constant Name_Id := N + 404;
-   Name_Width                          : constant Name_Id := N + 405;
-   Name_Word_Size                      : constant Name_Id := N + 406; -- GNAT
+   First_Attribute_Name                : constant Name_Id := N + 306;
+   Name_Abort_Signal                   : constant Name_Id := N + 306;  -- GNAT
+   Name_Access                         : constant Name_Id := N + 307;
+   Name_Address                        : constant Name_Id := N + 308;
+   Name_Address_Size                   : constant Name_Id := N + 309;  -- GNAT
+   Name_Aft                            : constant Name_Id := N + 310;
+   Name_Alignment                      : constant Name_Id := N + 311;
+   Name_Asm_Input                      : constant Name_Id := N + 312;  -- GNAT
+   Name_Asm_Output                     : constant Name_Id := N + 313;  -- GNAT
+   Name_AST_Entry                      : constant Name_Id := N + 314;  -- VMS
+   Name_Bit                            : constant Name_Id := N + 315;  -- GNAT
+   Name_Bit_Order                      : constant Name_Id := N + 316;
+   Name_Bit_Position                   : constant Name_Id := N + 317;  -- GNAT
+   Name_Body_Version                   : constant Name_Id := N + 318;
+   Name_Callable                       : constant Name_Id := N + 319;
+   Name_Caller                         : constant Name_Id := N + 320;
+   Name_Code_Address                   : constant Name_Id := N + 321;  -- GNAT
+   Name_Component_Size                 : constant Name_Id := N + 322;
+   Name_Compose                        : constant Name_Id := N + 323;
+   Name_Constrained                    : constant Name_Id := N + 324;
+   Name_Count                          : constant Name_Id := N + 325;
+   Name_Default_Bit_Order              : constant Name_Id := N + 326; -- GNAT
+   Name_Definite                       : constant Name_Id := N + 327;
+   Name_Delta                          : constant Name_Id := N + 328;
+   Name_Denorm                         : constant Name_Id := N + 329;
+   Name_Digits                         : constant Name_Id := N + 330;
+   Name_Elaborated                     : constant Name_Id := N + 331; -- GNAT
+   Name_Emax                           : constant Name_Id := N + 332; -- Ada 83
+   Name_Enum_Rep                       : constant Name_Id := N + 333; -- GNAT
+   Name_Epsilon                        : constant Name_Id := N + 334; -- Ada 83
+   Name_Exponent                       : constant Name_Id := N + 335;
+   Name_External_Tag                   : constant Name_Id := N + 336;
+   Name_First                          : constant Name_Id := N + 337;
+   Name_First_Bit                      : constant Name_Id := N + 338;
+   Name_Fixed_Value                    : constant Name_Id := N + 339; -- GNAT
+   Name_Fore                           : constant Name_Id := N + 340;
+   Name_Has_Discriminants              : constant Name_Id := N + 341; -- GNAT
+   Name_Identity                       : constant Name_Id := N + 342;
+   Name_Img                            : constant Name_Id := N + 343; -- GNAT
+   Name_Integer_Value                  : constant Name_Id := N + 344; -- GNAT
+   Name_Large                          : constant Name_Id := N + 345; -- Ada 83
+   Name_Last                           : constant Name_Id := N + 346;
+   Name_Last_Bit                       : constant Name_Id := N + 347;
+   Name_Leading_Part                   : constant Name_Id := N + 348;
+   Name_Length                         : constant Name_Id := N + 349;
+   Name_Machine_Emax                   : constant Name_Id := N + 350;
+   Name_Machine_Emin                   : constant Name_Id := N + 351;
+   Name_Machine_Mantissa               : constant Name_Id := N + 352;
+   Name_Machine_Overflows              : constant Name_Id := N + 353;
+   Name_Machine_Radix                  : constant Name_Id := N + 354;
+   Name_Machine_Rounds                 : constant Name_Id := N + 355;
+   Name_Machine_Size                   : constant Name_Id := N + 356; -- GNAT
+   Name_Mantissa                       : constant Name_Id := N + 357; -- Ada 83
+   Name_Max_Size_In_Storage_Elements   : constant Name_Id := N + 358;
+   Name_Maximum_Alignment              : constant Name_Id := N + 359; -- GNAT
+   Name_Mechanism_Code                 : constant Name_Id := N + 360; -- GNAT
+   Name_Model_Emin                     : constant Name_Id := N + 361;
+   Name_Model_Epsilon                  : constant Name_Id := N + 362;
+   Name_Model_Mantissa                 : constant Name_Id := N + 363;
+   Name_Model_Small                    : constant Name_Id := N + 364;
+   Name_Modulus                        : constant Name_Id := N + 365;
+   Name_Null_Parameter                 : constant Name_Id := N + 366; -- GNAT
+   Name_Object_Size                    : constant Name_Id := N + 367; -- GNAT
+   Name_Partition_ID                   : constant Name_Id := N + 368;
+   Name_Passed_By_Reference            : constant Name_Id := N + 369; -- GNAT
+   Name_Pool_Address                   : constant Name_Id := N + 370;
+   Name_Pos                            : constant Name_Id := N + 371;
+   Name_Position                       : constant Name_Id := N + 372;
+   Name_Range                          : constant Name_Id := N + 373;
+   Name_Range_Length                   : constant Name_Id := N + 374; -- GNAT
+   Name_Round                          : constant Name_Id := N + 375;
+   Name_Safe_Emax                      : constant Name_Id := N + 376; -- Ada 83
+   Name_Safe_First                     : constant Name_Id := N + 377;
+   Name_Safe_Large                     : constant Name_Id := N + 378; -- Ada 83
+   Name_Safe_Last                      : constant Name_Id := N + 379;
+   Name_Safe_Small                     : constant Name_Id := N + 380; -- Ada 83
+   Name_Scale                          : constant Name_Id := N + 381;
+   Name_Scaling                        : constant Name_Id := N + 382;
+   Name_Signed_Zeros                   : constant Name_Id := N + 383;
+   Name_Size                           : constant Name_Id := N + 384;
+   Name_Small                          : constant Name_Id := N + 385;
+   Name_Storage_Size                   : constant Name_Id := N + 386;
+   Name_Storage_Unit                   : constant Name_Id := N + 387; -- GNAT
+   Name_Tag                            : constant Name_Id := N + 388;
+   Name_Target_Name                    : constant Name_Id := N + 389; -- GNAT
+   Name_Terminated                     : constant Name_Id := N + 390;
+   Name_To_Address                     : constant Name_Id := N + 391; -- GNAT
+   Name_Type_Class                     : constant Name_Id := N + 392; -- GNAT
+   Name_UET_Address                    : constant Name_Id := N + 393; -- GNAT
+   Name_Unbiased_Rounding              : constant Name_Id := N + 394;
+   Name_Unchecked_Access               : constant Name_Id := N + 395;
+   Name_Unconstrained_Array            : constant Name_Id := N + 396;
+   Name_Universal_Literal_String       : constant Name_Id := N + 397; -- GNAT
+   Name_Unrestricted_Access            : constant Name_Id := N + 398; -- GNAT
+   Name_VADS_Size                      : constant Name_Id := N + 399; -- GNAT
+   Name_Val                            : constant Name_Id := N + 400;
+   Name_Valid                          : constant Name_Id := N + 401;
+   Name_Value_Size                     : constant Name_Id := N + 402; -- GNAT
+   Name_Version                        : constant Name_Id := N + 403;
+   Name_Wchar_T_Size                   : constant Name_Id := N + 404; -- GNAT
+   Name_Wide_Width                     : constant Name_Id := N + 405;
+   Name_Width                          : constant Name_Id := N + 406;
+   Name_Word_Size                      : constant Name_Id := N + 407; -- GNAT
 
    --  Attributes that designate attributes returning renamable functions,
    --  i.e. functions that return other than a universal value.
 
-   First_Renamable_Function_Attribute  : constant Name_Id := N + 407;
-   Name_Adjacent                       : constant Name_Id := N + 407;
-   Name_Ceiling                        : constant Name_Id := N + 408;
-   Name_Copy_Sign                      : constant Name_Id := N + 409;
-   Name_Floor                          : constant Name_Id := N + 410;
-   Name_Fraction                       : constant Name_Id := N + 411;
-   Name_Image                          : constant Name_Id := N + 412;
-   Name_Input                          : constant Name_Id := N + 413;
-   Name_Machine                        : constant Name_Id := N + 414;
-   Name_Max                            : constant Name_Id := N + 415;
-   Name_Min                            : constant Name_Id := N + 416;
-   Name_Model                          : constant Name_Id := N + 417;
-   Name_Pred                           : constant Name_Id := N + 418;
-   Name_Remainder                      : constant Name_Id := N + 419;
-   Name_Rounding                       : constant Name_Id := N + 420;
-   Name_Succ                           : constant Name_Id := N + 421;
-   Name_Truncation                     : constant Name_Id := N + 422;
-   Name_Value                          : constant Name_Id := N + 423;
-   Name_Wide_Image                     : constant Name_Id := N + 424;
-   Name_Wide_Value                     : constant Name_Id := N + 425;
-   Last_Renamable_Function_Attribute   : constant Name_Id := N + 425;
+   First_Renamable_Function_Attribute  : constant Name_Id := N + 408;
+   Name_Adjacent                       : constant Name_Id := N + 408;
+   Name_Ceiling                        : constant Name_Id := N + 409;
+   Name_Copy_Sign                      : constant Name_Id := N + 410;
+   Name_Floor                          : constant Name_Id := N + 411;
+   Name_Fraction                       : constant Name_Id := N + 412;
+   Name_Image                          : constant Name_Id := N + 413;
+   Name_Input                          : constant Name_Id := N + 414;
+   Name_Machine                        : constant Name_Id := N + 415;
+   Name_Max                            : constant Name_Id := N + 416;
+   Name_Min                            : constant Name_Id := N + 417;
+   Name_Model                          : constant Name_Id := N + 418;
+   Name_Pred                           : constant Name_Id := N + 419;
+   Name_Remainder                      : constant Name_Id := N + 420;
+   Name_Rounding                       : constant Name_Id := N + 421;
+   Name_Succ                           : constant Name_Id := N + 422;
+   Name_Truncation                     : constant Name_Id := N + 423;
+   Name_Value                          : constant Name_Id := N + 424;
+   Name_Wide_Image                     : constant Name_Id := N + 425;
+   Name_Wide_Value                     : constant Name_Id := N + 426;
+   Last_Renamable_Function_Attribute   : constant Name_Id := N + 426;
 
    --  Attributes that designate procedures
 
-   First_Procedure_Attribute           : constant Name_Id := N + 426;
-   Name_Output                         : constant Name_Id := N + 426;
-   Name_Read                           : constant Name_Id := N + 427;
-   Name_Write                          : constant Name_Id := N + 428;
-   Last_Procedure_Attribute            : constant Name_Id := N + 428;
+   First_Procedure_Attribute           : constant Name_Id := N + 427;
+   Name_Output                         : constant Name_Id := N + 427;
+   Name_Read                           : constant Name_Id := N + 428;
+   Name_Write                          : constant Name_Id := N + 429;
+   Last_Procedure_Attribute            : constant Name_Id := N + 429;
 
    --  Remaining attributes are ones that return entities
 
-   First_Entity_Attribute_Name         : constant Name_Id := N + 429;
-   Name_Elab_Body                      : constant Name_Id := N + 429; -- GNAT
-   Name_Elab_Spec                      : constant Name_Id := N + 430; -- GNAT
-   Name_Storage_Pool                   : constant Name_Id := N + 431;
+   First_Entity_Attribute_Name         : constant Name_Id := N + 430;
+   Name_Elab_Body                      : constant Name_Id := N + 430; -- GNAT
+   Name_Elab_Spec                      : constant Name_Id := N + 431; -- GNAT
+   Name_Storage_Pool                   : constant Name_Id := N + 432;
 
    --  These attributes are the ones that return types
 
-   First_Type_Attribute_Name           : constant Name_Id := N + 432;
-   Name_Base                           : constant Name_Id := N + 432;
-   Name_Class                          : constant Name_Id := N + 433;
-   Last_Type_Attribute_Name            : constant Name_Id := N + 433;
-   Last_Entity_Attribute_Name          : constant Name_Id := N + 433;
-   Last_Attribute_Name                 : constant Name_Id := N + 433;
+   First_Type_Attribute_Name           : constant Name_Id := N + 433;
+   Name_Base                           : constant Name_Id := N + 433;
+   Name_Class                          : constant Name_Id := N + 434;
+   Last_Type_Attribute_Name            : constant Name_Id := N + 434;
+   Last_Entity_Attribute_Name          : constant Name_Id := N + 434;
+   Last_Attribute_Name                 : constant Name_Id := N + 434;
 
    --  Names of recognized locking policy identifiers
 
@@ -723,10 +724,10 @@ package Snames is
    --  name (e.g. C for Ceiling_Locking). If new policy names are added,
    --  the first character must be distinct.
 
-   First_Locking_Policy_Name           : constant Name_Id := N + 434;
-   Name_Ceiling_Locking                : constant Name_Id := N + 434;
-   Name_Inheritance_Locking            : constant Name_Id := N + 435;
-   Last_Locking_Policy_Name            : constant Name_Id := N + 435;
+   First_Locking_Policy_Name           : constant Name_Id := N + 435;
+   Name_Ceiling_Locking                : constant Name_Id := N + 435;
+   Name_Inheritance_Locking            : constant Name_Id := N + 436;
+   Last_Locking_Policy_Name            : constant Name_Id := N + 436;
 
    --  Names of recognized queuing policy identifiers.
 
@@ -734,10 +735,10 @@ package Snames is
    --  name (e.g. F for FIFO_Queuing). If new policy names are added,
    --  the first character must be distinct.
 
-   First_Queuing_Policy_Name           : constant Name_Id := N + 436;
-   Name_FIFO_Queuing                   : constant Name_Id := N + 436;
-   Name_Priority_Queuing               : constant Name_Id := N + 437;
-   Last_Queuing_Policy_Name            : constant Name_Id := N + 437;
+   First_Queuing_Policy_Name           : constant Name_Id := N + 437;
+   Name_FIFO_Queuing                   : constant Name_Id := N + 437;
+   Name_Priority_Queuing               : constant Name_Id := N + 438;
+   Last_Queuing_Policy_Name            : constant Name_Id := N + 438;
 
    --  Names of recognized task dispatching policy identifiers
 
@@ -745,193 +746,193 @@ package Snames is
    --  name (e.g. F for FIFO_WIthinn_Priorities). If new policy names
    --  are added, the first character must be distinct.
 
-   First_Task_Dispatching_Policy_Name  : constant Name_Id := N + 438;
-   Name_Fifo_Within_Priorities         : constant Name_Id := N + 438;
-   Last_Task_Dispatching_Policy_Name   : constant Name_Id := N + 438;
+   First_Task_Dispatching_Policy_Name  : constant Name_Id := N + 439;
+   Name_Fifo_Within_Priorities         : constant Name_Id := N + 439;
+   Last_Task_Dispatching_Policy_Name   : constant Name_Id := N + 439;
 
    --  Names of recognized checks for pragma Suppress
 
-   First_Check_Name                    : constant Name_Id := N + 439;
-   Name_Access_Check                   : constant Name_Id := N + 439;
-   Name_Accessibility_Check            : constant Name_Id := N + 440;
-   Name_Discriminant_Check             : constant Name_Id := N + 441;
-   Name_Division_Check                 : constant Name_Id := N + 442;
-   Name_Elaboration_Check              : constant Name_Id := N + 443;
-   Name_Index_Check                    : constant Name_Id := N + 444;
-   Name_Length_Check                   : constant Name_Id := N + 445;
-   Name_Overflow_Check                 : constant Name_Id := N + 446;
-   Name_Range_Check                    : constant Name_Id := N + 447;
-   Name_Storage_Check                  : constant Name_Id := N + 448;
-   Name_Tag_Check                      : constant Name_Id := N + 449;
-   Name_All_Checks                     : constant Name_Id := N + 450;
-   Last_Check_Name                     : constant Name_Id := N + 450;
+   First_Check_Name                    : constant Name_Id := N + 440;
+   Name_Access_Check                   : constant Name_Id := N + 440;
+   Name_Accessibility_Check            : constant Name_Id := N + 441;
+   Name_Discriminant_Check             : constant Name_Id := N + 442;
+   Name_Division_Check                 : constant Name_Id := N + 443;
+   Name_Elaboration_Check              : constant Name_Id := N + 444;
+   Name_Index_Check                    : constant Name_Id := N + 445;
+   Name_Length_Check                   : constant Name_Id := N + 446;
+   Name_Overflow_Check                 : constant Name_Id := N + 447;
+   Name_Range_Check                    : constant Name_Id := N + 448;
+   Name_Storage_Check                  : constant Name_Id := N + 449;
+   Name_Tag_Check                      : constant Name_Id := N + 450;
+   Name_All_Checks                     : constant Name_Id := N + 451;
+   Last_Check_Name                     : constant Name_Id := N + 451;
 
    --  Names corresponding to reserved keywords, excluding those already
    --  declared in the attribute list (Access, Delta, Digits, Range).
 
-   Name_Abort                          : constant Name_Id := N + 451;
-   Name_Abs                            : constant Name_Id := N + 452;
-   Name_Accept                         : constant Name_Id := N + 453;
-   Name_And                            : constant Name_Id := N + 454;
-   Name_All                            : constant Name_Id := N + 455;
-   Name_Array                          : constant Name_Id := N + 456;
-   Name_At                             : constant Name_Id := N + 457;
-   Name_Begin                          : constant Name_Id := N + 458;
-   Name_Body                           : constant Name_Id := N + 459;
-   Name_Case                           : constant Name_Id := N + 460;
-   Name_Constant                       : constant Name_Id := N + 461;
-   Name_Declare                        : constant Name_Id := N + 462;
-   Name_Delay                          : constant Name_Id := N + 463;
-   Name_Do                             : constant Name_Id := N + 464;
-   Name_Else                           : constant Name_Id := N + 465;
-   Name_Elsif                          : constant Name_Id := N + 466;
-   Name_End                            : constant Name_Id := N + 467;
-   Name_Entry                          : constant Name_Id := N + 468;
-   Name_Exception                      : constant Name_Id := N + 469;
-   Name_Exit                           : constant Name_Id := N + 470;
-   Name_For                            : constant Name_Id := N + 471;
-   Name_Function                       : constant Name_Id := N + 472;
-   Name_Generic                        : constant Name_Id := N + 473;
-   Name_Goto                           : constant Name_Id := N + 474;
-   Name_If                             : constant Name_Id := N + 475;
-   Name_In                             : constant Name_Id := N + 476;
-   Name_Is                             : constant Name_Id := N + 477;
-   Name_Limited                        : constant Name_Id := N + 478;
-   Name_Loop                           : constant Name_Id := N + 479;
-   Name_Mod                            : constant Name_Id := N + 480;
-   Name_New                            : constant Name_Id := N + 481;
-   Name_Not                            : constant Name_Id := N + 482;
-   Name_Null                           : constant Name_Id := N + 483;
-   Name_Of                             : constant Name_Id := N + 484;
-   Name_Or                             : constant Name_Id := N + 485;
-   Name_Others                         : constant Name_Id := N + 486;
-   Name_Out                            : constant Name_Id := N + 487;
-   Name_Package                        : constant Name_Id := N + 488;
-   Name_Pragma                         : constant Name_Id := N + 489;
-   Name_Private                        : constant Name_Id := N + 490;
-   Name_Procedure                      : constant Name_Id := N + 491;
-   Name_Raise                          : constant Name_Id := N + 492;
-   Name_Record                         : constant Name_Id := N + 493;
-   Name_Rem                            : constant Name_Id := N + 494;
-   Name_Renames                        : constant Name_Id := N + 495;
-   Name_Return                         : constant Name_Id := N + 496;
-   Name_Reverse                        : constant Name_Id := N + 497;
-   Name_Select                         : constant Name_Id := N + 498;
-   Name_Separate                       : constant Name_Id := N + 499;
-   Name_Subtype                        : constant Name_Id := N + 500;
-   Name_Task                           : constant Name_Id := N + 501;
-   Name_Terminate                      : constant Name_Id := N + 502;
-   Name_Then                           : constant Name_Id := N + 503;
-   Name_Type                           : constant Name_Id := N + 504;
-   Name_Use                            : constant Name_Id := N + 505;
-   Name_When                           : constant Name_Id := N + 506;
-   Name_While                          : constant Name_Id := N + 507;
-   Name_With                           : constant Name_Id := N + 508;
-   Name_Xor                            : constant Name_Id := N + 509;
+   Name_Abort                          : constant Name_Id := N + 452;
+   Name_Abs                            : constant Name_Id := N + 453;
+   Name_Accept                         : constant Name_Id := N + 454;
+   Name_And                            : constant Name_Id := N + 455;
+   Name_All                            : constant Name_Id := N + 456;
+   Name_Array                          : constant Name_Id := N + 457;
+   Name_At                             : constant Name_Id := N + 458;
+   Name_Begin                          : constant Name_Id := N + 459;
+   Name_Body                           : constant Name_Id := N + 460;
+   Name_Case                           : constant Name_Id := N + 461;
+   Name_Constant                       : constant Name_Id := N + 462;
+   Name_Declare                        : constant Name_Id := N + 463;
+   Name_Delay                          : constant Name_Id := N + 464;
+   Name_Do                             : constant Name_Id := N + 465;
+   Name_Else                           : constant Name_Id := N + 466;
+   Name_Elsif                          : constant Name_Id := N + 467;
+   Name_End                            : constant Name_Id := N + 468;
+   Name_Entry                          : constant Name_Id := N + 469;
+   Name_Exception                      : constant Name_Id := N + 470;
+   Name_Exit                           : constant Name_Id := N + 471;
+   Name_For                            : constant Name_Id := N + 472;
+   Name_Function                       : constant Name_Id := N + 473;
+   Name_Generic                        : constant Name_Id := N + 474;
+   Name_Goto                           : constant Name_Id := N + 475;
+   Name_If                             : constant Name_Id := N + 476;
+   Name_In                             : constant Name_Id := N + 477;
+   Name_Is                             : constant Name_Id := N + 478;
+   Name_Limited                        : constant Name_Id := N + 479;
+   Name_Loop                           : constant Name_Id := N + 480;
+   Name_Mod                            : constant Name_Id := N + 481;
+   Name_New                            : constant Name_Id := N + 482;
+   Name_Not                            : constant Name_Id := N + 483;
+   Name_Null                           : constant Name_Id := N + 484;
+   Name_Of                             : constant Name_Id := N + 485;
+   Name_Or                             : constant Name_Id := N + 486;
+   Name_Others                         : constant Name_Id := N + 487;
+   Name_Out                            : constant Name_Id := N + 488;
+   Name_Package                        : constant Name_Id := N + 489;
+   Name_Pragma                         : constant Name_Id := N + 490;
+   Name_Private                        : constant Name_Id := N + 491;
+   Name_Procedure                      : constant Name_Id := N + 492;
+   Name_Raise                          : constant Name_Id := N + 493;
+   Name_Record                         : constant Name_Id := N + 494;
+   Name_Rem                            : constant Name_Id := N + 495;
+   Name_Renames                        : constant Name_Id := N + 496;
+   Name_Return                         : constant Name_Id := N + 497;
+   Name_Reverse                        : constant Name_Id := N + 498;
+   Name_Select                         : constant Name_Id := N + 499;
+   Name_Separate                       : constant Name_Id := N + 500;
+   Name_Subtype                        : constant Name_Id := N + 501;
+   Name_Task                           : constant Name_Id := N + 502;
+   Name_Terminate                      : constant Name_Id := N + 503;
+   Name_Then                           : constant Name_Id := N + 504;
+   Name_Type                           : constant Name_Id := N + 505;
+   Name_Use                            : constant Name_Id := N + 506;
+   Name_When                           : constant Name_Id := N + 507;
+   Name_While                          : constant Name_Id := N + 508;
+   Name_With                           : constant Name_Id := N + 509;
+   Name_Xor                            : constant Name_Id := N + 510;
 
    --  Names of intrinsic subprograms
 
    --  Note: Asm is missing from this list, since Asm is a legitimate
    --  convention name. So is To_Adress, which is a GNAT attribute.
 
-   First_Intrinsic_Name                : constant Name_Id := N + 510;
-   Name_Divide                         : constant Name_Id := N + 510;
-   Name_Enclosing_Entity               : constant Name_Id := N + 511;
-   Name_Exception_Information          : constant Name_Id := N + 512;
-   Name_Exception_Message              : constant Name_Id := N + 513;
-   Name_Exception_Name                 : constant Name_Id := N + 514;
-   Name_File                           : constant Name_Id := N + 515;
-   Name_Import_Address                 : constant Name_Id := N + 516;
-   Name_Import_Largest_Value           : constant Name_Id := N + 517;
-   Name_Import_Value                   : constant Name_Id := N + 518;
-   Name_Is_Negative                    : constant Name_Id := N + 519;
-   Name_Line                           : constant Name_Id := N + 520;
-   Name_Rotate_Left                    : constant Name_Id := N + 521;
-   Name_Rotate_Right                   : constant Name_Id := N + 522;
-   Name_Shift_Left                     : constant Name_Id := N + 523;
-   Name_Shift_Right                    : constant Name_Id := N + 524;
-   Name_Shift_Right_Arithmetic         : constant Name_Id := N + 525;
-   Name_Source_Location                : constant Name_Id := N + 526;
-   Name_Unchecked_Conversion           : constant Name_Id := N + 527;
-   Name_Unchecked_Deallocation         : constant Name_Id := N + 528;
-   Name_To_Pointer                     : constant Name_Id := N + 529;
-   Last_Intrinsic_Name                 : constant Name_Id := N + 529;
+   First_Intrinsic_Name                : constant Name_Id := N + 511;
+   Name_Divide                         : constant Name_Id := N + 511;
+   Name_Enclosing_Entity               : constant Name_Id := N + 512;
+   Name_Exception_Information          : constant Name_Id := N + 513;
+   Name_Exception_Message              : constant Name_Id := N + 514;
+   Name_Exception_Name                 : constant Name_Id := N + 515;
+   Name_File                           : constant Name_Id := N + 516;
+   Name_Import_Address                 : constant Name_Id := N + 517;
+   Name_Import_Largest_Value           : constant Name_Id := N + 518;
+   Name_Import_Value                   : constant Name_Id := N + 519;
+   Name_Is_Negative                    : constant Name_Id := N + 520;
+   Name_Line                           : constant Name_Id := N + 521;
+   Name_Rotate_Left                    : constant Name_Id := N + 522;
+   Name_Rotate_Right                   : constant Name_Id := N + 523;
+   Name_Shift_Left                     : constant Name_Id := N + 524;
+   Name_Shift_Right                    : constant Name_Id := N + 525;
+   Name_Shift_Right_Arithmetic         : constant Name_Id := N + 526;
+   Name_Source_Location                : constant Name_Id := N + 527;
+   Name_Unchecked_Conversion           : constant Name_Id := N + 528;
+   Name_Unchecked_Deallocation         : constant Name_Id := N + 529;
+   Name_To_Pointer                     : constant Name_Id := N + 530;
+   Last_Intrinsic_Name                 : constant Name_Id := N + 530;
 
    --  Reserved words used only in Ada 95
 
-   First_95_Reserved_Word              : constant Name_Id := N + 530;
-   Name_Abstract                       : constant Name_Id := N + 530;
-   Name_Aliased                        : constant Name_Id := N + 531;
-   Name_Protected                      : constant Name_Id := N + 532;
-   Name_Until                          : constant Name_Id := N + 533;
-   Name_Requeue                        : constant Name_Id := N + 534;
-   Name_Tagged                         : constant Name_Id := N + 535;
-   Last_95_Reserved_Word               : constant Name_Id := N + 535;
+   First_95_Reserved_Word              : constant Name_Id := N + 531;
+   Name_Abstract                       : constant Name_Id := N + 531;
+   Name_Aliased                        : constant Name_Id := N + 532;
+   Name_Protected                      : constant Name_Id := N + 533;
+   Name_Until                          : constant Name_Id := N + 534;
+   Name_Requeue                        : constant Name_Id := N + 535;
+   Name_Tagged                         : constant Name_Id := N + 536;
+   Last_95_Reserved_Word               : constant Name_Id := N + 536;
 
    subtype Ada_95_Reserved_Words is
      Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word;
 
    --  Miscellaneous names used in semantic checking
 
-   Name_Raise_Exception                : constant Name_Id := N + 536;
+   Name_Raise_Exception                : constant Name_Id := N + 537;
 
    --  Additional reserved words in GNAT Project Files
    --  Note that Name_External is already previously declared
 
-   Name_Binder                         : constant Name_Id := N + 537;
-   Name_Body_Suffix                    : constant Name_Id := N + 538;
-   Name_Builder                        : constant Name_Id := N + 539;
-   Name_Compiler                       : constant Name_Id := N + 540;
-   Name_Cross_Reference                : constant Name_Id := N + 541;
-   Name_Default_Switches               : constant Name_Id := N + 542;
-   Name_Exec_Dir                       : constant Name_Id := N + 543;
-   Name_Executable                     : constant Name_Id := N + 544;
-   Name_Executable_Suffix              : constant Name_Id := N + 545;
-   Name_Extends                        : constant Name_Id := N + 546;
-   Name_Finder                         : constant Name_Id := N + 547;
-   Name_Global_Configuration_Pragmas   : constant Name_Id := N + 548;
-   Name_Gnatls                         : constant Name_Id := N + 549;
-   Name_Gnatstub                       : constant Name_Id := N + 550;
-   Name_Implementation                 : constant Name_Id := N + 551;
-   Name_Implementation_Exceptions      : constant Name_Id := N + 552;
-   Name_Implementation_Suffix          : constant Name_Id := N + 553;
-   Name_Languages                      : constant Name_Id := N + 554;
-   Name_Library_Dir                    : constant Name_Id := N + 555;
-   Name_Library_Auto_Init              : constant Name_Id := N + 556;
-   Name_Library_GCC                    : constant Name_Id := N + 557;
-   Name_Library_Interface              : constant Name_Id := N + 558;
-   Name_Library_Kind                   : constant Name_Id := N + 559;
-   Name_Library_Name                   : constant Name_Id := N + 560;
-   Name_Library_Options                : constant Name_Id := N + 561;
-   Name_Library_Reference_Symbol_File  : constant Name_Id := N + 562;
-   Name_Library_Src_Dir                : constant Name_Id := N + 563;
-   Name_Library_Symbol_File            : constant Name_Id := N + 564;
-   Name_Library_Symbol_Policy          : constant Name_Id := N + 565;
-   Name_Library_Version                : constant Name_Id := N + 566;
-   Name_Linker                         : constant Name_Id := N + 567;
-   Name_Local_Configuration_Pragmas    : constant Name_Id := N + 568;
-   Name_Locally_Removed_Files          : constant Name_Id := N + 569;
-   Name_Naming                         : constant Name_Id := N + 570;
-   Name_Object_Dir                     : constant Name_Id := N + 571;
-   Name_Pretty_Printer                 : constant Name_Id := N + 572;
-   Name_Project                        : constant Name_Id := N + 573;
-   Name_Separate_Suffix                : constant Name_Id := N + 574;
-   Name_Source_Dirs                    : constant Name_Id := N + 575;
-   Name_Source_Files                   : constant Name_Id := N + 576;
-   Name_Source_List_File               : constant Name_Id := N + 577;
-   Name_Spec                           : constant Name_Id := N + 578;
-   Name_Spec_Suffix                    : constant Name_Id := N + 579;
-   Name_Specification                  : constant Name_Id := N + 580;
-   Name_Specification_Exceptions       : constant Name_Id := N + 581;
-   Name_Specification_Suffix           : constant Name_Id := N + 582;
-   Name_Switches                       : constant Name_Id := N + 583;
+   Name_Binder                         : constant Name_Id := N + 538;
+   Name_Body_Suffix                    : constant Name_Id := N + 539;
+   Name_Builder                        : constant Name_Id := N + 540;
+   Name_Compiler                       : constant Name_Id := N + 541;
+   Name_Cross_Reference                : constant Name_Id := N + 542;
+   Name_Default_Switches               : constant Name_Id := N + 543;
+   Name_Exec_Dir                       : constant Name_Id := N + 544;
+   Name_Executable                     : constant Name_Id := N + 545;
+   Name_Executable_Suffix              : constant Name_Id := N + 546;
+   Name_Extends                        : constant Name_Id := N + 547;
+   Name_Finder                         : constant Name_Id := N + 548;
+   Name_Global_Configuration_Pragmas   : constant Name_Id := N + 549;
+   Name_Gnatls                         : constant Name_Id := N + 550;
+   Name_Gnatstub                       : constant Name_Id := N + 551;
+   Name_Implementation                 : constant Name_Id := N + 552;
+   Name_Implementation_Exceptions      : constant Name_Id := N + 553;
+   Name_Implementation_Suffix          : constant Name_Id := N + 554;
+   Name_Languages                      : constant Name_Id := N + 555;
+   Name_Library_Dir                    : constant Name_Id := N + 556;
+   Name_Library_Auto_Init              : constant Name_Id := N + 557;
+   Name_Library_GCC                    : constant Name_Id := N + 558;
+   Name_Library_Interface              : constant Name_Id := N + 559;
+   Name_Library_Kind                   : constant Name_Id := N + 560;
+   Name_Library_Name                   : constant Name_Id := N + 561;
+   Name_Library_Options                : constant Name_Id := N + 562;
+   Name_Library_Reference_Symbol_File  : constant Name_Id := N + 563;
+   Name_Library_Src_Dir                : constant Name_Id := N + 564;
+   Name_Library_Symbol_File            : constant Name_Id := N + 565;
+   Name_Library_Symbol_Policy          : constant Name_Id := N + 566;
+   Name_Library_Version                : constant Name_Id := N + 567;
+   Name_Linker                         : constant Name_Id := N + 568;
+   Name_Local_Configuration_Pragmas    : constant Name_Id := N + 569;
+   Name_Locally_Removed_Files          : constant Name_Id := N + 570;
+   Name_Naming                         : constant Name_Id := N + 571;
+   Name_Object_Dir                     : constant Name_Id := N + 572;
+   Name_Pretty_Printer                 : constant Name_Id := N + 573;
+   Name_Project                        : constant Name_Id := N + 574;
+   Name_Separate_Suffix                : constant Name_Id := N + 575;
+   Name_Source_Dirs                    : constant Name_Id := N + 576;
+   Name_Source_Files                   : constant Name_Id := N + 577;
+   Name_Source_List_File               : constant Name_Id := N + 578;
+   Name_Spec                           : constant Name_Id := N + 579;
+   Name_Spec_Suffix                    : constant Name_Id := N + 580;
+   Name_Specification                  : constant Name_Id := N + 581;
+   Name_Specification_Exceptions       : constant Name_Id := N + 582;
+   Name_Specification_Suffix           : constant Name_Id := N + 583;
+   Name_Switches                       : constant Name_Id := N + 584;
    --  Other miscellaneous names used in front end
 
-   Name_Unaligned_Valid                : constant Name_Id := N + 584;
+   Name_Unaligned_Valid                : constant Name_Id := N + 585;
 
    --  Mark last defined name for consistency check in Snames body
 
-   Last_Predefined_Name                : constant Name_Id := N + 584;
+   Last_Predefined_Name                : constant Name_Id := N + 585;
 
    subtype Any_Operator_Name is Name_Id range
      First_Operator_Name .. Last_Operator_Name;
Index: s-restri.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/s-restri.ads,v
retrieving revision 1.1
diff -u -p -r1.1 s-restri.ads
--- s-restri.ads	2 Feb 2004 12:32:00 -0000	1.1
+++ s-restri.ads	4 Feb 2004 09:48:41 -0000
@@ -39,7 +39,7 @@ package System.Restrictions is
    pragma Discard_Names;
    package Rident is new System.Rident;
 
-   Restrictions : Rident.Restrictions_Info;
+   Run_Time_Restrictions : Rident.Restrictions_Info;
 
    ------------------
    -- Subprograms --
Index: s-restri.adb
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/s-restri.adb,v
retrieving revision 1.1
diff -u -p -r1.1 s-restri.adb
--- s-restri.adb	2 Feb 2004 12:32:00 -0000	1.1
+++ s-restri.adb	4 Feb 2004 09:48:41 -0000
@@ -40,9 +40,9 @@ package body System.Restrictions is
 
    function Abort_Allowed return Boolean is
    begin
-      return Restrictions.Violated (No_Abort_Statements)
+      return Run_Time_Restrictions.Violated (No_Abort_Statements)
                or else
-             Restrictions.Violated (Max_Asynchronous_Select_Nesting);
+             Run_Time_Restrictions.Violated (Max_Asynchronous_Select_Nesting);
    end Abort_Allowed;
 
    ---------------------
@@ -51,12 +51,98 @@ package body System.Restrictions is
 
    function Tasking_Allowed return Boolean is
    begin
-      return Restrictions.Violated (Max_Tasks)
+      return Run_Time_Restrictions.Violated (Max_Tasks)
                or else
-             Restrictions.Violated (No_Tasking);
+             Run_Time_Restrictions.Violated (No_Tasking);
    end Tasking_Allowed;
 
+--  Package elaboration code (acquire restrictions)
+
 begin
-   null;
+   Acquire_Restrictions : declare
+
+      subtype Big_String is String (Positive);
+      type Big_String_Ptr is access all Big_String;
+
+      RString : Big_String_Ptr;
+      pragma Import (C, RString, "__gl_restrictions");
+
+      P : Natural := 1;
+      --  Pointer to scan string
+
+      C : Character;
+      --  Next character from string
+
+      function Get_Char return Character;
+      --  Get next character from string
+
+      function Get_Natural return Natural;
+      --  Scan out natural value known to be in range, updating P past it
+
+      --------------
+      -- Get_Char --
+      --------------
+
+      function Get_Char return Character is
+      begin
+         P := P + 1;
+         return RString (P - 1);
+      end Get_Char;
+
+      -----------------
+      -- Get_Natural --
+      -----------------
+
+      function Get_Natural return Natural is
+         N : Natural := 0;
+
+      begin
+         while RString (P) in '0' .. '9' loop
+            N := N * 10 + (Character'Pos (Get_Char) - Character'Pos ('0'));
+         end loop;
+
+         return N;
+      end Get_Natural;
+
+   --  Start of processing for Acquire_Restrictions
+
+   begin
+      --  Acquire data corresponding to first R line
+
+      for R in All_Boolean_Restrictions loop
+         C := Get_Char;
+
+         if C = 'v' then
+            Run_Time_Restrictions.Violated (R) := True;
+
+         elsif C = 'r' then
+            Run_Time_Restrictions.Set (R) := True;
+         end if;
+      end loop;
+
+      --  Acquire data corresponding to second R line
+
+      for RP in All_Parameter_Restrictions loop
+
+         --  Acquire restrictions pragma information
+
+         if Get_Char = 'r' then
+            Run_Time_Restrictions.Set (RP) := True;
+            Run_Time_Restrictions.Value (RP) := Get_Natural;
+         end if;
+
+         --  Acquire restrictions violations information
+
+         if Get_Char = 'v' then
+            Run_Time_Restrictions.Violated (RP) := True;
+            Run_Time_Restrictions.Count (RP) := Get_Natural;
+
+            if RString (P) = '+' then
+               Run_Time_Restrictions.Unknown (RP) := True;
+               P := P + 1;
+            end if;
+         end if;
+      end loop;
+   end Acquire_Restrictions;
 end System.Restrictions;
 
Index: s-rident.ads
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ada/s-rident.ads,v
retrieving revision 1.3
diff -u -p -r1.3 s-rident.ads
--- s-rident.ads	2 Feb 2004 12:32:01 -0000	1.3
+++ s-rident.ads	4 Feb 2004 09:48:41 -0000
@@ -97,7 +97,7 @@ package System.Rident is
       No_Standard_Storage_Pools,               -- GNAT
       No_Streams,                              -- GNAT
       No_Task_Allocators,                      -- (RM D.7(7))
-      No_Task_Attributes,                      -- GNAT
+      No_Task_Attributes_Package,              -- GNAT
       No_Task_Hierarchy,                       -- (RM D.7(3), H.4(3))
       No_Task_Termination,                     -- GNAT (Ravenscar)
       No_Tasking,                              -- GNAT
@@ -154,8 +154,9 @@ package System.Rident is
 
    --  Synonyms permitted for historical purposes of compatibility
 
-   --   No_Requeue   synonym for No_Requeue_Statements
-   --   No_Tasking   synonym for Max_Tasks => 0
+   --   No_Requeue         synonym for No_Requeue_Statements
+   --   No_Tasking         synonym for Max_Tasks => 0
+   --   No_Task_Attributes synonym for No_Task_Attributes_Package
 
    subtype All_Restrictions is Restriction_Id range
      Boolean_Entry_Barriers .. Max_Storage_At_Blocking;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]