aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2012-02-05 20:14:00 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2012-02-05 20:14:00 +0000
commitd20597cb758fc46b8ca1de147a99eb9ed4758f7c (patch)
treea0528138fc85155466228dfccaa174157581b083 /gcc
parent83f42cad22eb85b74dff0592029b39870795c381 (diff)
downloadgcc-d20597cb758fc46b8ca1de147a99eb9ed4758f7c.zip
gcc-d20597cb758fc46b8ca1de147a99eb9ed4758f7c.tar.gz
gcc-d20597cb758fc46b8ca1de147a99eb9ed4758f7c.tar.bz2
re PR fortran/48847 (Wrong "unused parameter" warning with interface block)
2012-02-05 Thomas König <tkoenig@gcc.gnu.org> PR fortran/48847 * trans-decl.c: Warn about unused dummy procedure arguments if -Wunused-dummy-argument is specified. Suppress middle-end warnings about procedure arguments. 2012-02-05 Thomas König <tkoenig@gcc.gnu.org> PR fortran/48847 * gfortran.dg/warn_unused_dummy_argument_3.f90: New test. From-SVN: r183916
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/trans-decl.c16
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_3.f9018
4 files changed, 46 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index e1e81b7..4cde6e2 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2012-02-05 Thomas König <tkoenig@gcc.gnu.org>
+
+ PR fortran/48847
+ * trans-decl.c: Warn about unused dummy procedure arguments
+ if -Wunused-dummy-argument is specified. Suppress middle-end
+ warnings about procedure arguments.
+
2012-02-05 Paul Thomas <pault@gcc.gnu.org>
* trans-array.c (gfc_array_allocate): Zero memory for all class
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index cb8f613..e497fd6 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -4683,6 +4683,22 @@ generate_local_decl (gfc_symbol * sym)
&& sym->ts.type == BT_CHARACTER && sym->ts.is_c_interop
&& sym->ns->proc_name != NULL && sym->ns->proc_name->attr.is_bind_c)
gfc_conv_scalar_char_value (sym, NULL, NULL);
+
+ /* Unused procedure passed as dummy argument. */
+ if (sym->attr.flavor == FL_PROCEDURE)
+ {
+ if (!sym->attr.referenced)
+ {
+ if (gfc_option.warn_unused_dummy_argument)
+ gfc_warning ("Unused dummy argument '%s' at %L", sym->name,
+ &sym->declared_at);
+ }
+
+ /* Silence bogus "unused parameter" warnings from the
+ middle end. */
+ if (sym->backend_decl != NULL_TREE)
+ TREE_NO_WARNING (sym->backend_decl) = 1;
+ }
}
/* Make sure we convert the types of the derived types from iso_c_binding
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4c9c499..306ad5c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-02-05 Thomas König <tkoenig@gcc.gnu.org>
+
+ PR fortran/48847
+ * gfortran.dg/warn_unused_dummy_argument_3.f90: New test.
+
2012-02-05 Paul Thomas <pault@gcc.gnu.org>
PR fortran/52102
diff --git a/gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_3.f90 b/gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_3.f90
new file mode 100644
index 0000000..f15026e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_3.f90
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! { dg-options "-Wunused-dummy-argument -Wunused-parameter" }
+! PR 48847 - we used to generate a warning for g(), and none for h()
+program main
+contains
+ function f(g,h)
+ interface
+ real function g()
+ end function g
+ end interface
+ interface
+ real function h() ! { dg-warning "Unused dummy argument" }
+ end function h
+ end interface
+ real :: f
+ f = g()
+ end function f
+end program main