aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2021-10-06 08:47:40 +0200
committerTobias Burnus <tobias@codesourcery.com>2021-10-06 08:47:40 +0200
commitece8b0fce6bbfb1e531de8164da47eeed80d3cf1 (patch)
treeb0a2c20a13b927f1e475b7321b6287a74fb2f69c /gcc
parente76a7a8a807e7ba0e171e953b9b1ff5fa1b0f247 (diff)
downloadgcc-ece8b0fce6bbfb1e531de8164da47eeed80d3cf1.zip
gcc-ece8b0fce6bbfb1e531de8164da47eeed80d3cf1.tar.gz
gcc-ece8b0fce6bbfb1e531de8164da47eeed80d3cf1.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/resolve.c2
-rw-r--r--gcc/testsuite/gfortran.dg/attr_deprecated-2.f9022
2 files changed, 23 insertions, 1 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 511fe3a..0d0af39 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -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);
diff --git a/gcc/testsuite/gfortran.dg/attr_deprecated-2.f90 b/gcc/testsuite/gfortran.dg/attr_deprecated-2.f90
new file mode 100644
index 0000000..97a365a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/attr_deprecated-2.f90
@@ -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