From 483af72e4bf2499fdbbf6b6e061318eaa9ba2b2d Mon Sep 17 00:00:00 2001 From: Justin Squirek Date: Wed, 18 Sep 2019 08:33:23 +0000 Subject: [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 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 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/sem_ch8.adb | 17 ++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) (limited to 'gcc/ada') diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index cbb1e16..6823972 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,11 @@ 2019-09-18 Justin Squirek + * 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 + * exp_ch4.adb (Expand_N_Type_Conversion): Add calculation of an alternative operand for the purposes of generating accessibility checks. diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb index a7918da..5d03f835 100644 --- a/gcc/ada/sem_ch8.adb +++ b/gcc/ada/sem_ch8.adb @@ -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 -- cgit v1.1