aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog48
-rw-r--r--gcc/ada/einfo.adb88
-rw-r--r--gcc/ada/einfo.ads34
-rw-r--r--gcc/ada/lib-xref.adb9
-rw-r--r--gcc/ada/sem_eval.adb2
-rw-r--r--gcc/ada/sem_prag.adb184
-rw-r--r--gcc/ada/snames.ads-tmpl5
7 files changed, 224 insertions, 146 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 74d518b..6c29684 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,53 @@
2013-10-10 Hristian Kirtchev <kirtchev@adacore.com>
+ * einfo.adb: Remove Integrity_Level from the node usage list.
+ (Has_Option): Update the implementation to match
+ the new terminology.
+ (Has_Property): Renamed to Has_Option.
+ (Integrity_Level): Removed.
+ (Is_External_State): New routine.
+ (Is_Input_Only_State): Use Has_Option to determine whether a state
+ is Input_Only. (Is_Input_State): Renamed to Is_Input_Only_State.
+ (Is_Output_Only_State): Use Has_Option to determine whether
+ a state is Output_Only.
+ (Is_Output_State): Renamed to
+ Is_Output_Only_State.
+ (Is_Volatile_State): Use Has_Option to determine whether a state is
+ volatile.
+ (Set_Integrity_Level): Removed.
+ (Write_Field8): Remove the entry for Integrity_Level.
+ * einfo.ads: Remove Integrity_Level along with its documentation
+ and usage in nodes. Rename Is_Input_State to Is_Input_Only_State.
+ Rename Is_Output_State to Is_Output_Only_State. Update the
+ documentation of Is_Volatile_State. Update the node structure of
+ E_Abstract_Entity.
+ (Integrity_Level): Removed along with pragma Inline.
+ (Is_External_State): New routine.
+ (Is_Input_State): Renamed to Is_Input_Only_State.
+ (Is_Output_State): Renamed to Is_Output_Only_State.
+ (Set_Integrity_Level): Removed along with pragma Inline.
+ * sem_prag.adb (Analyze_Pragma): Update the checks regarding
+ global items and abstract state modes. Update the implementation
+ of pragma Abstract_State to reflect the new rules and terminology.
+ * snames.ads-tmpl: Remove the predefined name for Integrity
+ level. Add new predefined names for Input_Only, Non_Volatile,
+ Output_Only and Part_Of.
+
+2013-10-10 Ed Schonberg <schonberg@adacore.com>
+
+ * lib-xref.adb (Generate_Reference): Do not generate a reference
+ within a _postcondition procedure: a proper source reference has
+ already been generated when pre- analyzing the original aspect
+ specification, and the use of a formal in a pre/postcondition
+ should not count as a proper use in a subprogram body.
+
+2013-10-10 Robert Dewar <dewar@adacore.com>
+
+ * sem_eval.adb (Why_Non_Static): Fix bomb for deferred constant
+ case
+
+2013-10-10 Hristian Kirtchev <kirtchev@adacore.com>
+
* aspects.adb: Add an entry for Aspect_Refined_Post in table
Canonical_Aspect.
* aspects.ads: Add an entry for Aspect_Refined_Post in tables
diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb
index 1da975d..da7fa2d 100644
--- a/gcc/ada/einfo.adb
+++ b/gcc/ada/einfo.adb
@@ -76,7 +76,6 @@ package body Einfo is
-- Associated_Node_For_Itype Node8
-- Dependent_Instances Elist8
-- Hiding_Loop_Variable Node8
- -- Integrity_Level Uint8
-- Mechanism Uint8 (but returns Mechanism_Type)
-- Normalized_First_Bit Uint8
-- Postcondition_Proc Node8
@@ -584,11 +583,11 @@ package body Einfo is
-- Local subprograms --
-----------------------
- function Has_Property
- (State : Entity_Id;
- Prop_Nam : Name_Id) return Boolean;
- -- Determine whether abstract state State has a particular property denoted
- -- by the name Prop_Nam.
+ function Has_Option
+ (State : Entity_Id;
+ Opt_Nam : Name_Id) return Boolean;
+ -- Determine whether abstract state State has a particular option denoted
+ -- by the name Opt_Nam.
---------------
-- Float_Rep --
@@ -600,40 +599,40 @@ package body Einfo is
return F'Val (UI_To_Int (Uint10 (Base_Type (Id))));
end Float_Rep;
- ------------------
- -- Has_Property --
- ------------------
+ ----------------
+ -- Has_Option --
+ ----------------
- function Has_Property
- (State : Entity_Id;
- Prop_Nam : Name_Id) return Boolean
+ function Has_Option
+ (State : Entity_Id;
+ Opt_Nam : Name_Id) return Boolean
is
- Par : constant Node_Id := Parent (State);
- Prop : Node_Id;
+ Par : constant Node_Id := Parent (State);
+ Opt : Node_Id;
begin
pragma Assert (Ekind (State) = E_Abstract_State);
- -- States with properties appear as extension aggregates in the tree
+ -- States with options appear as extension aggregates in the tree
if Nkind (Par) = N_Extension_Aggregate then
- if Prop_Nam = Name_Integrity then
+ if Opt_Nam = Name_Part_Of then
return Present (Component_Associations (Par));
else
- Prop := First (Expressions (Par));
- while Present (Prop) loop
- if Chars (Prop) = Prop_Nam then
+ Opt := First (Expressions (Par));
+ while Present (Opt) loop
+ if Chars (Opt) = Opt_Nam then
return True;
end if;
- Next (Prop);
+ Next (Opt);
end loop;
end if;
end if;
return False;
- end Has_Property;
+ end Has_Option;
--------------------------------
-- Attribute Access Functions --
@@ -1760,12 +1759,6 @@ package body Einfo is
return Node28 (Id);
end Initialization_Statements;
- function Integrity_Level (Id : E) return U is
- begin
- pragma Assert (Ekind (Id) = E_Abstract_State);
- return Uint8 (Id);
- end Integrity_Level;
-
function Inner_Instances (Id : E) return L is
begin
return Elist23 (Id);
@@ -4386,12 +4379,6 @@ package body Einfo is
Set_Node28 (Id, V);
end Set_Initialization_Statements;
- procedure Set_Integrity_Level (Id : E; V : Uint) is
- begin
- pragma Assert (Ekind (Id) = E_Abstract_State);
- Set_Uint8 (Id, V);
- end Set_Integrity_Level;
-
procedure Set_Inner_Instances (Id : E; V : L) is
begin
Set_Elist23 (Id, V);
@@ -6655,6 +6642,16 @@ package body Einfo is
and then Is_Entity_Attribute_Name (Attribute_Name (N)));
end Is_Entity_Name;
+ -----------------------
+ -- Is_External_State --
+ -----------------------
+
+ function Is_External_State (Id : E) return B is
+ begin
+ return
+ Ekind (Id) = E_Abstract_State and then Has_Option (Id, Name_External);
+ end Is_External_State;
+
------------------
-- Is_Finalizer --
------------------
@@ -6690,15 +6687,16 @@ package body Einfo is
end if;
end Is_Ghost_Subprogram;
- --------------------
- -- Is_Input_State --
- --------------------
+ -------------------------
+ -- Is_Input_Only_State --
+ -------------------------
- function Is_Input_State (Id : E) return B is
+ function Is_Input_Only_State (Id : E) return B is
begin
return
- Ekind (Id) = E_Abstract_State and then Has_Property (Id, Name_Input);
- end Is_Input_State;
+ Ekind (Id) = E_Abstract_State
+ and then Has_Option (Id, Name_Input_Only);
+ end Is_Input_Only_State;
-------------------
-- Is_Null_State --
@@ -6714,11 +6712,12 @@ package body Einfo is
-- Is_Output_State --
---------------------
- function Is_Output_State (Id : E) return B is
+ function Is_Output_Only_State (Id : E) return B is
begin
return
- Ekind (Id) = E_Abstract_State and then Has_Property (Id, Name_Output);
- end Is_Output_State;
+ Ekind (Id) = E_Abstract_State
+ and then Has_Option (Id, Name_Output_Only);
+ end Is_Output_Only_State;
-----------------------------------
-- Is_Package_Or_Generic_Package --
@@ -6867,7 +6866,7 @@ package body Einfo is
begin
return
Ekind (Id) = E_Abstract_State
- and then Has_Property (Id, Name_Volatile);
+ and then Has_Option (Id, Name_Volatile);
end Is_Volatile_State;
------------------------
@@ -8281,9 +8280,6 @@ package body Einfo is
when E_Variable =>
Write_Str ("Hiding_Loop_Variable");
- when E_Abstract_State =>
- Write_Str ("Integrity_Level");
-
when Formal_Kind |
E_Function |
E_Subprogram_Body =>
diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads
index 0449674..b06026b 100644
--- a/gcc/ada/einfo.ads
+++ b/gcc/ada/einfo.ads
@@ -1969,11 +1969,6 @@ package Einfo is
-- instantiated within the given generic. Used to diagnose circular
-- instantiations.
--- Integrity_Level (Uint8)
--- Defined for E_Abstract_State entities. Contains the numerical value of
--- the integrity level state property. A value of Uint_0 designates a non
--- existent integrity.
-
-- Interface_Alias (Node25)
-- Defined in subprograms that cover a primitive operation of an abstract
-- interface type. Can be set only if the Is_Hidden flag is also set,
@@ -2263,6 +2258,10 @@ package Einfo is
-- and variables, but that may well change later on. Exceptions can only
-- be exported in the OpenVMS and Java VM implementations of GNAT.
+-- Is_External_State (synthesized)
+-- Applies to all entities, true for abstract states that are subject to
+-- option External.
+
-- Is_Finalizer (synthesized)
-- Applies to all entities, true for procedures containing finalization
-- code to process local or library level objects.
@@ -2380,9 +2379,9 @@ package Einfo is
-- inherited by their instances. It is also set on the body entities
-- of inlined subprograms. See also Has_Pragma_Inline.
--- Is_Input_State (synthesized)
+-- Is_Input_Only_State (synthesized)
-- Applies to all entities, true for abstract states that are subject to
--- property Input.
+-- option Input_Only.
-- Is_Instantiated (Flag126)
-- Defined in generic packages and generic subprograms. Set if the unit
@@ -2613,9 +2612,9 @@ package Einfo is
-- Applies to all entities, true for ordinary fixed point types and
-- subtypes.
--- Is_Output_State (synthesized)
+-- Is_Output_Only_State (synthesized)
-- Applies to all entities, true for abstract states that are subject to
--- property Output.
+-- option Output_Only.
-- Is_Package_Or_Generic_Package (synthesized)
-- Applies to all entities. True for packages and generic packages.
@@ -2976,7 +2975,7 @@ package Einfo is
-- Is_Volatile_State (synthesized)
-- Applies to all entities, true for abstract states that are subject to
--- property Volatile.
+-- option Volatile.
-- Is_Wrapper_Package (synthesized)
-- Defined in package entities. Indicates that the package has been
@@ -5093,11 +5092,11 @@ package Einfo is
------------------------------------------
-- E_Abstract_State
- -- Integrity_Level (Uint8)
-- Refined_State (Node9)
- -- Is_Input_State (synth)
+ -- Is_External_State (synth)
+ -- Is_Input_Only_State (synth)
-- Is_Null_State (synth)
- -- Is_Output_State (synth)
+ -- Is_Output_Only_State (synth)
-- Is_Volatile_State (synth)
-- E_Access_Protected_Subprogram_Type
@@ -6377,7 +6376,6 @@ package Einfo is
function In_Private_Part (Id : E) return B;
function In_Use (Id : E) return B;
function Initialization_Statements (Id : E) return N;
- function Integrity_Level (Id : E) return U;
function Inner_Instances (Id : E) return L;
function Interface_Alias (Id : E) return E;
function Interface_Name (Id : E) return N;
@@ -6680,12 +6678,13 @@ package Einfo is
function Is_Constant_Object (Id : E) return B;
function Is_Discriminal (Id : E) return B;
function Is_Dynamic_Scope (Id : E) return B;
+ function Is_External_State (Id : E) return B;
function Is_Finalizer (Id : E) return B;
function Is_Ghost_Entity (Id : E) return B;
function Is_Ghost_Subprogram (Id : E) return B;
- function Is_Input_State (Id : E) return B;
+ function Is_Input_Only_State (Id : E) return B;
function Is_Null_State (Id : E) return B;
- function Is_Output_State (Id : E) return B;
+ function Is_Output_Only_State (Id : E) return B;
function Is_Package_Or_Generic_Package (Id : E) return B;
function Is_Prival (Id : E) return B;
function Is_Protected_Component (Id : E) return B;
@@ -6988,7 +6987,6 @@ package Einfo is
procedure Set_In_Private_Part (Id : E; V : B := True);
procedure Set_In_Use (Id : E; V : B := True);
procedure Set_Initialization_Statements (Id : E; V : N);
- procedure Set_Integrity_Level (Id : E; V : U);
procedure Set_Inner_Instances (Id : E; V : L);
procedure Set_Interface_Alias (Id : E; V : E);
procedure Set_Interface_Name (Id : E; V : N);
@@ -7696,7 +7694,6 @@ package Einfo is
pragma Inline (In_Package_Body);
pragma Inline (In_Private_Part);
pragma Inline (In_Use);
- pragma Inline (Integrity_Level);
pragma Inline (Inner_Instances);
pragma Inline (Interface_Alias);
pragma Inline (Interface_Name);
@@ -8157,7 +8154,6 @@ package Einfo is
pragma Inline (Set_In_Private_Part);
pragma Inline (Set_In_Use);
pragma Inline (Set_Inner_Instances);
- pragma Inline (Set_Integrity_Level);
pragma Inline (Set_Interface_Alias);
pragma Inline (Set_Interface_Name);
pragma Inline (Set_Interfaces);
diff --git a/gcc/ada/lib-xref.adb b/gcc/ada/lib-xref.adb
index 182c2b0..562b709 100644
--- a/gcc/ada/lib-xref.adb
+++ b/gcc/ada/lib-xref.adb
@@ -610,6 +610,15 @@ package body Lib.Xref is
Error_Msg_NE ("& is only defined in Ada 2012?y?", N, E);
end if;
+ -- Do not generate references if we are within a postcondition sub-
+ -- program, because the reference does not comes from source, and the
+ -- pre-analysis of the aspect has already created an entry for the ali
+ -- file at the proper source location.
+
+ if Chars (Current_Scope) = Name_uPostconditions then
+ return;
+ end if;
+
-- Never collect references if not in main source unit. However, we omit
-- this test if Typ is 'e' or 'k', since these entries are structural,
-- and it is useful to have them in units that reference packages as
diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb
index 94ce100..cd6634a 100644
--- a/gcc/ada/sem_eval.adb
+++ b/gcc/ada/sem_eval.adb
@@ -5578,7 +5578,7 @@ package body Sem_Eval is
then
Error_Msg_N ("\aggregate (#) is never static", N);
- elsif not Is_Static_Expression (CV) then
+ elsif No (CV) or else not Is_Static_Expression (CV) then
Error_Msg_NE
("\& is not a static constant (RM 4.9(5))", N, E);
end if;
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index d8c32dd..e698d97 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -1463,27 +1463,27 @@ package body Sem_Prag is
-- valid choices. Perform mode- and usage-specific checks.
if Ekind (Item_Id) = E_Abstract_State
- and then Is_Volatile_State (Item_Id)
+ and then Is_External_State (Item_Id)
then
- -- A global item of mode In_Out or Output cannot denote a
- -- volatile Input state.
+ -- A global item of mode In_Out or Output cannot denote an
+ -- external Input_Only state.
- if Is_Input_State (Item_Id)
+ if Is_Input_Only_State (Item_Id)
and then Nam_In (Global_Mode, Name_In_Out, Name_Output)
then
Error_Msg_N
("global item of mode In_Out or Output cannot reference "
- & "Volatile Input state", Item);
+ & "External Input_Only state", Item);
- -- A global item of mode In_Out or Input cannot reference a
- -- volatile Output state.
+ -- A global item of mode In_Out or Input cannot reference an
+ -- external Output_Only state.
- elsif Is_Output_State (Item_Id)
+ elsif Is_Output_Only_State (Item_Id)
and then Nam_In (Global_Mode, Name_In_Out, Name_Input)
then
Error_Msg_N
("global item of mode In_Out or Input cannot reference "
- & "Volatile Output state", Item);
+ & "External Output_Only state", Item);
end if;
end if;
@@ -8417,19 +8417,21 @@ package body Sem_Prag is
-- ABSTRACT_STATE_LIST ::=
-- null
- -- | STATE_NAME_WITH_PROPERTIES {, STATE_NAME_WITH_PROPERTIES}
+ -- | STATE_NAME_WITH_OPTIONS
+ -- | (STATE_NAME_WITH_OPTIONS {, STATE_NAME_WITH_OPTIONS})
- -- STATE_NAME_WITH_PROPERTIES ::=
- -- STATE_NAME
- -- | (STATE_NAME with PROPERTY_LIST)
+ -- STATE_NAME_WITH_OPTIONS ::=
+ -- state_NAME
+ -- | (state_NAME with OPTION_LIST)
- -- PROPERTY_LIST ::= PROPERTY {, PROPERTY}
- -- PROPERTY ::= SIMPLE_PROPERTY | NAME_VALUE_PROPERTY
+ -- OPTION_LIST ::= OPTION {, OPTION}
- -- SIMPLE_PROPERTY ::= IDENTIFIER
- -- NAME_VALUE_PROPERTY ::= IDENTIFIER => EXPRESSION
+ -- OPTION ::= SIMPLE_OPTION | NAME_VALUE_OPTION
- -- STATE_NAME ::= DEFINING_IDENTIFIER
+ -- SIMPLE_OPTION ::=
+ -- External | Non_Volatile | Input_Only | Output_Only
+
+ -- NAME_VALUE_OPTION ::= Part_Of => abstract_state_NAME
when Pragma_Abstract_State => Abstract_State : declare
Pack_Id : Entity_Id;
@@ -8449,46 +8451,47 @@ package body Sem_Prag is
----------------------------
procedure Analyze_Abstract_State (State : Node_Id) is
- procedure Check_Duplicate_Property
- (Prop : Node_Id;
+ procedure Check_Duplicate_Option
+ (Opt : Node_Id;
Status : in out Boolean);
- -- Flag Status denotes whether a particular property has been
+ -- Flag Status denotes whether a particular option has been
-- seen while processing a state. This routine verifies that
- -- Prop is not a duplicate property and sets the flag Status.
+ -- Opt is not a duplicate property and sets the flag Status.
- ------------------------------
- -- Check_Duplicate_Property --
- ------------------------------
+ ----------------------------
+ -- Check_Duplicate_Option --
+ ----------------------------
- procedure Check_Duplicate_Property
- (Prop : Node_Id;
+ procedure Check_Duplicate_Option
+ (Opt : Node_Id;
Status : in out Boolean)
is
begin
if Status then
- Error_Msg_N ("duplicate state property", Prop);
+ Error_Msg_N ("duplicate state option", Opt);
end if;
Status := True;
- end Check_Duplicate_Property;
+ end Check_Duplicate_Option;
-- Local variables
- Errors : constant Nat := Serious_Errors_Detected;
- Loc : constant Source_Ptr := Sloc (State);
- Assoc : Node_Id;
- Id : Entity_Id;
- Is_Null : Boolean := False;
- Level : Uint := Uint_0;
- Name : Name_Id;
- Prop : Node_Id;
+ Errors : constant Nat := Serious_Errors_Detected;
+ Loc : constant Source_Ptr := Sloc (State);
+ Assoc : Node_Id;
+ Id : Entity_Id;
+ Is_Null : Boolean := False;
+ Name : Name_Id;
+ Opt : Node_Id;
+ Par_State : Node_Id;
- -- Flags used to verify the consistency of properties
+ -- Flags used to verify the consistency of options
- Input_Seen : Boolean := False;
- Integrity_Seen : Boolean := False;
- Output_Seen : Boolean := False;
- Volatile_Seen : Boolean := False;
+ External_Seen : Boolean := False;
+ Input_Seen : Boolean := False;
+ Non_Volatile_Seen : Boolean := False;
+ Output_Seen : Boolean := False;
+ Part_Of_Seen : Boolean := False;
-- Start of processing for Analyze_Abstract_State
@@ -8522,7 +8525,7 @@ package body Sem_Prag is
Name := Chars (State);
Non_Null_Seen := True;
- -- State declaration with various properties. This construct
+ -- State declaration with various options. This construct
-- appears as an extension aggregate in the tree.
elsif Nkind (State) = N_Extension_Aggregate then
@@ -8535,69 +8538,93 @@ package body Sem_Prag is
Ancestor_Part (State));
end if;
- -- Process properties Input, Output and Volatile. Ensure
- -- that none of them appear more than once.
-
- Prop := First (Expressions (State));
- while Present (Prop) loop
- if Nkind (Prop) = N_Identifier then
- if Chars (Prop) = Name_Input then
- Check_Duplicate_Property (Prop, Input_Seen);
- elsif Chars (Prop) = Name_Output then
- Check_Duplicate_Property (Prop, Output_Seen);
- elsif Chars (Prop) = Name_Volatile then
- Check_Duplicate_Property (Prop, Volatile_Seen);
+ -- Process options External, Input_Only, Output_Only and
+ -- Volatile. Ensure that none of them appear more than once.
+
+ Opt := First (Expressions (State));
+ while Present (Opt) loop
+ if Nkind (Opt) = N_Identifier then
+ if Chars (Opt) = Name_External then
+ Check_Duplicate_Option (Opt, External_Seen);
+ elsif Chars (Opt) = Name_Input_Only then
+ Check_Duplicate_Option (Opt, Input_Seen);
+ elsif Chars (Opt) = Name_Output_Only then
+ Check_Duplicate_Option (Opt, Output_Seen);
+ elsif Chars (Opt) = Name_Non_Volatile then
+ Check_Duplicate_Option (Opt, Non_Volatile_Seen);
+
+ -- Ensure that the abstract state component of option
+ -- Part_Of has not been omitted.
+
+ elsif Chars (Opt) = Name_Part_Of then
+ Error_Msg_N
+ ("option Part_Of requires an abstract state",
+ Opt);
else
- Error_Msg_N ("invalid state property", Prop);
+ Error_Msg_N ("invalid state option", Opt);
end if;
else
- Error_Msg_N ("invalid state property", Prop);
+ Error_Msg_N ("invalid state option", Opt);
end if;
- Next (Prop);
+ Next (Opt);
end loop;
- -- Volatile requires exactly one Input or Output
+ -- External requires exactly one Input_Only or Output_Only
- if Volatile_Seen and then Input_Seen = Output_Seen then
+ if External_Seen and then Input_Seen = Output_Seen then
Error_Msg_N
- ("property Volatile requires exactly one Input or "
- & "Output", State);
+ ("option External requires exactly one option "
+ & "Input_Only or Output_Only", State);
end if;
- -- Either Input or Output require Volatile
+ -- Either Input_Only or Output_Only require External
if (Input_Seen or Output_Seen)
- and then not Volatile_Seen
+ and then not External_Seen
then
Error_Msg_N
- ("properties Input and Output require Volatile", State);
+ ("options Input_Only and Output_Only require option "
+ & "External", State);
end if;
- -- State property Integrity appears as a component
- -- association.
+ -- Option Part_Of appears as a component association
Assoc := First (Component_Associations (State));
while Present (Assoc) loop
- Prop := First (Choices (Assoc));
- while Present (Prop) loop
- if Nkind (Prop) = N_Identifier
- and then Chars (Prop) = Name_Integrity
+ Opt := First (Choices (Assoc));
+ while Present (Opt) loop
+ if Nkind (Opt) = N_Identifier
+ and then Chars (Opt) = Name_Part_Of
then
- Check_Duplicate_Property (Prop, Integrity_Seen);
+ Check_Duplicate_Option (Opt, Part_Of_Seen);
else
- Error_Msg_N ("invalid state property", Prop);
+ Error_Msg_N ("invalid state option", Opt);
end if;
- Next (Prop);
+ Next (Opt);
end loop;
- if Nkind (Expression (Assoc)) = N_Integer_Literal then
- Level := Intval (Expression (Assoc));
+ -- Part_Of must denote a parent state. Ensure that the
+ -- tree is not malformed by checking the expression of
+ -- the component association.
+
+ Par_State := Expression (Assoc);
+ pragma Assert (Present (Par_State));
+
+ Analyze (Par_State);
+
+ -- Part_Of specified a legal state
+
+ if Is_Entity_Name (Par_State)
+ and then Present (Entity (Par_State))
+ and then Ekind (Entity (Par_State)) = E_Abstract_State
+ then
+ null;
else
Error_Msg_N
- ("integrity level must be an integer literal",
- Expression (Assoc));
+ ("option Part_Of must denote an abstract state",
+ Par_State);
end if;
Next (Assoc);
@@ -8624,7 +8651,6 @@ package body Sem_Prag is
Set_Parent (Id, State);
Set_Ekind (Id, E_Abstract_State);
Set_Etype (Id, Standard_Void_Type);
- Set_Integrity_Level (Id, Level);
Set_Refined_State (Id, Empty);
-- Every non-null state must be nameable and resolvable the
diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl
index d32f506..9752d2b 100644
--- a/gcc/ada/snames.ads-tmpl
+++ b/gcc/ada/snames.ads-tmpl
@@ -713,7 +713,7 @@ package Snames is
Name_In_Out : constant Name_Id := N + $;
Name_Increases : constant Name_Id := N + $;
Name_Info : constant Name_Id := N + $;
- Name_Integrity : constant Name_Id := N + $;
+ Name_Input_Only : constant Name_Id := N + $;
Name_Internal : constant Name_Id := N + $;
Name_Link_Name : constant Name_Id := N + $;
Name_Lowercase : constant Name_Id := N + $;
@@ -747,10 +747,13 @@ package Snames is
Name_No_Unroll : constant Name_Id := N + $;
Name_No_Vector : constant Name_Id := N + $;
Name_Nominal : constant Name_Id := N + $;
+ Name_Non_Volatile : constant Name_Id := N + $;
Name_On : constant Name_Id := N + $;
Name_Optional : constant Name_Id := N + $;
+ Name_Output_Only : constant Name_Id := N + $;
Name_Policy : constant Name_Id := N + $;
Name_Parameter_Types : constant Name_Id := N + $;
+ Name_Part_Of : constant Name_Id := N + $;
Name_Reason : constant Name_Id := N + $;
Name_Reference : constant Name_Id := N + $;
Name_Requires : constant Name_Id := N + $;