+2010-05-20 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/38407
+ * lang.opt (Wunused-dummy-argument): New option.
+ * gfortran.h (gfc_option_t): Add warn_unused_dummy_argument.
+ * options.c (gfc_init_options): Disable warn_unused_dummy_argument.
+ (set_Wall): Enable warn_unused_dummy_argument.
+ (gfc_handle_option): Set warn_unused_dummy_argument according to
+ command line.
+ * trans-decl.c (generate_local_decl): Separate warnings about
+ unused variables and unused dummy arguments.
+ * invoke.texi: Documented new option.
+
2010-05-20 Steven Bosscher <steven@gcc.gnu.org>
* trans-expr.c: Do not include convert.h, ggc.h, real.h, and gimple.h.
int warn_character_truncation;
int warn_array_temp;
int warn_align_commons;
+ int warn_unused_dummy_argument;
int max_errors;
int flag_all_intrinsics;
we recommend avoiding and that we believe are easy to avoid.
This currently includes @option{-Waliasing}, @option{-Wampersand},
@option{-Wconversion}, @option{-Wsurprising}, @option{-Wintrinsics-std},
-@option{-Wno-tabs}, @option{-Wintrinsic-shadow} and @option{-Wline-truncation}.
+@option{-Wno-tabs}, @option{-Wintrinsic-shadow}, @option{-Wline-truncation},
+and @option{-Wunused}.
@item -Waliasing
@opindex @code{Waliasing}
@code{INTRINSIC} declaration might be needed to get calls later resolved to
the desired intrinsic/procedure.
+@item -Wunused-dummy-argument
+@opindex @code{Wunused-dummy-argument}
+@cindex warnings, unused dummy argument
+@cindex unused dummy argument
+@cindex dummy argument, unused
+Warn about unused dummy arguments. This option is implied by @option{-Wall}.
+
@item -Wunused-parameter
@opindex @code{Wunused-parameter}
@cindex warnings, unused parameter
@cindex unused parameter
Contrary to @command{gcc}'s meaning of @option{-Wunused-parameter},
@command{gfortran}'s implementation of this option does not warn
-about unused dummy arguments, but about unused @code{PARAMETER} values.
-@option{-Wunused-parameter} is not included in @option{-Wall} but is
-implied by @option{-Wall -Wextra}.
+about unused dummy arguments (see @option{-Wunused-dummy-argument}),
+but about unused @code{PARAMETER} values. @option{-Wunused-parameter}
+is not included in @option{-Wall} but is implied by @option{-Wall -Wextra}.
@item -Walign-commons
@opindex @code{Walign-commons}
Fortran Warning
Warn if a user-procedure has the same name as an intrinsic
+Wunused-dummy-argument
+Fortran Warning
+Warn about unused dummy arguments.
+
cpp
Fortran Joined Separate Negative(nocpp)
Enable preprocessing
gfc_option.warn_intrinsic_shadow = 0;
gfc_option.warn_intrinsics_std = 0;
gfc_option.warn_align_commons = 1;
+ gfc_option.warn_unused_dummy_argument = 0;
gfc_option.max_errors = 25;
gfc_option.flag_all_intrinsics = 0;
gfc_option.warn_intrinsic_shadow = setting;
gfc_option.warn_intrinsics_std = setting;
gfc_option.warn_character_truncation = setting;
+ gfc_option.warn_unused_dummy_argument = setting;
warn_unused = setting;
warn_return_type = setting;
gfc_option.warn_align_commons = value;
break;
+ case OPT_Wunused_dummy_argument:
+ gfc_option.warn_unused_dummy_argument = value;
+ break;
+
case OPT_fall_intrinsics:
gfc_option.flag_all_intrinsics = 1;
break;
if (sym->attr.referenced)
gfc_get_symbol_decl (sym);
- /* INTENT(out) dummy arguments are likely meant to be set. */
- else if (warn_unused_variable
- && sym->attr.dummy
- && sym->attr.intent == INTENT_OUT)
+
+ /* Warnings for unused dummy arguments. */
+ else if (sym->attr.dummy)
{
- if (sym->ts.type != BT_DERIVED)
- gfc_warning ("Dummy argument '%s' at %L was declared INTENT(OUT) "
- "but was not set", sym->name, &sym->declared_at);
- else if (!gfc_has_default_initializer (sym->ts.u.derived))
- gfc_warning ("Derived-type dummy argument '%s' at %L was "
- "declared INTENT(OUT) but was not set and does "
- "not have a default initializer",
- sym->name, &sym->declared_at);
+ /* INTENT(out) dummy arguments are likely meant to be set. */
+ if (gfc_option.warn_unused_dummy_argument
+ && sym->attr.intent == INTENT_OUT)
+ {
+ if (sym->ts.type != BT_DERIVED)
+ gfc_warning ("Dummy argument '%s' at %L was declared "
+ "INTENT(OUT) but was not set", sym->name,
+ &sym->declared_at);
+ else if (!gfc_has_default_initializer (sym->ts.u.derived))
+ gfc_warning ("Derived-type dummy argument '%s' at %L was "
+ "declared INTENT(OUT) but was not set and "
+ "does not have a default initializer",
+ sym->name, &sym->declared_at);
+ }
+ else if (gfc_option.warn_unused_dummy_argument)
+ gfc_warning ("Unused dummy argument '%s' at %L", 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
+2010-05-20 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/38407
+ * warn_unused_dummy_argument_1.f90: New.
+ * warn_unused_dummy_argument_2.f90: New.
+
2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/30298
--- /dev/null
+! { dg-do "compile" }
+! { dg-options "-Wall" }
+!
+! PR fortran/38407
+!
+
+SUBROUTINE s(dummy) ! { dg-warning "Unused dummy" }
+ INTEGER, INTENT(in) :: dummy
+ INTEGER :: variable ! { dg-warning "Unused variable" }
+END SUBROUTINE
--- /dev/null
+! { dg-do "compile" }
+! { dg-options "-Wall -Wno-unused-dummy-argument" }
+!
+! PR fortran/38407
+!
+
+SUBROUTINE s(dummy)
+ INTEGER, INTENT(in) :: dummy
+ INTEGER :: variable ! { dg-warning "Unused variable" }
+END SUBROUTINE