From 861e589e8b957713fb02b5db0773c39bed2dcc61 Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Thu, 24 May 2018 13:05:49 +0000 Subject: [PATCH] [Ada] Add warning on redundant others_clause in array aggregate 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 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 | 6 ++++++ gcc/ada/exp_aggr.adb | 6 ++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/others1.adb | 13 +++++++++++++ 4 files changed, 29 insertions(+) create mode 100644 gcc/testsuite/gnat.dg/others1.adb diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index b30baad65bb..2e809767de0 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2018-05-24 Ed Schonberg + + * 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 * libgnat/a-cohama.ads: Add documentation. diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index 356686e9df5..81d35533b18 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ad047a47412..6ab715740b3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2018-05-24 Ed Schonberg + + * gnat.dg/others1.adb: New testcase. + 2018-05-24 Justin Squirek * 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 index 00000000000..59393fa00ff --- /dev/null +++ b/gcc/testsuite/gnat.dg/others1.adb @@ -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; -- 2.30.2