diff options
author | Justin Squirek <squirek@adacore.com> | 2018-09-26 09:19:53 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2018-09-26 09:19:53 +0000 |
commit | 0ebf09ed046391377af708ab2471403d3affdddd (patch) | |
tree | 9daee39e9cfe4cf3897f36e82bf02f98605ec927 | |
parent | cec0185c7e02aa52ffceddbf46a16a66ed47459c (diff) | |
download | gcc-0ebf09ed046391377af708ab2471403d3affdddd.zip gcc-0ebf09ed046391377af708ab2471403d3affdddd.tar.gz gcc-0ebf09ed046391377af708ab2471403d3affdddd.tar.bz2 |
[Ada] Spurious ineffective use_clause warning
This patch fixes an issue whereby user-defined subprograms used as
generic actuals with corresponding formals containing other formal types
led to spurious ineffective use_clause warnings.
2018-09-26 Justin Squirek <squirek@adacore.com>
gcc/ada/
* sem_ch8.adb (Analyze_Subprogram_Renaming): Add extra condition
to check for unmarked subprogram references coming from
renamings.
gcc/testsuite/
* gnat.dg/warn16.adb: New testcase.
From-SVN: r264635
-rw-r--r-- | gcc/ada/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ada/sem_ch8.adb | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/warn16.adb | 38 |
4 files changed, 57 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 5e0adf4..f460963 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2018-09-26 Justin Squirek <squirek@adacore.com> + + * sem_ch8.adb (Analyze_Subprogram_Renaming): Add extra condition + to check for unmarked subprogram references coming from + renamings. + 2018-09-26 Arnaud Charlet <charlet@adacore.com> * back_end.adb (Scan_Compiler_Arguments): Store -G xxx switches. diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb index f538144..fb4dcb5 100644 --- a/gcc/ada/sem_ch8.adb +++ b/gcc/ada/sem_ch8.adb @@ -3692,8 +3692,16 @@ package body Sem_Ch8 is -- and mark any use_package_clauses that affect the visibility of the -- implicit generic actual. + -- Also, we may be looking at an internal renaming of a user-defined + -- subprogram created for a generic formal subprogram association, + -- which will also have to be marked here. This can occur when the + -- corresponding formal subprogram contains references to other generic + -- formals. + if Is_Generic_Actual_Subprogram (New_S) - and then (Is_Intrinsic_Subprogram (New_S) or else From_Default (N)) + and then (Is_Intrinsic_Subprogram (New_S) + or else From_Default (N) + or else Nkind (N) = N_Subprogram_Renaming_Declaration) then Mark_Use_Clauses (New_S); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cf904eb..be0c2c3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2018-09-26 Justin Squirek <squirek@adacore.com> + + * gnat.dg/warn16.adb: New testcase. + 2018-09-26 Hristian Kirtchev <kirtchev@adacore.com> * gnat.dg/elab7.adb, gnat.dg/elab7_pkg1.adb, diff --git a/gcc/testsuite/gnat.dg/warn16.adb b/gcc/testsuite/gnat.dg/warn16.adb new file mode 100644 index 0000000..cee84dd --- /dev/null +++ b/gcc/testsuite/gnat.dg/warn16.adb @@ -0,0 +1,38 @@ +-- { dg-do compile } +-- { dg-options "-gnatwa" } + +procedure Warn16 is + + package Define is + type Key_Type is record + Value : Integer := 0; + end record; + + function "=" (Left : in Key_Type; + Right : in Key_Type) + return Boolean; + end; + package body Define is + function "=" (Left : in Key_Type; + Right : in Key_Type) + return Boolean is + begin + return Left.Value = Right.Value; + end; + end; + + generic + type Key_Type is private; + with function "=" (Left : in Key_Type; + Right : in Key_Type) + return Boolean; + package Oper is end; + + use type Define.Key_Type; -- !!! + + package Inst is new Oper (Key_Type => Define.Key_Type, + "=" => "="); + pragma Unreferenced (Inst); +begin + null; +end; |