[Ada] Spurious ineffective use_clause warning

This patch fixes an issue whereby expansion of post conditions may lead
to spurious ineffective use_clause warnings when a use type clause is
present in a package specification and a use package clause exists in
the package body on the package containing said type.

2019-09-18  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* sem_ch8.adb (Use_One_Type): Add guard to prevent warning on a
	reundant use package clause where there is no previous
	use_clause in the chain.

gcc/testsuite/

	* gnat.dg/warn30.adb, gnat.dg/warn30.ads: New testcase.

From-SVN: r275861
This commit is contained in:
Justin Squirek 2019-09-18 08:33:23 +00:00 committed by Pierre-Marie de Rodat
parent 1b2f53bb9a
commit 483af72e4b
5 changed files with 38 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2019-09-18 Justin Squirek <squirek@adacore.com>
* sem_ch8.adb (Use_One_Type): Add guard to prevent warning on a
reundant use package clause where there is no previous
use_clause in the chain.
2019-09-18 Justin Squirek <squirek@adacore.com>
* exp_ch4.adb (Expand_N_Type_Conversion): Add calculation of an

View File

@ -10337,11 +10337,18 @@ package body Sem_Ch8 is
-- The package where T is declared is already used
elsif In_Use (Scope (T)) then
Error_Msg_Sloc :=
Sloc (Find_Most_Prev (Current_Use_Clause (Scope (T))));
Error_Msg_NE -- CODEFIX
("& is already use-visible through package use clause #??",
Id, T);
-- Due to expansion of contracts we could be attempting to issue
-- a spurious warning - so verify there is a previous use clause.
if Current_Use_Clause (Scope (T)) /=
Find_Most_Prev (Current_Use_Clause (Scope (T)))
then
Error_Msg_Sloc :=
Sloc (Find_Most_Prev (Current_Use_Clause (Scope (T))));
Error_Msg_NE -- CODEFIX
("& is already use-visible through package use clause #??",
Id, T);
end if;
-- The current scope is the package where T is declared

View File

@ -1,3 +1,7 @@
2019-09-18 Justin Squirek <squirek@adacore.com>
* gnat.dg/warn30.adb, gnat.dg/warn30.ads: New testcase.
2019-09-18 Justin Squirek <squirek@adacore.com>
* gnat.dg/access8.adb, gnat.dg/access8_pkg.adb,

View File

@ -0,0 +1,10 @@
-- { dg-do compile }
-- { dg-options "-gnatwa" }
with Interfaces; use Interfaces;
package body Warn30 is
procedure Incr (X : in out Interfaces.Integer_64) is
begin
X := X + 1;
end Incr;
end Warn30;

View File

@ -0,0 +1,6 @@
with Interfaces; use type Interfaces.Integer_64;
package Warn30 is
procedure Incr (X : in out Interfaces.Integer_64) with
Post => X = X'Old + 1;
end Warn30;