aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/par-ch4.adb
diff options
context:
space:
mode:
authorBob Duff <duff@adacore.com>2020-07-02 18:16:57 -0400
committerPierre-Marie de Rodat <derodat@adacore.com>2020-10-19 05:53:36 -0400
commit8c8b92dcc8f0b45af96aecc9e83c52175d6f4ce5 (patch)
treebfc76d6835d590f5de2dafa5009ec34f1a0e4421 /gcc/ada/par-ch4.adb
parentb9d685922c7d960ab5b0beae348cfb37df08d115 (diff)
downloadgcc-8c8b92dcc8f0b45af96aecc9e83c52175d6f4ce5.zip
gcc-8c8b92dcc8f0b45af96aecc9e83c52175d6f4ce5.tar.gz
gcc-8c8b92dcc8f0b45af96aecc9e83c52175d6f4ce5.tar.bz2
[Ada] Ada2020: matching parentheses and brackets
gcc/ada/ * par-ch4.adb (P_Aggregate_Or_Paren_Expr): Require matching parens or brackets. * par.adb, par-tchk.adb (T_Right_Bracket): New procedure to give an error on missing ].
Diffstat (limited to 'gcc/ada/par-ch4.adb')
-rw-r--r--gcc/ada/par-ch4.adb32
1 files changed, 19 insertions, 13 deletions
diff --git a/gcc/ada/par-ch4.adb b/gcc/ada/par-ch4.adb
index cc5ed03..649c88e 100644
--- a/gcc/ada/par-ch4.adb
+++ b/gcc/ada/par-ch4.adb
@@ -1391,6 +1391,9 @@ package body Ch4 is
return Maybe;
end Is_Quantified_Expression;
+ Start_Token : constant Token_Type := Token;
+ -- Used to prevent mismatches (...] and [...)
+
-- Start of processing for P_Aggregate_Or_Paren_Expr
begin
@@ -1697,23 +1700,26 @@ package body Ch4 is
end if;
end loop;
- -- All component associations (positional and named) have been scanned
+ -- All component associations (positional and named) have been scanned.
+ -- Scan ] or ) based on Start_Token.
- if Token = Tok_Right_Bracket and then Ada_Version >= Ada_2020 then
- Set_Component_Associations (Aggregate_Node, Assoc_List);
- Set_Is_Homogeneous_Aggregate (Aggregate_Node);
- Scan; -- past right bracket
+ case Start_Token is
+ when Tok_Left_Bracket =>
+ Set_Component_Associations (Aggregate_Node, Assoc_List);
+ Set_Is_Homogeneous_Aggregate (Aggregate_Node);
+ T_Right_Bracket;
- if Token = Tok_Apostrophe then
- Scan;
+ if Token = Tok_Apostrophe then
+ Scan;
- if Token = Tok_Identifier then
- return P_Reduction_Attribute_Reference (Aggregate_Node);
+ if Token = Tok_Identifier then
+ return P_Reduction_Attribute_Reference (Aggregate_Node);
+ end if;
end if;
- end if;
- else
- T_Right_Paren;
- end if;
+ when Tok_Left_Paren =>
+ T_Right_Paren;
+ when others => raise Program_Error;
+ end case;
if Nkind (Aggregate_Node) /= N_Delta_Aggregate then
Set_Expressions (Aggregate_Node, Expr_List);