[multiple changes]

2017-01-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_attr.adb (Rewrite_Stream_Proc_Call): Use
	an unchecked type conversion when performing a view conversion
	to/from a private type. In all other cases use a regular type
	conversion to ensure that any relevant checks are properly
	installed.

2017-01-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* sem_prag.adb, sem_ch8.adb: Minor reformatting.

2017-01-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_case.adb (Explain_Non_Static_Bound): Suppress cascaded
	error on case expression that is an entity, when coverage is
	incomplete and entity has a static value obtained by local
	propagation.
	(Handle_Static_Predicate): New procedure, subsidiary of
	Check_Choices, to handle case alternatives that are either
	subtype names or subtype indications involving subtypes that
	have static predicates.

2017-01-06  Thomas Quinot  <quinot@adacore.com>

	* s-oscons-tmplt.c, g-socket.adb, g-socket.ads, g-sothco.ads:
	(GNAT.Socket): Add support for Busy_Polling and Generic_Option

2017-01-06  Bob Duff  <duff@adacore.com>

	* sem_elab.adb (Activate_Elaborate_All_Desirable): Don't add
	Elaborate_All(P) to P itself. That could happen in obscure cases,
	and always introduced a cycle (P body must be elaborated before
	P body).
	* lib-writ.ads: Comment clarification.
	* ali-util.ads: Minor comment fix.
	* ali.adb: Minor reformatting.

2017-01-06  Tristan Gingold  <gingold@adacore.com>

	* a-exexpr-gcc.adb: Improve comment.

From-SVN: r244125
This commit is contained in:
Arnaud Charlet 2017-01-06 11:28:06 +01:00
parent 43934e8c1a
commit ed3fe8cc27
14 changed files with 267 additions and 95 deletions

View File

@ -1,3 +1,45 @@
2017-01-06 Hristian Kirtchev <kirtchev@adacore.com>
* exp_attr.adb (Rewrite_Stream_Proc_Call): Use
an unchecked type conversion when performing a view conversion
to/from a private type. In all other cases use a regular type
conversion to ensure that any relevant checks are properly
installed.
2017-01-06 Hristian Kirtchev <kirtchev@adacore.com>
* sem_prag.adb, sem_ch8.adb: Minor reformatting.
2017-01-06 Ed Schonberg <schonberg@adacore.com>
* sem_case.adb (Explain_Non_Static_Bound): Suppress cascaded
error on case expression that is an entity, when coverage is
incomplete and entity has a static value obtained by local
propagation.
(Handle_Static_Predicate): New procedure, subsidiary of
Check_Choices, to handle case alternatives that are either
subtype names or subtype indications involving subtypes that
have static predicates.
2017-01-06 Thomas Quinot <quinot@adacore.com>
* s-oscons-tmplt.c, g-socket.adb, g-socket.ads, g-sothco.ads:
(GNAT.Socket): Add support for Busy_Polling and Generic_Option
2017-01-06 Bob Duff <duff@adacore.com>
* sem_elab.adb (Activate_Elaborate_All_Desirable): Don't add
Elaborate_All(P) to P itself. That could happen in obscure cases,
and always introduced a cycle (P body must be elaborated before
P body).
* lib-writ.ads: Comment clarification.
* ali-util.ads: Minor comment fix.
* ali.adb: Minor reformatting.
2017-01-06 Tristan Gingold <gingold@adacore.com>
* a-exexpr-gcc.adb: Improve comment.
2017-01-03 James Cowgill <James.Cowgill@imgtec.com>
* s-linux-mips.ads: Use correct signal and errno constants.

View File

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1992-2013, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2016, 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- --
@ -115,7 +115,8 @@ package body Exception_Propagation is
GCC_Exception : not null GCC_Exception_Access);
pragma Export
(C, Set_Exception_Parameter, "__gnat_set_exception_parameter");
-- Called inserted by gigi to initialize the exception parameter
-- Called inserted by gigi to set the exception choice parameter from the
-- gcc occurrence.
procedure Set_Foreign_Occurrence (Excep : EOA; Mo : System.Address);
-- Utility routine to initialize occurrence Excep from a foreign exception

View File

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 1992-2013, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2016, 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- --
@ -24,7 +24,7 @@
------------------------------------------------------------------------------
-- This child unit provides utility data structures and procedures used
-- for manipulation of ALI data by the gnatbind and gnatmake.
-- for manipulation of ALI data by gnatbind and gnatmake.
package ALI.Util is

View File

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2016, 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- --
@ -2056,8 +2056,7 @@ package body ALI is
-- Store AD indication unless ignore required
if not Ignore_ED then
Withs.Table (Withs.Last).Elab_All_Desirable :=
True;
Withs.Table (Withs.Last).Elab_All_Desirable := True;
end if;
elsif Nextc = 'E' then

View File

@ -1568,9 +1568,10 @@ package body Exp_Attr is
procedure Rewrite_Stream_Proc_Call (Pname : Entity_Id) is
Item : constant Node_Id := Next (First (Exprs));
Item_Typ : constant Entity_Id := Etype (Item);
Formal : constant Entity_Id := Next_Formal (First_Formal (Pname));
Formal_Typ : constant Entity_Id := Etype (Formal);
Is_Written : constant Boolean := (Ekind (Formal) /= E_In_Parameter);
Is_Written : constant Boolean := Ekind (Formal) /= E_In_Parameter;
begin
-- The expansion depends on Item, the second actual, which is
@ -1583,7 +1584,7 @@ package body Exp_Attr is
if Nkind (Item) = N_Indexed_Component
and then Is_Packed (Base_Type (Etype (Prefix (Item))))
and then Base_Type (Etype (Item)) /= Base_Type (Formal_Typ)
and then Base_Type (Item_Typ) /= Base_Type (Formal_Typ)
and then Is_Written
then
declare
@ -1595,23 +1596,22 @@ package body Exp_Attr is
Decl :=
Make_Object_Declaration (Loc,
Defining_Identifier => Temp,
Object_Definition =>
New_Occurrence_Of (Formal_Typ, Loc));
Object_Definition => New_Occurrence_Of (Formal_Typ, Loc));
Set_Etype (Temp, Formal_Typ);
Assn :=
Make_Assignment_Statement (Loc,
Name => New_Copy_Tree (Item),
Name => New_Copy_Tree (Item),
Expression =>
Unchecked_Convert_To
(Etype (Item), New_Occurrence_Of (Temp, Loc)));
(Item_Typ, New_Occurrence_Of (Temp, Loc)));
Rewrite (Item, New_Occurrence_Of (Temp, Loc));
Insert_Actions (N,
New_List (
Decl,
Make_Procedure_Call_Statement (Loc,
Name => New_Occurrence_Of (Pname, Loc),
Name => New_Occurrence_Of (Pname, Loc),
Parameter_Associations => Exprs),
Assn));
@ -1626,17 +1626,25 @@ package body Exp_Attr is
-- operation is not inherited), we are all set, and can use the
-- argument unchanged.
-- For all other cases we do an unchecked conversion of the second
-- parameter to the type of the formal of the procedure we are
-- calling. This deals with the private type cases, and with going
-- to the root type as required in elementary type case.
if not Is_Class_Wide_Type (Entity (Pref))
and then not Is_Class_Wide_Type (Etype (Item))
and then Base_Type (Etype (Item)) /= Base_Type (Formal_Typ)
and then Base_Type (Item_Typ) /= Base_Type (Formal_Typ)
then
Rewrite (Item,
Unchecked_Convert_To (Formal_Typ, Relocate_Node (Item)));
-- Perform a view conversion when either the argument or the
-- formal parameter are of a private type.
if Is_Private_Type (Formal_Typ)
or else Is_Private_Type (Item_Typ)
then
Rewrite (Item,
Unchecked_Convert_To (Formal_Typ, Relocate_Node (Item)));
-- Otherwise perform a regular type conversion to ensure that all
-- relevant checks are installed.
else
Rewrite (Item, Convert_To (Formal_Typ, Relocate_Node (Item)));
end if;
-- For untagged derived types set Assignment_OK, to prevent
-- copies from being created when the unchecked conversion
@ -1665,7 +1673,7 @@ package body Exp_Attr is
Rewrite (N,
Make_Procedure_Call_Statement (Loc,
Name => New_Occurrence_Of (Pname, Loc),
Name => New_Occurrence_Of (Pname, Loc),
Parameter_Associations => Exprs));
Analyze (N);

View File

@ -50,8 +50,6 @@ package body GNAT.Sockets is
package C renames Interfaces.C;
use type C.int;
ENOERROR : constant := 0;
Netdb_Buffer_Size : constant := SOSC.Need_Netdb_Buffer * 1024;
@ -82,7 +80,7 @@ package body GNAT.Sockets is
(Non_Blocking_IO => SOSC.FIONBIO,
N_Bytes_To_Read => SOSC.FIONREAD);
Options : constant array (Option_Name) of C.int :=
Options : constant array (Specific_Option_Name) of C.int :=
(Keep_Alive => SOSC.SO_KEEPALIVE,
Reuse_Address => SOSC.SO_REUSEADDR,
Broadcast => SOSC.SO_BROADCAST,
@ -98,7 +96,8 @@ package body GNAT.Sockets is
Multicast_Loop => SOSC.IP_MULTICAST_LOOP,
Receive_Packet_Info => SOSC.IP_PKTINFO,
Send_Timeout => SOSC.SO_SNDTIMEO,
Receive_Timeout => SOSC.SO_RCVTIMEO);
Receive_Timeout => SOSC.SO_RCVTIMEO,
Busy_Polling => SOSC.SO_BUSY_POLL);
-- ??? Note: for OpenSolaris, Receive_Packet_Info should be IP_RECVPKTINFO,
-- but for Linux compatibility this constant is the same as IP_PKTINFO.
@ -1140,9 +1139,10 @@ package body GNAT.Sockets is
-----------------------
function Get_Socket_Option
(Socket : Socket_Type;
Level : Level_Type := Socket_Level;
Name : Option_Name) return Option_Type
(Socket : Socket_Type;
Level : Level_Type := Socket_Level;
Name : Option_Name;
Optname : Interfaces.C.int := -1) return Option_Type
is
use SOSC;
use type C.unsigned_char;
@ -1155,8 +1155,19 @@ package body GNAT.Sockets is
Add : System.Address;
Res : C.int;
Opt : Option_Type (Name);
Onm : Interfaces.C.int;
begin
if Name in Specific_Option_Name then
Onm := Options (Name);
elsif Optname = -1 then
raise Socket_Error with "optname must be specified";
else
Onm := Optname;
end if;
case Name is
when Multicast_Loop |
Multicast_TTL |
@ -1164,14 +1175,16 @@ package body GNAT.Sockets is
Len := V1'Size / 8;
Add := V1'Address;
when Keep_Alive |
Reuse_Address |
Broadcast |
No_Delay |
Send_Buffer |
Receive_Buffer |
Multicast_If |
Error =>
when Generic_Option |
Keep_Alive |
Reuse_Address |
Broadcast |
No_Delay |
Send_Buffer |
Receive_Buffer |
Multicast_If |
Error |
Busy_Polling =>
Len := V4'Size / 8;
Add := V4'Address;
@ -1203,7 +1216,7 @@ package body GNAT.Sockets is
C_Getsockopt
(C.int (Socket),
Levels (Level),
Options (Name),
Onm,
Add, Len'Access);
if Res = Failure then
@ -1211,12 +1224,19 @@ package body GNAT.Sockets is
end if;
case Name is
when Keep_Alive |
Reuse_Address |
Broadcast |
No_Delay =>
when Generic_Option =>
Opt.Optname := Onm;
Opt.Optval := V4;
when Keep_Alive |
Reuse_Address |
Broadcast |
No_Delay =>
Opt.Enabled := (V4 /= 0);
when Busy_Polling =>
Opt.Microseconds := Natural (V4);
when Linger =>
Opt.Enabled := (V8 (V8'First) /= 0);
Opt.Seconds := Natural (V8 (V8'Last));
@ -2267,17 +2287,28 @@ package body GNAT.Sockets is
Len : C.int;
Add : System.Address := Null_Address;
Res : C.int;
Onm : C.int;
begin
case Option.Name is
when Keep_Alive |
Reuse_Address |
Broadcast |
No_Delay =>
when Generic_Option =>
V4 := Option.Optval;
Len := V4'Size / 8;
Add := V4'Address;
when Keep_Alive |
Reuse_Address |
Broadcast |
No_Delay =>
V4 := C.int (Boolean'Pos (Option.Enabled));
Len := V4'Size / 8;
Add := V4'Address;
when Busy_Polling =>
V4 := C.int (Option.Microseconds);
Len := V4'Size / 8;
Add := V4'Address;
when Linger =>
V8 (V8'First) := C.int (Boolean'Pos (Option.Enabled));
V8 (V8'Last) := C.int (Option.Seconds);
@ -2347,10 +2378,20 @@ package body GNAT.Sockets is
end case;
if Option.Name in Specific_Option_Name then
Onm := Options (Option.Name);
elsif Option.Optname = -1 then
raise Socket_Error with "optname must be specified";
else
Onm := Option.Optname;
end if;
Res := C_Setsockopt
(C.int (Socket),
Levels (Level),
Options (Option.Name),
Onm,
Add, Len);
if Res = Failure then

View File

@ -373,6 +373,9 @@ package GNAT.Sockets is
-- entities declared therein are not meant for direct access by users,
-- including through this renaming.
use type Interfaces.C.int;
-- Need visibility on "-" operator so that we can write -1
procedure Initialize;
pragma Obsolescent
(Entity => Initialize,
@ -676,7 +679,8 @@ package GNAT.Sockets is
-- a boolean to enable or disable this option.
type Option_Name is
(Keep_Alive, -- Enable sending of keep-alive messages
(Generic_Option,
Keep_Alive, -- Enable sending of keep-alive messages
Reuse_Address, -- Allow bind to reuse local address
Broadcast, -- Enable datagram sockets to recv/send broadcasts
Send_Buffer, -- Set/get the maximum socket send buffer in bytes
@ -691,10 +695,17 @@ package GNAT.Sockets is
Multicast_Loop, -- Sent multicast packets are looped to local socket
Receive_Packet_Info, -- Receive low level packet info as ancillary data
Send_Timeout, -- Set timeout value for output
Receive_Timeout); -- Set timeout value for input
Receive_Timeout, -- Set timeout value for input
Busy_Polling); -- Set busy polling mode
subtype Specific_Option_Name is
Option_Name range Keep_Alive .. Option_Name'Last;
type Option_Type (Name : Option_Name := Keep_Alive) is record
case Name is
when Generic_Option =>
Optname : Interfaces.C.int := -1;
Optval : Interfaces.C.int;
when Keep_Alive |
Reuse_Address |
Broadcast |
@ -711,6 +722,9 @@ package GNAT.Sockets is
null;
end case;
when Busy_Polling =>
Microseconds : Natural;
when Send_Buffer |
Receive_Buffer =>
Size : Natural;
@ -876,10 +890,12 @@ package GNAT.Sockets is
-- No_Sock_Addr on error (e.g. socket closed or not locally bound).
function Get_Socket_Option
(Socket : Socket_Type;
Level : Level_Type := Socket_Level;
Name : Option_Name) return Option_Type;
-- Get the options associated with a socket. Raises Socket_Error on error
(Socket : Socket_Type;
Level : Level_Type := Socket_Level;
Name : Option_Name;
Optname : Interfaces.C.int := -1) return Option_Type;
-- Get the options associated with a socket. Raises Socket_Error on error.
-- Optname identifies specific option when Name is Generic_Option.
procedure Listen_Socket
(Socket : Socket_Type;

View File

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 2008-2014, AdaCore --
-- Copyright (C) 2008-2016, AdaCore --
-- --
-- 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- --
@ -41,9 +41,6 @@ package GNAT.Sockets.Thin_Common is
package C renames Interfaces.C;
use type C.int;
-- This is so we can declare the Failure constant below
Success : constant C.int := 0;
Failure : constant C.int := -1;

View File

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2016, 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- --
@ -649,8 +649,10 @@ package Lib.Writ is
-- AD Elaborate_All_Desirable set for this unit, which means that
-- there is no Elaborate_All, but the analysis suggests that
-- Program_Error may be raised if the Elaborate_All conditions
-- cannot be satisfied. The binder will attempt to treat AD as
-- EA if it can.
-- cannot be satisfied. In dynamic elaboration mode, the binder
-- will attempt to treat AD as EA if it can. In static
-- elaboration mode, the binder will treat AD as EA, even if it
-- introduces cycles.
-- The parameter source-name and lib-name are omitted for the case of a
-- generic unit compiled with earlier versions of GNAT which did not

View File

@ -7,7 +7,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 2000-2015, Free Software Foundation, Inc. --
-- Copyright (C) 2000-2016, 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- --
@ -1264,6 +1264,11 @@ CND(SO_RCVTIMEO, "Reception timeout")
#endif
CND(SO_ERROR, "Get/clear error status")
#ifndef SO_BUSY_POLL
# define SO_BUSY_POLL -1
#endif
CND(SO_BUSY_POLL, "Busy polling")
#ifndef IP_MULTICAST_IF
# define IP_MULTICAST_IF -1
#endif

View File

@ -628,9 +628,11 @@ package body Sem_Case is
-- Otherwise the expression is not static, even if the bounds of the
-- type are, or else there are missing alternatives. If both, the
-- additional information may be redundant but harmless.
-- additional information may be redundant but harmless. Examine
-- whether original node is an entity, because it may have been
-- constant-folded to a literal if value is known.
elsif not Is_Entity_Name (Expr) then
elsif not Is_Entity_Name (Original_Node (Expr)) then
Error_Msg_N
("subtype of expression is not static, "
& "alternatives must cover base type!", Expr);
@ -1362,6 +1364,15 @@ package body Sem_Case is
-- later entry into the choices table so that they can be sorted
-- later on.
procedure Handle_Static_Predicate
(Typ : Entity_Id;
Lo : Node_Id;
Hi : Node_Id);
-- If the type of the alternative has predicates, we must examine
-- each subset of the predicate rather than the bounds of the
-- type itself. This is relevant when the choice is a subtype mark
-- or a subtype indication.
-----------
-- Check --
-----------
@ -1474,6 +1485,56 @@ package body Sem_Case is
Num_Choices := Num_Choices + 1;
end Check;
-----------------------------
-- Handle_Static_Predicate --
-----------------------------
procedure Handle_Static_Predicate
(Typ : Entity_Id;
Lo : Node_Id;
Hi : Node_Id)
is
P : Node_Id;
C : Node_Id;
begin
-- Loop through entries in predicate list, checking each entry.
-- Note that if the list is empty, corresponding to a False
-- predicate, then no choices are checked. If the choice comes
-- from a subtype indication, the given range may have bounds
-- that narrow the predicate choices themselves, so we must
-- consider only those entries within the range of the given
-- subtype indication..
P := First (Static_Discrete_Predicate (Typ));
while Present (P) loop
-- Check that part of the predicate choice is included in
-- the given bounds.
if Expr_Value (High_Bound (P)) >= Expr_Value (Lo)
and then Expr_Value (Low_Bound (P)) <= Expr_Value (Hi)
then
C := New_Copy (P);
Set_Sloc (C, Sloc (Choice));
if Expr_Value (Low_Bound (C)) < Expr_Value (Lo) then
Set_Low_Bound (C, Lo);
end if;
if Expr_Value (High_Bound (C)) > Expr_Value (Hi) then
Set_High_Bound (C, Hi);
end if;
Check (C, Low_Bound (C), High_Bound (C));
end if;
Next (P);
end loop;
Set_Has_SP_Choice (Alt);
end Handle_Static_Predicate;
-- Start of processing for Check_Choices
begin
@ -1582,29 +1643,12 @@ package body Sem_Case is
& "predicate as case alternative",
Choice, E, Suggest_Static => True);
-- Static predicate case
-- Static predicate case. The bounds are
-- those of the given subtype.
else
declare
P : Node_Id;
C : Node_Id;
begin
-- Loop through entries in predicate list,
-- checking each entry. Note that if the
-- list is empty, corresponding to a False
-- predicate, then no choices are checked.
P := First (Static_Discrete_Predicate (E));
while Present (P) loop
C := New_Copy (P);
Set_Sloc (C, Sloc (Choice));
Check (C, Low_Bound (C), High_Bound (C));
Next (P);
end loop;
end;
Set_Has_SP_Choice (Alt);
Handle_Static_Predicate (E,
Type_Low_Bound (E), Type_High_Bound (E));
end if;
-- Not predicated subtype case
@ -1658,7 +1702,16 @@ package body Sem_Case is
end if;
end if;
Check (Choice, L, H);
if Has_Static_Predicate (E) then
-- Check applicable predicate values within the
-- bounds of the given range.
Handle_Static_Predicate (E, L, H);
else
Check (Choice, L, H);
end if;
end if;
end;
end if;

View File

@ -7744,9 +7744,9 @@ package body Sem_Ch8 is
New_T := Etype (New_F);
Old_T := Etype (Old_F);
-- If the new type is a renaming of the old one, as is the
-- case for actuals in instances, retain its name, to simplify
-- later disambiguation.
-- If the new type is a renaming of the old one, as is the case
-- for actuals in instances, retain its name, to simplify later
-- disambiguation.
if Nkind (Parent (New_T)) = N_Subtype_Declaration
and then Is_Entity_Name (Subtype_Indication (Parent (New_T)))
@ -7760,6 +7760,7 @@ package body Sem_Ch8 is
Next_Formal (New_F);
Next_Formal (Old_F);
end loop;
pragma Assert (No (Old_F));
if Ekind_In (Old_S, E_Function, E_Enumeration_Literal) then

View File

@ -446,6 +446,15 @@ package body Sem_Elab is
return;
end if;
-- If an instance of a generic package contains a controlled object (so
-- we're calling Initialize at elaboration time), and the instance is in
-- a package body P that says "with P;", then we need to return without
-- adding "pragma Elaborate_All (P);" to P.
if U = Main_Unit_Entity then
return;
end if;
Itm := First (CI);
while Present (Itm) loop
if Nkind (Itm) = N_With_Clause then
@ -495,10 +504,8 @@ package body Sem_Elab is
end if;
-- Here if we do not find with clause on spec or body. We just ignore
-- this case, it means that the elaboration involves some other unit
-- this case; it means that the elaboration involves some other unit
-- than the unit being compiled, and will be caught elsewhere.
null;
end Activate_Elaborate_All_Desirable;
------------------
@ -528,7 +535,7 @@ package body Sem_Elab is
-- Generate a call to Error_Msg_NE with parameters Msg_D or Msg_S (for
-- dynamic or static elaboration model), N and Ent. Msg_D is a real
-- warning (output if Msg_D is non-null and Elab_Warnings is set),
-- Msg_S is an info message (output if Elab_Info_Messages is set.
-- Msg_S is an info message (output if Elab_Info_Messages is set).
function Find_W_Scope return Entity_Id;
-- Find top-level scope for called entity (not following renamings

View File

@ -24599,7 +24599,7 @@ package body Sem_Prag is
In_Out_Items : Elist_Id := No_Elist;
Out_Items : Elist_Id := No_Elist;
Proof_In_Items : Elist_Id := No_Elist;
-- These list contain the entities of all Input, In_Out, Output and
-- These lists contain the entities of all Input, In_Out, Output and
-- Proof_In items defined in the corresponding Global pragma.
Repeat_Items : Elist_Id := No_Elist;
@ -24656,7 +24656,7 @@ package body Sem_Prag is
procedure Collect_Global_Items
(List : Node_Id;
Mode : Name_Id := Name_Input);
-- Gather all input, in out, output and Proof_In items from node List
-- Gather all Input, In_Out, Output and Proof_In items from node List
-- and separate them in lists In_Items, In_Out_Items, Out_Items and
-- Proof_In_Items. Flags Has_In_State, Has_In_Out_State, Has_Out_State
-- and Has_Proof_In_State are set when there is at least one abstract