[Ada] Clean up support of square brackets
authorArnaud Charlet <charlet@adacore.com>
Thu, 2 Jul 2020 10:10:28 +0000 (06:10 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 19 Oct 2020 09:53:35 +0000 (05:53 -0400)
gcc/ada/

* par-ch4.adb (P_Aggregate_Or_Paren_Expr): Simplify code since
we are always under -gnatX if we encounter a Tok_Left_Bracket.
* scng.adb (Scan): [] is an aggregate under -gnatX and a wide
character otherwise.

gcc/ada/par-ch4.adb
gcc/ada/scng.adb

index e4ce02fa3aff3074baf022041de99e315b451031..cc5ed032bbbdc1b23a9a32aab3091c01c16d7b34 100644 (file)
@@ -1395,7 +1395,7 @@ package body Ch4 is
 
    begin
       Lparen_Sloc := Token_Ptr;
-      if Token = Tok_Left_Bracket and then Ada_Version >= Ada_2020 then
+      if Token = Tok_Left_Bracket then
          Scan;
 
          --  Special case for null aggregate in Ada 2020
index 2bac3a8b09b992577c0fe54f7a67f82bce8de40b..a2bd176e4fe0bfe679885209ac1b9eaef50b0457 100644 (file)
@@ -1378,14 +1378,19 @@ package body Scng is
          --  Left bracket
 
          when '[' =>
-            if Source (Scan_Ptr + 1) = '"' then
-               goto Scan_Wide_Character;
 
-            elsif Ada_Version >= Ada_2020 then
+            --  [] under -gnatX is an aggregate notation and the special
+            --  wide character notation becomes unsupported since the two
+            --  are ambiguous.
+
+            if Extensions_Allowed then
                Scan_Ptr := Scan_Ptr + 1;
                Token := Tok_Left_Bracket;
                return;
 
+            elsif Source (Scan_Ptr + 1) = '"' then
+               goto Scan_Wide_Character;
+
             else
                Error_Msg_S ("illegal character, replaced by ""(""");
                Scan_Ptr := Scan_Ptr + 1;