[Ada] Enable delta_aggregate only in Ada 2020 mode

Message ID 20190820095124.GA75494@adacore.com
State New
Headers show
Series
  • [Ada] Enable delta_aggregate only in Ada 2020 mode
Related show

Commit Message

Pierre-Marie de Rodat Aug. 20, 2019, 9:51 a.m.
If the delta_aggregate feature is used, the -gnat2020 or -gnatX switch
must be given.

The following test must get an error if neither
-gnat2020 nor -gnatX is specified:

gcc -c delta_aggregate.ads -gnat2012

delta_aggregate.ads:4:18: delta_aggregate is an Ada 202x feature
delta_aggregate.ads:4:18: compile with -gnatX

package Delta_Aggregate is

   X : String := "Hello";
   Y : String := (X with delta 1 => 'h');

end Delta_Aggregate;

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

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

	* par-ch4.adb: Minor wording change in error messages.
	* sem_aggr.adb (Resolve_Delta_Aggregate): Emit an error for Ada
	versions prior to Ada 2020.

Patch

--- gcc/ada/par-ch4.adb
+++ gcc/ada/par-ch4.adb
@@ -2850,7 +2850,7 @@  package body Ch4 is
 
             when Tok_At_Sign =>  --  AI12-0125 : target_name
                if Ada_Version < Ada_2020 then
-                  Error_Msg_SC ("target name is an Ada 2020 extension");
+                  Error_Msg_SC ("target name is an Ada 202x feature");
                   Error_Msg_SC ("\compile with -gnatX");
                end if;
 
@@ -3325,7 +3325,7 @@  package body Ch4 is
       Set_Expression (Assoc_Node, P_Expression);
 
       if Ada_Version < Ada_2020 then
-         Error_Msg_SC ("iterated component is an Ada 2020 extension");
+         Error_Msg_SC ("iterated component is an Ada 202x feature");
          Error_Msg_SC ("\compile with -gnatX");
       end if;
 

--- gcc/ada/sem_aggr.adb
+++ gcc/ada/sem_aggr.adb
@@ -2799,6 +2799,11 @@  package body Sem_Aggr is
       Base : constant Node_Id := Expression (N);
 
    begin
+      if Ada_Version < Ada_2020 then
+         Error_Msg_N ("delta_aggregate is an Ada 202x feature", N);
+         Error_Msg_N ("\compile with -gnatX", N);
+      end if;
+
       if not Is_Composite_Type (Typ) then
          Error_Msg_N ("not a composite type", N);
       end if;