diff options
author | Bob Duff <duff@adacore.com> | 2021-09-09 12:24:32 -0400 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-10-05 08:20:01 +0000 |
commit | 439dae60ebf25ad432e9a654d10e10581771713a (patch) | |
tree | 68153c62775994bdba552c6130398133108f72c9 /gcc/ada/par-ch4.adb | |
parent | f88db1839a2492645c894946b24311cf592fd0fc (diff) | |
download | gcc-439dae60ebf25ad432e9a654d10e10581771713a.zip gcc-439dae60ebf25ad432e9a654d10e10581771713a.tar.gz gcc-439dae60ebf25ad432e9a654d10e10581771713a.tar.bz2 |
[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.
Diffstat (limited to 'gcc/ada/par-ch4.adb')
-rw-r--r-- | gcc/ada/par-ch4.adb | 88 |
1 files changed, 44 insertions, 44 deletions
diff --git a/gcc/ada/par-ch4.adb b/gcc/ada/par-ch4.adb index 20f8dd1..b6cc1a0 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; |