summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/freeze.adb90
-rw-r--r--gcc/ada/par-ch3.adb30
-rw-r--r--gcc/ada/sem_attr.adb53
-rw-r--r--gcc/ada/sem_ch3.adb16
-rw-r--r--gcc/ada/sem_ch5.adb75
-rw-r--r--gcc/ada/sem_ch6.adb43
-rw-r--r--gcc/ada/sem_res.adb13
-rw-r--r--gcc/ada/sinfo.adb4
-rw-r--r--gcc/ada/sinfo.ads57
9 files changed, 305 insertions, 76 deletions
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb
index 5f3d300f0ac..316c34e7903 100644
--- a/gcc/ada/freeze.adb
+++ b/gcc/ada/freeze.adb
@@ -2235,6 +2235,32 @@ package body Freeze is
Error_Msg_Qual_Level := 0;
end if;
+ -- Ada 2005 (AI-326): Check wrong use of tag incomplete
+ -- types with unknown discriminants. For example:
+
+ -- type T (<>) is tagged;
+ -- procedure P (X : access T); -- ERROR
+ -- procedure P (X : T); -- ERROR
+
+ if not From_With_Type (F_Type) then
+ if Is_Access_Type (F_Type) then
+ F_Type := Designated_Type (F_Type);
+ end if;
+
+ if Ekind (F_Type) = E_Incomplete_Type
+ and then Is_Tagged_Type (F_Type)
+ and then not Is_Class_Wide_Type (F_Type)
+ and then No (Full_View (F_Type))
+ and then Unknown_Discriminants_Present
+ (Parent (F_Type))
+ and then No (Stored_Constraint (F_Type))
+ then
+ Error_Msg_N
+ ("(Ada 2005): invalid use of unconstrained tagged"
+ & " incomplete type", E);
+ end if;
+ end if;
+
Next_Formal (Formal);
end loop;
@@ -2259,6 +2285,20 @@ package body Freeze is
Error_Msg_N
("?foreign convention function& should not " &
"return unconstrained array", E);
+
+ -- Ada 2005 (AI-326): Check wrong use of tagged
+ -- incomplete type
+ --
+ -- type T is tagged;
+ -- function F (X : Boolean) return T; -- ERROR
+
+ elsif Ekind (Etype (E)) = E_Incomplete_Type
+ and then Is_Tagged_Type (Etype (E))
+ and then No (Full_View (Etype (E)))
+ then
+ Error_Msg_N
+ ("(Ada 2005): invalid use of tagged incomplete type",
+ E);
end if;
end if;
end;
@@ -2948,15 +2988,55 @@ package body Freeze is
Freeze_Subprogram (E);
+ -- AI-326: Check wrong use of tag incomplete type
+ --
+ -- type T is tagged;
+ -- type Acc is access function (X : T) return T; -- ERROR
+
+ if Ekind (Etype (E)) = E_Incomplete_Type
+ and then Is_Tagged_Type (Etype (E))
+ and then No (Full_View (Etype (E)))
+ then
+ Error_Msg_N
+ ("(Ada 2005): invalid use of tagged incomplete type", E);
+ end if;
+
-- For access to a protected subprogram, freeze the equivalent
-- type (however this is not set if we are not generating code)
-- or if this is an anonymous type used just for resolution).
- elsif Ekind (E) = E_Access_Protected_Subprogram_Type
- and then Operating_Mode = Generate_Code
- and then Present (Equivalent_Type (E))
- then
- Freeze_And_Append (Equivalent_Type (E), Loc, Result);
+ elsif Ekind (E) = E_Access_Protected_Subprogram_Type then
+
+ -- AI-326: Check wrong use of tagged incomplete types
+
+ -- type T is tagged;
+ -- type As3D is access protected
+ -- function (X : Float) return T; -- ERROR
+
+ declare
+ Etyp : Entity_Id;
+
+ begin
+ Etyp := Etype (Directly_Designated_Type (E));
+
+ if Is_Class_Wide_Type (Etyp) then
+ Etyp := Etype (Etyp);
+ end if;
+
+ if Ekind (Etyp) = E_Incomplete_Type
+ and then Is_Tagged_Type (Etyp)
+ and then No (Full_View (Etyp))
+ then
+ Error_Msg_N
+ ("(Ada 2005): invalid use of tagged incomplete type", E);
+ end if;
+ end;
+
+ if Operating_Mode = Generate_Code
+ and then Present (Equivalent_Type (E))
+ then
+ Freeze_And_Append (Equivalent_Type (E), Loc, Result);
+ end if;
end if;
-- Generic types are never seen by the back-end, and are also not
diff --git a/gcc/ada/par-ch3.adb b/gcc/ada/par-ch3.adb
index b8e4f19d0ed..695e89d3c9b 100644
--- a/gcc/ada/par-ch3.adb
+++ b/gcc/ada/par-ch3.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2005, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2005 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- --
@@ -26,7 +26,7 @@
pragma Style_Checks (All_Checks);
-- Turn off subprogram body ordering check. Subprograms are in order
--- by RM section rather than alphabetical
+-- by RM section rather than alphabetical.
with Sinfo.CN; use Sinfo.CN;
@@ -228,7 +228,7 @@ package body Ch3 is
-- | CONCURRENT_TYPE_DECLARATION
-- INCOMPLETE_TYPE_DECLARATION ::=
- -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART];
+ -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED];
-- PRIVATE_TYPE_DECLARATION ::=
-- type DEFINING_IDENTIFIER [DISCRIMINANT_PART]
@@ -518,6 +518,24 @@ package body Ch3 is
when Tok_Tagged =>
Scan; -- past TAGGED
+ -- Ada 2005 (AI-326): If the words IS TAGGED appear, the type
+ -- is a tagged incomplete type.
+
+ if Ada_Version >= Ada_05
+ and then Token = Tok_Semicolon
+ then
+ Scan; -- past ;
+
+ Decl_Node :=
+ New_Node (N_Incomplete_Type_Declaration, Type_Loc);
+ Set_Defining_Identifier (Decl_Node, Ident_Node);
+ Set_Tagged_Present (Decl_Node);
+ Set_Unknown_Discriminants_Present (Decl_Node, Unknown_Dis);
+ Set_Discriminant_Specifications (Decl_Node, Discr_List);
+
+ return Decl_Node;
+ end if;
+
if Token = Tok_Abstract then
Error_Msg_SC ("ABSTRACT must come before TAGGED");
Abstract_Present := True;
@@ -1480,7 +1498,7 @@ package body Ch3 is
Not_Null_Present := P_Null_Exclusion; -- Ada 2005 (AI-231)
Set_Null_Exclusion_Present (Decl_Node, Not_Null_Present);
- -- Access definition (AI-406) or subtype indication.
+ -- Access definition (AI-406) or subtype indication
if Token = Tok_Access then
if Ada_Version < Ada_05 then
@@ -1589,7 +1607,7 @@ package body Ch3 is
Acc_Node := P_Access_Definition (Null_Exclusion_Present => False);
- -- Object declaration with access definition, or renaming.
+ -- Object declaration with access definition, or renaming
if Token /= Tok_Renames then
Decl_Node := New_Node (N_Object_Declaration, Ident_Sloc);
@@ -4183,7 +4201,7 @@ package body Ch3 is
SIS_Entry_Active := False;
- -- Test for assorted illegal declarations not diagnosed elsewhere.
+ -- Test for assorted illegal declarations not diagnosed elsewhere
Decl := First (Decls);
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index acb84912373..23ad5fcfbfe 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -1101,13 +1101,64 @@ package body Sem_Attr is
-------------------------------
procedure Check_Not_Incomplete_Type is
+ E : Entity_Id;
+ Typ : Entity_Id;
+
begin
+ -- Ada 2005 (AI-50217, AI-326): If the prefix is an explicit
+ -- dereference we have to check wrong uses of incomplete types
+ -- (other wrong uses are checked at their freezing point).
+
+ -- Example 1: Limited-with
+
+ -- limited with Pkg;
+ -- package P is
+ -- type Acc is access Pkg.T;
+ -- X : Acc;
+ -- S : Integer := X.all'Size; -- ERROR
+ -- end P;
+
+ -- Example 2: Tagged incomplete
+
+ -- type T is tagged;
+ -- type Acc is access all T;
+ -- X : Acc;
+ -- S : constant Integer := X.all'Size; -- ERROR
+ -- procedure Q (Obj : Integer := X.all'Alignment); -- ERROR
+
+ if Ada_Version >= Ada_05
+ and then Nkind (P) = N_Explicit_Dereference
+ then
+ E := P;
+ while Nkind (E) = N_Explicit_Dereference loop
+ E := Prefix (E);
+ end loop;
+
+ if From_With_Type (Etype (E)) then
+ Error_Attr
+ ("prefix of % attribute cannot be an incomplete type", P);
+
+ else
+ if Is_Access_Type (Etype (E)) then
+ Typ := Directly_Designated_Type (Etype (E));
+ else
+ Typ := Etype (E);
+ end if;
+
+ if Ekind (Typ) = E_Incomplete_Type
+ and then not Present (Full_View (Typ))
+ then
+ Error_Attr
+ ("prefix of % attribute cannot be an incomplete type", P);
+ end if;
+ end if;
+ end if;
+
if not Is_Entity_Name (P)
or else not Is_Type (Entity (P))
or else In_Default_Expression
then
return;
-
else
Check_Fully_Declared (P_Type, P);
end if;
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 124adbbb07c..bc60d9d4012 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -1529,6 +1529,16 @@ package body Sem_Ch3 is
Init_Size_Align (T);
Set_Is_First_Subtype (T, True);
Set_Etype (T, T);
+
+ -- Ada 2005 (AI-326): Mininum decoration to give support to tagged
+ -- incomplete types
+
+ if Tagged_Present (N) then
+ Set_Is_Tagged_Type (T);
+ Make_Class_Wide_Type (T);
+ Set_Primitive_Operations (T, New_Elmt_List);
+ end if;
+
New_Scope (T);
Set_Stored_Constraint (T, No_Elist);
@@ -7535,10 +7545,10 @@ package body Sem_Ch3 is
while Present (I) loop
- -- Protect against wrong usages. Example:
+ -- Protect against wrong uses. For example:
-- type I is interface;
-- type O is tagged null record;
- -- type Wrong is new I and O with null record;
+ -- type Wrong is new I and O with null record; -- ERROR
if Is_Interface (Etype (I)) then
@@ -14131,7 +14141,7 @@ package body Sem_Ch3 is
H : Entity_Id;
begin
- -- If there is a previous partial view, no need to create a new one.
+ -- If there is a previous partial view, no need to create a new one
if Prev /= T then
return;
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb
index 4b90302311e..b07389a8f36 100644
--- a/gcc/ada/sem_ch5.adb
+++ b/gcc/ada/sem_ch5.adb
@@ -339,6 +339,29 @@ package body Sem_Ch5 is
-- to avoid scoping issues in the back-end.
T1 := Etype (Lhs);
+
+ -- Ada 2005 (AI-50217, AI-326): Check wrong dereference of incomplete
+ -- type. For example:
+
+ -- limited with P;
+ -- package Pkg is
+ -- type Acc is access P.T;
+ -- end Pkg;
+
+ -- with Pkg; use Acc;
+ -- procedure Example is
+ -- A, B : Acc;
+ -- begin
+ -- A.all := B.all; -- ERROR
+ -- end Example;
+
+ if Nkind (Lhs) = N_Explicit_Dereference
+ and then Ekind (T1) = E_Incomplete_Type
+ then
+ Error_Msg_N ("invalid use of incomplete type", Lhs);
+ return;
+ end if;
+
Set_Assignment_Type (Lhs, T1);
Resolve (Rhs, T1);
@@ -359,6 +382,17 @@ package body Sem_Ch5 is
return;
end if;
+ -- Ada 2005 (AI-326): In case of explicit dereference of incomplete
+ -- types, use the non-limited view if available
+
+ if Nkind (Rhs) = N_Explicit_Dereference
+ and then Ekind (T2) = E_Incomplete_Type
+ and then Is_Tagged_Type (T2)
+ and then Present (Non_Limited_View (T2))
+ then
+ T2 := Non_Limited_View (T2);
+ end if;
+
Set_Assignment_Type (Rhs, T2);
if Total_Errors_Detected /= 0 then
@@ -752,9 +786,30 @@ package body Sem_Ch5 is
begin
Unblocked_Exit_Count := 0;
Exp := Expression (N);
- Analyze_And_Resolve (Exp, Any_Discrete);
+ Analyze (Exp);
+
+ -- The expression must be of any discrete type. In rare cases, the
+ -- expander constructs a case statement whose expression has a private
+ -- type whose full view is discrete. This can happen when generating
+ -- a stream operation for a variant type after the type is frozen,
+ -- when the partial of view of the type of the discriminant is private.
+ -- In that case, use the full view to analyze case alternatives.
+
+ if not Is_Overloaded (Exp)
+ and then not Comes_From_Source (N)
+ and then Is_Private_Type (Etype (Exp))
+ and then Present (Full_View (Etype (Exp)))
+ and then Is_Discrete_Type (Full_View (Etype (Exp)))
+ then
+ Resolve (Exp, Etype (Exp));
+ Exp_Type := Full_View (Etype (Exp));
+
+ else
+ Analyze_And_Resolve (Exp, Any_Discrete);
+ Exp_Type := Etype (Exp);
+ end if;
+
Check_Unset_Reference (Exp);
- Exp_Type := Etype (Exp);
Exp_Btype := Base_Type (Exp_Type);
-- The expression must be of a discrete type which must be determinable
@@ -1124,8 +1179,8 @@ package body Sem_Ch5 is
-- assignment statements block to capture the bounds and perform
-- required finalization actions in case a bound includes a function
-- call that uses the temporary stack. We first pre-analyze a copy of
- -- the range in order to determine the expected type, and analyze
- -- and resolve the original bounds.
+ -- the range in order to determine the expected type, and analyze and
+ -- resolve the original bounds.
procedure Check_Controlled_Array_Attribute (DS : Node_Id);
-- If the bounds are given by a 'Range reference on a function call
@@ -1167,12 +1222,12 @@ package body Sem_Ch5 is
Decl : Node_Id;
begin
- -- If the bound is a constant or an object, no need for a
- -- separate declaration. If the bound is the result of previous
- -- expansion it is already analyzed and should not be modified.
- -- Note that the Bound will be resolved later, if needed, as
- -- part of the call to Make_Index (literal bounds may need to
- -- be resolved to type Integer).
+ -- If the bound is a constant or an object, no need for a separate
+ -- declaration. If the bound is the result of previous expansion
+ -- it is already analyzed and should not be modified. Note that
+ -- the Bound will be resolved later, if needed, as part of the
+ -- call to Make_Index (literal bounds may need to be resolved to
+ -- type Integer).
if Analyzed (Original_Bound) then
return Original_Bound;
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 822446e9109..cf687473fec 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -5271,12 +5271,9 @@ package body Sem_Ch6 is
and then Ekind (Root_Type (Formal_Type)) =
E_Incomplete_Type)
then
- -- Ada 2005 (AI-50217): Incomplete tagged types that are made
- -- visible by a limited with_clause are valid formal types.
+ -- Ada 2005 (AI-326): Tagged incomplete types allowed
- if From_With_Type (Formal_Type)
- and then Is_Tagged_Type (Formal_Type)
- then
+ if Is_Tagged_Type (Formal_Type) then
null;
elsif Nkind (Parent (T)) /= N_Access_Function_Definition
@@ -5292,8 +5289,8 @@ package body Sem_Ch6 is
-- Ada 2005 (AI-231): Create and decorate an internal subtype
-- declaration corresponding to the null-excluding type of the
- -- formal in the enclosing scope. Finally, replace the
- -- parameter type of the formal with the internal subtype.
+ -- formal in the enclosing scope. Finally, replace the parameter
+ -- type of the formal with the internal subtype.
if Null_Exclusion_Present (Param_Spec) then
declare
@@ -5396,11 +5393,12 @@ package body Sem_Ch6 is
Analyze_Per_Use_Expression (Default, Formal_Type);
- -- Check that the designated type of an access parameter's
- -- default is not a class-wide type unless the parameter's
- -- designated type is also class-wide.
+ -- Check that the designated type of an access parameter's default
+ -- is not a class-wide type unless the parameter's designated type
+ -- is also class-wide.
if Ekind (Formal_Type) = E_Anonymous_Access_Type
+ and then not From_With_Type (Formal_Type)
and then Is_Class_Wide_Default (Default)
and then not Is_Class_Wide_Type (Designated_Type (Formal_Type))
then
@@ -5531,18 +5529,19 @@ package body Sem_Ch6 is
elsif Is_Array_Type (T) then
AS_Needed := True;
- -- The only other case which needs an actual subtype is an
- -- unconstrained record type which is an IN parameter (we cannot
- -- generate actual subtypes for the OUT or IN OUT case, since an
- -- assignment can change the discriminant values. However we exclude
- -- the case of initialization procedures, since discriminants are
- -- handled very specially in this context, see the section entitled
- -- "Handling of Discriminants" in Einfo. We also exclude the case of
- -- Discrim_SO_Functions (functions used in front end layout mode for
- -- size/offset values), since in such functions only discriminants
- -- are referenced, and not only are such subtypes not needed, but
- -- they cannot always be generated, because of order of elaboration
- -- issues.
+ -- The only other case needing an actual subtype is an unconstrained
+ -- record type which is an IN parameter (we cannot generate actual
+ -- subtypes for the OUT or IN OUT case, since an assignment can
+ -- change the discriminant values. However we exclude the case of
+ -- initialization procedures, since discriminants are handled very
+ -- specially in this context, see the section entitled "Handling of
+ -- Discriminants" in Einfo.
+
+ -- We also exclude the case of Discrim_SO_Functions (functions used
+ -- in front end layout mode for size/offset values), since in such
+ -- functions only discriminants are referenced, and not only are such
+ -- subtypes not needed, but they cannot always be generated, because
+ -- of order of elaboration issues.
elsif Is_Record_Type (T)
and then Ekind (Formal) = E_In_Parameter
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index c8cbcf2379f..285ab115a08 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -4924,6 +4924,19 @@ package body Sem_Res is
and then Ekind (Entity (Prefix (N))) = E_In_Parameter
then
null;
+
+ -- Ada 2005 (AI-326): Tagged incomplete types allowed. The wrong usages
+ -- are handled by Analyze_Access_Attribute, Analyze_Assignment, Analyze_
+ -- Object_Renaming, and Freeze_Entity.
+
+ elsif Ada_Version >= Ada_05
+ and then Is_Entity_Name (Prefix (N))
+ and then Ekind (Directly_Designated_Type (Etype (Prefix (N))))
+ = E_Incomplete_Type
+ and then Is_Tagged_Type (Directly_Designated_Type (Etype (Prefix (N))))
+ then
+ null;
+
else
Check_Fully_Declared (Typ, N);
end if;
diff --git a/gcc/ada/sinfo.adb b/gcc/ada/sinfo.adb
index 7a223e42cf6..553e7891086 100644
--- a/gcc/ada/sinfo.adb
+++ b/gcc/ada/sinfo.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2005, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2005 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- --
@@ -2450,6 +2450,7 @@ package body Sinfo is
begin
pragma Assert (False
or else NT (N).Nkind = N_Formal_Private_Type_Definition
+ or else NT (N).Nkind = N_Incomplete_Type_Declaration
or else NT (N).Nkind = N_Private_Type_Declaration
or else NT (N).Nkind = N_Record_Definition
or else NT (N).Nkind = N_With_Type_Clause);
@@ -5001,6 +5002,7 @@ package body Sinfo is
begin
pragma Assert (False
or else NT (N).Nkind = N_Formal_Private_Type_Definition
+ or else NT (N).Nkind = N_Incomplete_Type_Declaration
or else NT (N).Nkind = N_Private_Type_Declaration
or else NT (N).Nkind = N_Record_Definition
or else NT (N).Nkind = N_With_Type_Clause);
diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads
index cd1f5647bce..5172e55a35e 100644
--- a/gcc/ada/sinfo.ads
+++ b/gcc/ada/sinfo.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2005, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2005 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- --
@@ -2762,7 +2762,7 @@ package Sinfo is
-----------------------------------------
-- INCOMPLETE_TYPE_DECLARATION ::=
- -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART];
+ -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED];
-- N_Incomplete_Type_Declaration
-- Sloc points to TYPE
@@ -2771,6 +2771,7 @@ package Sinfo is
-- discriminant part, or if the discriminant part is an
-- unknown discriminant part)
-- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant
+ -- Tagged_Present (Flag15)
----------------------------
-- 3.11 Declarative Part --
@@ -3947,7 +3948,7 @@ package Sinfo is
-- parent library unit package name is present.
-- Identifier (Node1)
- -- Note that the identifier can also be an operator symbol here.
+ -- Note that the identifier can also be an operator symbol here
------------------------------
-- 6.1 Defining Designator --
@@ -4534,7 +4535,7 @@ package Sinfo is
-- HANDLED_SEQUENCE_OF_STATEMENTS
-- end [task_IDENTIFIER];
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Task_Body
-- Sloc points to TASK
@@ -4625,7 +4626,7 @@ package Sinfo is
-- Note: protected bodies are not allowed in Ada 83 mode
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Protected_Body
-- Sloc points to PROTECTED
@@ -4675,7 +4676,7 @@ package Sinfo is
-- HANDLED_SEQUENCE_OF_STATEMENTS
-- end [entry_IDENTIFIER]];
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- Note: there are no explicit declarations allowed in an accept
-- statement. However, the implicit declarations for any statement
@@ -4714,7 +4715,7 @@ package Sinfo is
-- the ENTRY_BODY_FORMAL_PART to avoid the N_Entry_Body node getting
-- too full (it would otherwise have too many fields)
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Entry_Body
-- Sloc points to ENTRY
@@ -4737,7 +4738,7 @@ package Sinfo is
-- formal part itself. Also this means that the barrier condition
-- always has somewhere to be stored.
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Entry_Body_Formal_Part
-- Sloc points to first token
@@ -4758,7 +4759,7 @@ package Sinfo is
-- ENTRY_INDEX_SPECIFICATION ::=
-- for DEFINING_IDENTIFIER in DISCRETE_SUBTYPE_DEFINITION
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Entry_Index_Specification
-- Sloc points to FOR
@@ -4774,7 +4775,7 @@ package Sinfo is
-- The parser may generate a procedure call for this construct. The
-- semantic pass must correct this misidentification where needed.
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Entry_Call_Statement
-- Sloc points to first token of name
@@ -4791,7 +4792,7 @@ package Sinfo is
-- Note: requeue statements are not permitted in Ada 83 mode
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Requeue_Statement
-- Sloc points to REQUEUE
@@ -4814,7 +4815,7 @@ package Sinfo is
-- Note: delay until statements are not permitted in Ada 83 mode
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Delay_Until_Statement
-- Sloc points to DELAY
@@ -4826,7 +4827,7 @@ package Sinfo is
-- DELAY_RELATIVE_STATEMENT ::= delay delay_EXPRESSION;
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Delay_Relative_Statement
-- Sloc points to DELAY
@@ -4857,7 +4858,7 @@ package Sinfo is
-- SEQUENCE_OF_STATEMENTS]
-- end select;
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- Note: the guard expression, if present, appears in the node for
-- the select alternative.
@@ -4892,7 +4893,7 @@ package Sinfo is
-- ACCEPT_ALTERNATIVE ::=
-- ACCEPT_STATEMENT [SEQUENCE_OF_STATEMENTS]
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Accept_Alternative
-- Sloc points to ACCEPT
@@ -4909,7 +4910,7 @@ package Sinfo is
-- DELAY_ALTERNATIVE ::=
-- DELAY_STATEMENT [SEQUENCE_OF_STATEMENTS]
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Delay_Alternative
-- Sloc points to DELAY
@@ -4924,7 +4925,7 @@ package Sinfo is
-- TERMINATE_ALTERNATIVE ::= terminate;
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Terminate_Alternative
-- Sloc points to TERMINATE
@@ -4943,7 +4944,7 @@ package Sinfo is
-- DELAY_ALTERNATIVE
-- end select;
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Timed_Entry_Call
-- Sloc points to SELECT
@@ -4957,7 +4958,7 @@ package Sinfo is
-- ENTRY_CALL_ALTERNATIVE ::=
-- ENTRY_CALL_STATEMENT [SEQUENCE_OF_STATEMENTS]
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Entry_Call_Alternative
-- Sloc points to first token of entry call statement
@@ -4976,7 +4977,7 @@ package Sinfo is
-- SEQUENCE_OF_STATEMENTS
-- end select;
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Conditional_Entry_Call
-- Sloc points to SELECT
@@ -4996,7 +4997,7 @@ package Sinfo is
-- Note: asynchronous select is not permitted in Ada 83 mode
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Asynchronous_Select
-- Sloc points to SELECT
@@ -5010,7 +5011,7 @@ package Sinfo is
-- TRIGGERING_ALTERNATIVE ::=
-- TRIGGERING_STATEMENT [SEQUENCE_OF_STATEMENTS]
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Triggering_Alternative
-- Sloc points to first token of triggering statement
@@ -5030,7 +5031,7 @@ package Sinfo is
-- ABORTABLE_PART ::= SEQUENCE_OF_STATEMENTS
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Abortable_Part
-- Sloc points to ABORT
@@ -5042,7 +5043,7 @@ package Sinfo is
-- ABORT_STATEMENT ::= abort task_NAME {, task_NAME};
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Abort_Statement
-- Sloc points to ABORT
@@ -5390,7 +5391,7 @@ package Sinfo is
-- is true even in the case of an accept statement (see description of
-- the N_Accept_Statement node).
- -- End_Label refers to the containing construct.
+ -- End_Label refers to the containing construct
-----------------------------
-- 11.2 Exception Handler --
@@ -6192,7 +6193,7 @@ package Sinfo is
-- an expanded name node to a selected component node to be done
-- easily, see Sinfo.CN.Change_Selected_Component_To_Expanded_Name.
- -- There is no special sprint syntax for an expanded name.
+ -- There is no special sprint syntax for an expanded name
-- N_Expanded_Name
-- Sloc points to the period
@@ -6448,7 +6449,7 @@ package Sinfo is
-- with all checks off, regardless of the current setting of scope
-- suppress flags.
- -- Sprint syntax: `(expression).
+ -- Sprint syntax: `(expression)
-- Note: this node is always removed from the tree (and replaced by
-- its constituent expression) on completion of analysis, so it only
@@ -6478,7 +6479,7 @@ package Sinfo is
-- clearly a function call to an instantiation of Unchecked_Conversion
-- is not a variable in any case.
- -- Sprint syntax: subtype-mark!(expression).
+ -- Sprint syntax: subtype-mark!(expression)
-- N_Unchecked_Type_Conversion
-- Sloc points to related node in source