Commit 861e589e by Ed Schonberg Committed by Pierre-Marie de Rodat

[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  <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
parent 0347c01b
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> 2018-05-24 Raphael Amiard <amiard@adacore.com>
* libgnat/a-cohama.ads: Add documentation. * libgnat/a-cohama.ads: Add documentation.
......
...@@ -4581,6 +4581,12 @@ package body Exp_Aggr is ...@@ -4581,6 +4581,12 @@ package body Exp_Aggr is
end if; end if;
end loop; 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; exit Component_Loop;
-- Case of a subtype mark, identifier or expanded name -- Case of a subtype mark, identifier or expanded name
......
2018-05-24 Ed Schonberg <schonberg@adacore.com>
* gnat.dg/others1.adb: New testcase.
2018-05-24 Justin Squirek <squirek@adacore.com> 2018-05-24 Justin Squirek <squirek@adacore.com>
* gnat.dg/raise_expr.adb: New testcase. * gnat.dg/raise_expr.adb: New testcase.
......
-- { 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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment