re PR fortran/38407 (Wishlist: -Wunused-dummy-argument and -Wno-unused-dummy-argument)
gcc/fortran/: 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. gcc/testsuite/: 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. From-SVN: r159641
This commit is contained in:
parent
a48ba7e10b
commit
4ed44cccdd
|
@ -1,3 +1,16 @@
|
|||
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.
|
||||
|
|
|
@ -2117,6 +2117,7 @@ typedef struct
|
|||
int warn_character_truncation;
|
||||
int warn_array_temp;
|
||||
int warn_align_commons;
|
||||
int warn_unused_dummy_argument;
|
||||
int max_errors;
|
||||
|
||||
int flag_all_intrinsics;
|
||||
|
|
|
@ -690,7 +690,8 @@ Enables commonly used warning options pertaining to usage that
|
|||
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}
|
||||
|
@ -832,15 +833,22 @@ intrinsic; in this case, an explicit interface or @code{EXTERNAL} or
|
|||
@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}
|
||||
|
|
|
@ -132,6 +132,10 @@ Wintrinsic-shadow
|
|||
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
|
||||
|
|
|
@ -87,6 +87,7 @@ gfc_init_options (unsigned int argc, const char **argv)
|
|||
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;
|
||||
|
@ -417,6 +418,7 @@ set_Wall (int setting)
|
|||
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;
|
||||
|
@ -616,6 +618,10 @@ gfc_handle_option (size_t scode, const char *arg, int value,
|
|||
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;
|
||||
|
|
|
@ -3878,24 +3878,29 @@ generate_local_decl (gfc_symbol * sym)
|
|||
|
||||
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
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
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
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
! { 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
|
|
@ -0,0 +1,10 @@
|
|||
! { 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
|
Loading…
Reference in New Issue