From 534fd53491fb0026b878d93321880698a2930c7f Mon Sep 17 00:00:00 2001 From: Daniel Franke Date: Sun, 8 Jul 2007 18:41:35 -0400 Subject: [PATCH] re PR fortran/24784 (Warning about unused routine argument should not read "unused variable") gcc: 2007-07-08 Daniel Franke * function.c (do_warn_unused_parameter): Do not warn if TREE_NO_WARNING is set. gcc/fortran: 2007-07-08 Daniel Franke PR fortran/24784 PR fortran/28004 * trans-decl.c (generate_local_decl): Adjusted warning on unused dummy arguments, tell middle-end not to emit additional warnings. From-SVN: r126471 --- gcc/ChangeLog | 5 +++++ gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/trans-decl.c | 18 +++++++++++++++--- gcc/function.c | 3 ++- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 061a86befd3..16d0b220bae 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-07-08 Daniel Franke + + * function.c (do_warn_unused_parameter): Do not warn if + TREE_NO_WARNING is set. + 2007-07-08 Andreas Schwab * doc/invoke.texi (DEC Alpha/VMS Options): Fix typo. diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6066312cc5f..5afe8f85859 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2007-07-08 Daniel Franke + + PR fortran/24784 + PR fortran/28004 + * trans-decl.c (generate_local_decl): Adjusted warning on unused + dummy arguments, tell middle-end not to emit additional warnings. + 2007-07-08 Daniel Franke Tobias Schlüter diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 6e960630cad..09b5d9b81f5 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -3000,14 +3000,21 @@ generate_local_decl (gfc_symbol * sym) if (sym->attr.referenced) gfc_get_symbol_decl (sym); - else if (sym->attr.dummy && warn_unused_parameter) - gfc_warning ("Unused parameter %s declared at %L", sym->name, + /* INTENT(out) dummy arguments are likely meant to be set. */ + else if (warn_unused_variable + && sym->attr.dummy + && sym->attr.intent == INTENT_OUT) + gfc_warning ("dummy argument '%s' at %L was declared INTENT(OUT) but was not set", + sym->name, &sym->declared_at); + /* Specific warning for unused dummy arguments. */ + else if (warn_unused_variable && sym->attr.dummy) + gfc_warning ("unused dummy argument '%s' at %L", sym->name, &sym->declared_at); /* Warn for unused variables, but not if they're inside a common block or are use-associated. */ else if (warn_unused_variable && !(sym->attr.in_common || sym->attr.use_assoc)) - gfc_warning ("Unused variable %s declared at %L", sym->name, + gfc_warning ("unused variable '%s' declared at %L", sym->name, &sym->declared_at); /* For variable length CHARACTER parameters, the PARM_DECL already references the length variable, so force gfc_get_symbol_decl @@ -3022,6 +3029,11 @@ generate_local_decl (gfc_symbol * sym) sym->attr.referenced = 1; gfc_get_symbol_decl (sym); } + + /* We do not want the middle-end to warn about unused parameters + as this was already done above. */ + if (sym->attr.dummy && sym->backend_decl != NULL_TREE) + TREE_NO_WARNING(sym->backend_decl) = 1; } if (sym->attr.dummy == 1) diff --git a/gcc/function.c b/gcc/function.c index 1477b6a3bd8..c69e18b61f1 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -4287,7 +4287,8 @@ do_warn_unused_parameter (tree fn) for (decl = DECL_ARGUMENTS (fn); decl; decl = TREE_CHAIN (decl)) if (!TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL - && DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)) + && DECL_NAME (decl) && !DECL_ARTIFICIAL (decl) + && !TREE_NO_WARNING (decl)) warning (OPT_Wunused_parameter, "unused parameter %q+D", decl); }