There are still ongoing discussions about the usefulness of this as a
language attribute, so keep it under -gnatX for now.

Tested on x86_64-pc-linux-gnu, committed on trunk

2020-06-05  Arnaud Charlet  <char...@adacore.com>

gcc/ada/

        * scng.adb (Scan): Fix typo to take into account all future
        versions of Ada.
        * sem_attr.ads (Attribute_Impl_Def): Add Attribute_Reduce for
        now.
        * sem_attr.adb (Analyze_Attribute): Only allow 'Reduce under
        -gnatX.
        * snames.ads-tmpl (Name_Reduce): Update comment.
--- gcc/ada/scng.adb
+++ gcc/ada/scng.adb
@@ -1701,7 +1701,7 @@ package body Scng is
             if Source (Scan_Ptr + 1) = '"' then
                goto Scan_Wide_Character;
 
-            elsif Ada_Version = Ada_2020 then
+            elsif Ada_Version >= Ada_2020 then
                Scan_Ptr := Scan_Ptr + 1;
                Token := Tok_Left_Bracket;
                return;

--- gcc/ada/sem_attr.adb
+++ gcc/ada/sem_attr.adb
@@ -5572,6 +5572,11 @@ package body Sem_Attr is
       when Attribute_Reduce =>
          Check_E2;
 
+         if not Extensions_Allowed then
+            Error_Attr
+              ("% attribute only supported under -gnatX", P);
+         end if;
+
          declare
             Stream : constant Node_Id := Prefix (N);
             Typ    : Entity_Id;

--- gcc/ada/sem_attr.ads
+++ gcc/ada/sem_attr.ads
@@ -397,6 +397,13 @@ package Sem_Attr is
       --  as Range applied to the array itself. The result is of type universal
       --  integer.
 
+      ------------
+      -- Reduce --
+      ------------
+
+      Attribute_Reduce => True,
+      --  See AI12-0262-1
+
       ---------
       -- Ref --
       ---------

--- gcc/ada/snames.ads-tmpl
+++ gcc/ada/snames.ads-tmpl
@@ -976,7 +976,7 @@ package Snames is
    Name_Priority                       : constant Name_Id := N + $; -- Ada 05
    Name_Range                          : constant Name_Id := N + $;
    Name_Range_Length                   : constant Name_Id := N + $; -- GNAT
-   Name_Reduce                         : constant Name_Id := N + $;
+   Name_Reduce                         : constant Name_Id := N + $; -- GNAT
    Name_Ref                            : constant Name_Id := N + $; -- GNAT
    Name_Restriction_Set                : constant Name_Id := N + $; -- GNAT
    Name_Result                         : constant Name_Id := N + $; -- GNAT

Reply via email to