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); }