Wunused-parameter warnings are given from cgraph::finalize_function,
authorManuel López-Ibáñez <manu@gcc.gnu.org>
Mon, 29 Jun 2015 16:25:26 +0000 (16:25 +0000)
committerManuel López-Ibáñez <manu@gcc.gnu.org>
Mon, 29 Jun 2015 16:25:26 +0000 (16:25 +0000)
which is the middle-end. This is an oddity compared to other
-Wunused-* warnings. Moreover, Fortran has its own definition of
-Wunused-parameter that conflicts with the middle-end definition.

This patch moves the middle-end part of Wunused-parameter to the C/C++
FEs. I'm not sure if other FEs expected this warning to work. If so,
they do not seem to test for it. Ada, for example, explicitly disables
it.

gcc/ChangeLog:

2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>

PR fortran/66605
* cgraphunit.c (cgraph_node::finalize_function): Do not call
do_warn_unused_parameter.
* function.c (do_warn_unused_parameter): Move from here.
* function.h (do_warn_unused_parameter): Do not declare.

gcc/c-family/ChangeLog:

2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>

PR fortran/66605
* c-common.c (do_warn_unused_parameter): Move here.
* c-common.h (do_warn_unused_parameter): Declare.

gcc/ada/ChangeLog:

2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>

PR fortran/66605
* gcc-interface/misc.c (gnat_post_options): No need to disable
warn_unused_parameter anymore.

gcc/cp/ChangeLog:

2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>

PR fortran/66605
* decl.c (finish_function): Call do_warn_unused_parameter.

gcc/testsuite/ChangeLog:

2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>

PR fortran/66605
* gfortran.dg/wunused-parameter.f90: New test.

gcc/c/ChangeLog:

2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>

PR fortran/66605
* c-decl.c (finish_function): Call do_warn_unused_parameter.

From-SVN: r225135

15 files changed:
gcc/ChangeLog
gcc/ada/ChangeLog
gcc/ada/gcc-interface/misc.c
gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/c-family/c-common.h
gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/cgraphunit.c
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/function.c
gcc/function.h
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/wunused-parameter.f90 [new file with mode: 0644]

index fd533ab464f7ec2e1b73c587f2137d72bab3c5ad..0de1eadae55a61abdd5aff895531595bbaee67fd 100644 (file)
@@ -1,3 +1,11 @@
+2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR fortran/66605
+       * cgraphunit.c (cgraph_node::finalize_function): Do not call
+       do_warn_unused_parameter.
+       * function.c (do_warn_unused_parameter): Move from here.
+       * function.h (do_warn_unused_parameter): Do not declare.
+
 2015-06-29  Matthew Wahab  <matthew.wahab@arm.com>
 
        PR target/65697
index 89d8898e58d3d02918d89667271178f6b43ea413..97e293dec1284bc10f233d532c4782029c66a201 100644 (file)
@@ -1,3 +1,9 @@
+2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR fortran/66605
+       * gcc-interface/misc.c (gnat_post_options): No need to disable
+       warn_unused_parameter anymore.
+
 2015-06-26  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/trans.c (Handled_Sequence_Of_Statements_to_gnu): When
index 2f397ba1fe7842c5e3495823d654990e1eabf2ba..fec71999ac39c2ea88682e2f4f7e3fb0b7635436 100644 (file)
@@ -262,9 +262,6 @@ gnat_post_options (const char **pfilename ATTRIBUTE_UNUSED)
     sorry ("-fexcess-precision=standard for Ada");
   flag_excess_precision_cmdline = EXCESS_PRECISION_FAST;
 
-  /* ??? The warning machinery is outsmarted by Ada.  */
-  warn_unused_parameter = 0;
-
   /* No psABI change warnings for Ada.  */
   warn_psabi = 0;
 
index 2d6e3c5ec2a029e9dd8fd3dc8c018a2c58c51a43..0e03e7e87d0ad9b55c1dae9c152ce7577ec0970c 100644 (file)
@@ -1,3 +1,9 @@
+2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR fortran/66605
+       * c-common.c (do_warn_unused_parameter): Move here.
+       * c-common.h (do_warn_unused_parameter): Declare.
+
 2015-06-29  Marek Polacek  <polacek@redhat.com>
 
        PR c/66322
index 8156d6a1e2a56fc009c25daf56abe09d0dc50854..ac42e4aea9aa0ac01ceb278c91be71c0534d4c04 100644 (file)
@@ -12103,6 +12103,23 @@ do_warn_double_promotion (tree result_type, tree type1, tree type2,
   warning_at (loc, OPT_Wdouble_promotion, gmsgid, source_type, result_type);
 }
 
+/* Possibly warn about unused parameters.  */
+
+void
+do_warn_unused_parameter (tree fn)
+{
+  tree decl;
+
+  for (decl = DECL_ARGUMENTS (fn);
+       decl; decl = DECL_CHAIN (decl))
+    if (!TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL
+       && DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)
+       && !TREE_NO_WARNING (decl))
+      warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wunused_parameter,
+                 "unused parameter %qD", decl);
+}
+
+
 /* Setup a TYPE_DECL node as a typedef representation.
 
    X is a TYPE_DECL for a typedef statement.  Create a brand new
index 2b03703af86a57ef6b5446faa90fb054b80b088f..dd9839682c2a38f80101379ada9e81ddbbd5ab73 100644 (file)
@@ -1045,6 +1045,7 @@ extern void warn_for_sign_compare (location_t,
                                   tree op0, tree op1,
                                   tree result_type,
                                   enum tree_code resultcode);
+extern void do_warn_unused_parameter (tree);
 extern void do_warn_double_promotion (tree, tree, tree, const char *, 
                                      location_t);
 extern void set_underlying_type (tree);
index 2c5ba6db6a4eae5777d1a89f1a037e37e82fd408..15c2303c2de1e974606c174430bbf292944d34e0 100644 (file)
@@ -1,3 +1,8 @@
+2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR fortran/66605
+       * c-decl.c (finish_function): Call do_warn_unused_parameter.
+
 2015-06-29  Marek Polacek  <polacek@redhat.com>
 
        PR c/66322
index 6aac8c36157751814a46735c03352f6bb10d7121..383f0a766bf9f80e85284b70eecae35c6c7a4229 100644 (file)
@@ -9028,6 +9028,10 @@ finish_function (void)
      function.  */
   maybe_warn_unused_local_typedefs ();
 
+  /* Possibly warn about unused parameters.  */
+  if (warn_unused_parameter)
+    do_warn_unused_parameter (fndecl);
+
   /* Store the end of the function, so that we get good line number
      info for the epilogue.  */
   cfun->function_end_locus = input_location;
index 1b356467b7264566baeddc86281dd0718d3b4d8a..7e78bf789155c779f9620a4a5185e7f8465b85a7 100644 (file)
@@ -472,10 +472,6 @@ cgraph_node::finalize_function (tree decl, bool no_collect)
   if (!TREE_ASM_WRITTEN (decl))
     (*debug_hooks->deferred_inline_function) (decl);
 
-  /* Possibly warn about unused parameters.  */
-  if (warn_unused_parameter)
-    do_warn_unused_parameter (decl);
-
   if (!no_collect)
     ggc_collect ();
 
index c16b068f8f23fe1b0498feab8afc81f066ef6a84..aad780f6aea4bef593049b7c81eaa437ab8c86c2 100644 (file)
@@ -1,3 +1,8 @@
+2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR fortran/66605
+       * decl.c (finish_function): Call do_warn_unused_parameter.
+
 2015-06-29  Marek Polacek  <polacek@redhat.com>
 
        PR c/66322
index 498ed71bcf92e9430e093cd17cd12a81ae79b518..3f1cd340e16afcae03f54a4d78c0949b48f0f536 100644 (file)
@@ -14323,6 +14323,12 @@ finish_function (int flags)
      function.  */
   maybe_warn_unused_local_typedefs ();
 
+  /* Possibly warn about unused parameters.  */
+  if (warn_unused_parameter
+      && !processing_template_decl 
+      && !DECL_CLONED_FUNCTION_P (fndecl))
+    do_warn_unused_parameter (fndecl);
+
   /* Genericize before inlining.  */
   if (!processing_template_decl)
     {
index 4389bbd1aba6ef60bff632370c54cfdda26c05ee..de0b38fe52af23da6a74d8d0e6a8e342b4b2e274 100644 (file)
@@ -5210,20 +5210,6 @@ use_return_register (void)
   diddle_return_value (do_use_return_reg, NULL);
 }
 
-/* Possibly warn about unused parameters.  */
-void
-do_warn_unused_parameter (tree fn)
-{
-  tree decl;
-
-  for (decl = DECL_ARGUMENTS (fn);
-       decl; decl = DECL_CHAIN (decl))
-    if (!TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL
-       && DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)
-       && !TREE_NO_WARNING (decl))
-      warning (OPT_Wunused_parameter, "unused parameter %q+D", decl);
-}
-
 /* Set the location of the insn chain starting at INSN to LOC.  */
 
 static void
index dc4a8cc7c0f3b2eba4240324548b6295d883a2dc..e92c17c6fcc2c9ac47f8051795aadb6e83b95a3e 100644 (file)
@@ -614,7 +614,6 @@ extern void expand_dummy_function_end (void);
 extern void thread_prologue_and_epilogue_insns (void);
 extern void diddle_return_value (void (*)(rtx, void*), void*);
 extern void clobber_return_register (void);
-extern void do_warn_unused_parameter (tree);
 extern void expand_function_end (void);
 extern rtx get_arg_pointer_save_area (void);
 extern void maybe_copy_prologue_epilogue_insn (rtx, rtx);
index 3163ba6305e83d24b8a5e41e02d59d09741ce243..b4e9732fc0bfc06fc13d415cc22fe350793c1479 100644 (file)
@@ -1,3 +1,8 @@
+2015-06-29  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR fortran/66605
+       * gfortran.dg/wunused-parameter.f90: New test.
+
 2015-06-29  Richard Henderson  <rth@redhat.com>
 
        * gcc.target/i386/asm-flag-1.c: New.
diff --git a/gcc/testsuite/gfortran.dg/wunused-parameter.f90 b/gcc/testsuite/gfortran.dg/wunused-parameter.f90
new file mode 100644 (file)
index 0000000..df39af8
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do compile }
+! { dg-options "-Wunused-parameter" }
+! PR66605
+MODULE test
+  IMPLICIT NONE
+  INTEGER, PARAMETER :: wp = KIND(1.0D0)
+CONTAINS
+SUBROUTINE sub (neq, time, y, dydt)
+  IMPLICIT NONE    
+    INTEGER :: neq
+    REAL(WP) :: time, y(neq), dydt(neq)
+
+    dydt(1) = 1.0 / y(1)
+END SUBROUTINE sub
+END MODULE