Fortran: Fix deprecate warning with parameter

Only warn with !GCC$ ATTRIBUTES DEPRECATED if
deprecated PARMETERS are actually used.

gcc/fortran/ChangeLog:

	* resolve.c (resolve_values): Only show
	deprecated warning if attr.referenced.

gcc/testsuite/ChangeLog:

	* gfortran.dg/attr_deprecated-2.f90: New test.
This commit is contained in:
Tobias Burnus 2021-10-06 08:47:40 +02:00
parent e76a7a8a80
commit ece8b0fce6
2 changed files with 23 additions and 1 deletions

View file

@ -12351,7 +12351,7 @@ resolve_values (gfc_symbol *sym)
if (sym->value == NULL)
return;
if (sym->attr.ext_attr & (1 << EXT_ATTR_DEPRECATED))
if (sym->attr.ext_attr & (1 << EXT_ATTR_DEPRECATED) && sym->attr.referenced)
gfc_warning (OPT_Wdeprecated_declarations,
"Using parameter %qs declared at %L is deprecated",
sym->name, &sym->declared_at);

View file

@ -0,0 +1,22 @@
! { dg-do compile }
! { dg-additional-options "-Wall" }
!
! Ensure that only those parameters are warned for which are actually used
!
module m
implicit none
integer, parameter :: parm = 4 ! unused
integer, parameter :: parm2 = 4 ! used in the main program
integer, parameter :: parm3 = 4 ! used in "f()" - { dg-warning "Using parameter 'parm3' declared at .1. is deprecated" }
integer, save :: var, var2
!GCC$ ATTRIBUTES DEPRECATED :: parm, parm2, parm3, var, var2
contains
subroutine f()
print *, parm3 ! warning shown above
end
end module m
use m ! { dg-warning "Using parameter 'parm2' declared at .1. is deprecated" }
implicit none
print *, var2, parm2 ! { dg-warning "Using variable 'var2' at .1. is deprecated" }
end