From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1914) id 5A0BB385701D; Tue, 5 Oct 2021 08:22:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5A0BB385701D MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Pierre-Marie de Rodat To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-4154] [Ada] Improve message on missing all/for in pre-Ada-2022 modes X-Act-Checkin: gcc X-Git-Author: Bob Duff X-Git-Refname: refs/heads/master X-Git-Oldrev: f88db1839a2492645c894946b24311cf592fd0fc X-Git-Newrev: 439dae60ebf25ad432e9a654d10e10581771713a Message-Id: <20211005082255.5A0BB385701D@sourceware.org> Date: Tue, 5 Oct 2021 08:22:55 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2021 08:22:55 -0000 https://gcc.gnu.org/g:439dae60ebf25ad432e9a654d10e10581771713a commit r12-4154-g439dae60ebf25ad432e9a654d10e10581771713a Author: Bob Duff Date: Thu Sep 9 12:24:32 2021 -0400 [Ada] Improve message on missing all/for in pre-Ada-2022 modes gcc/ada/ * par-ch4.adb (P_Iterated_Component_Association): Parse these features the same way in all language versions. Move the call to Error_Msg_Ada_2022_Feature into semantic analysis. * sem_aggr.adb (Resolve_Iterated_Component_Association, Resolve_Iterated_Association): Move the call to Error_Msg_Ada_2022_Feature here from par-ch4.adb. Diff: --- gcc/ada/par-ch4.adb | 88 ++++++++++++++++++++++++++-------------------------- gcc/ada/sem_aggr.adb | 5 +++ 2 files changed, 49 insertions(+), 44 deletions(-) diff --git a/gcc/ada/par-ch4.adb b/gcc/ada/par-ch4.adb index 20f8dd14eba..b6cc1a0729d 100644 --- a/gcc/ada/par-ch4.adb +++ b/gcc/ada/par-ch4.adb @@ -3518,62 +3518,62 @@ package body Ch4 is Assoc_Node := New_Node (N_Iterated_Component_Association, Prev_Token_Ptr); - if Token = Tok_In then - Set_Defining_Identifier (Assoc_Node, Id); - T_In; - Set_Discrete_Choices (Assoc_Node, P_Discrete_Choice_List); + case Token is + when Tok_In => + Set_Defining_Identifier (Assoc_Node, Id); + T_In; + Set_Discrete_Choices (Assoc_Node, P_Discrete_Choice_List); - -- The iterator may include a filter + -- The iterator may include a filter - if Token = Tok_When then - Scan; -- past WHEN - Filter := P_Condition; - end if; + if Token = Tok_When then + Scan; -- past WHEN + Filter := P_Condition; + end if; - if Token = Tok_Use then + if Token = Tok_Use then - -- Ada 2022 Key-expression is present, rewrite node as an - -- Iterated_Element_Association. + -- Ada 2022 Key-expression is present, rewrite node as an + -- Iterated_Element_Association. - Scan; -- past USE - Build_Iterated_Element_Association; - Set_Key_Expression (Assoc_Node, P_Expression); + Scan; -- past USE + Build_Iterated_Element_Association; + Set_Key_Expression (Assoc_Node, P_Expression); - elsif Present (Filter) then - -- A loop_parameter_specification also indicates an Ada 2022 - -- construct, in contrast with a subtype indication used in - -- array aggregates. + elsif Present (Filter) then + -- A loop_parameter_specification also indicates an Ada 2022 + -- construct, in contrast with a subtype indication used in + -- array aggregates. - Build_Iterated_Element_Association; - end if; + Build_Iterated_Element_Association; + end if; - TF_Arrow; - Set_Expression (Assoc_Node, P_Expression); + TF_Arrow; + Set_Expression (Assoc_Node, P_Expression); - elsif Ada_Version >= Ada_2022 - and then Token = Tok_Of - then - Restore_Scan_State (State); - Scan; -- past OF - Set_Defining_Identifier (Assoc_Node, Id); - Iter_Spec := P_Iterator_Specification (Id); - Set_Iterator_Specification (Assoc_Node, Iter_Spec); - - if Token = Tok_Use then - Scan; -- past USE - -- This is an iterated_element_association - - Assoc_Node := - New_Node (N_Iterated_Element_Association, Prev_Token_Ptr); + when Tok_Of => + Restore_Scan_State (State); + Scan; -- past OF + Set_Defining_Identifier (Assoc_Node, Id); + Iter_Spec := P_Iterator_Specification (Id); Set_Iterator_Specification (Assoc_Node, Iter_Spec); - Set_Key_Expression (Assoc_Node, P_Expression); - end if; - TF_Arrow; - Set_Expression (Assoc_Node, P_Expression); - end if; + if Token = Tok_Use then + Scan; -- past USE + -- This is an iterated_element_association - Error_Msg_Ada_2022_Feature ("iterated component", Token_Ptr); + Assoc_Node := + New_Node (N_Iterated_Element_Association, Prev_Token_Ptr); + Set_Iterator_Specification (Assoc_Node, Iter_Spec); + Set_Key_Expression (Assoc_Node, P_Expression); + end if; + + TF_Arrow; + Set_Expression (Assoc_Node, P_Expression); + + when others => + Error_Msg_AP ("missing IN or OF"); + end case; return Assoc_Node; end P_Iterated_Component_Association; diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index 752b84d6b48..3283fbbb8d9 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -1640,6 +1640,8 @@ package body Sem_Aggr is -- Start of processing for Resolve_Iterated_Component_Association begin + Error_Msg_Ada_2022_Feature ("iterated component", Loc); + if Present (Iterator_Specification (N)) then Analyze (Name (Iterator_Specification (N))); @@ -2867,6 +2869,7 @@ package body Sem_Aggr is Key_Type : Entity_Id; Elmt_Type : Entity_Id) is + Loc : constant Source_Ptr := Sloc (N); Choice : Node_Id; Ent : Entity_Id; Expr : Node_Id; @@ -2877,6 +2880,8 @@ package body Sem_Aggr is Typ : Entity_Id := Empty; begin + Error_Msg_Ada_2022_Feature ("iterated component", Loc); + -- If this is an Iterated_Element_Association then either a -- an Iterator_Specification or a Loop_Parameter specification -- is present. In both cases a Key_Expression is present.