From: Javier Miranda Date: Thu, 7 Jul 2005 09:46:16 +0000 (+0200) Subject: freeze.adb (Freeze_Entity): Check wrong uses of tag incomplete types. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d8db0bca7bcac3aca1f485a92d13b7b70edafdf7;p=gcc.git freeze.adb (Freeze_Entity): Check wrong uses of tag incomplete types. 2005-07-07 Javier Miranda * freeze.adb (Freeze_Entity): Check wrong uses of tag incomplete types. * par-ch3.adb (P_Type_Declaration): Give support to tagged incomplete types: -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED]; -- * sem_attr.adb (Check_Not_Incomplete_Type): Additional checks for wrong use of tag incomplete types. * sem_ch3.adb (Analyze_Incomplete_Type): Add mininum decoration to give support to tagged incomplete types. * sem_ch5.adb (Analyze_Case_Statement): In generated code, if the expression is a discriminant reference and its type is private, as can happen within a stream operation for a mutable record, use the full view of the type to resolve the case alternatives. (Analyze_Assignment): Check wrong dereference of incomplete types. * sem_ch6.adb (Process_Formals): Allow the use of tagged incomplete types. * sem_res.adb (Resolve_Explicit_Dereference): Allow the use of tagged incomplete types. * sinfo.adb (Taggged_Present/Set_Taggged_Present): Applicable to N_Incomplete_Type_Declaration nodes. * sinfo.ads (N_Incomplete_Type_Declaration): Addition of attribute Tag_Present to give support to tagged incomplete types: -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED]; -- From-SVN: r101695 --- 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