[Ada] Add warning on redundant others_clause in array aggregate
authorEd Schonberg <schonberg@adacore.com>
Thu, 24 May 2018 13:05:49 +0000 (13:05 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 24 May 2018 13:05:49 +0000 (13:05 +0000)
This patch adds a warning on a redundant others_clause in an array aggregate
when all index positions are already specified in previous positional or named
associations. The warning is emitted when Warn_On_Redundant_Constructs is
enabled.

2018-05-24  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_aggr.adb (Flatten): Add a warning on an others clause in an array
aggregate with static bounds when named associations cover all index
positions and the others clause is redundant.

gcc/testsuite/

* gnat.dg/others1.adb: New testcase.

From-SVN: r260657

gcc/ada/ChangeLog
gcc/ada/exp_aggr.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/others1.adb [new file with mode: 0644]

index b30baad..2e80976 100644 (file)
@@ -1,3 +1,9 @@
+2018-05-24  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_aggr.adb (Flatten): Add a warning on an others clause in an array
+       aggregate with static bounds when named associations cover all index
+       positions and the others clause is redundant.
+
 2018-05-24  Raphael Amiard  <amiard@adacore.com>
 
        * libgnat/a-cohama.ads: Add documentation.
index 356686e..81d3553 100644 (file)
@@ -4581,6 +4581,12 @@ package body Exp_Aggr is
                         end if;
                      end loop;
 
+                     if Rep_Count = 0
+                       and then Warn_On_Redundant_Constructs
+                     then
+                        Error_Msg_N ("there are no others?r?", Elmt);
+                     end if;
+
                      exit Component_Loop;
 
                   --  Case of a subtype mark, identifier or expanded name
index ad047a4..6ab7157 100644 (file)
@@ -1,3 +1,7 @@
+2018-05-24  Ed Schonberg  <schonberg@adacore.com>
+
+       * gnat.dg/others1.adb: New testcase.
+
 2018-05-24  Justin Squirek  <squirek@adacore.com>
 
        * gnat.dg/raise_expr.adb: New testcase.
diff --git a/gcc/testsuite/gnat.dg/others1.adb b/gcc/testsuite/gnat.dg/others1.adb
new file mode 100644 (file)
index 0000000..59393fa
--- /dev/null
@@ -0,0 +1,13 @@
+--  { dg-do compile }
+--  { dg-options "-gnatwr" }
+
+procedure Others1 is
+   type Ar is Array (1..10) of Natural;
+   function five return integer is (5);
+   THing : Ar;
+begin
+   Thing := (1..5 => 22, 6 ..10 => 111, others => Five); --  { dg-warning "there are no others" }
+   if Thing (1) /= thing (5) then
+      raise Program_Error;
+   end if;
+end;