Commit 4ed44ccc by Daniel Franke Committed by Daniel Franke

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
parent a48ba7e1
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> 2010-05-20 Steven Bosscher <steven@gcc.gnu.org>
* trans-expr.c: Do not include convert.h, ggc.h, real.h, and gimple.h. * trans-expr.c: Do not include convert.h, ggc.h, real.h, and gimple.h.
......
...@@ -2117,6 +2117,7 @@ typedef struct ...@@ -2117,6 +2117,7 @@ typedef struct
int warn_character_truncation; int warn_character_truncation;
int warn_array_temp; int warn_array_temp;
int warn_align_commons; int warn_align_commons;
int warn_unused_dummy_argument;
int max_errors; int max_errors;
int flag_all_intrinsics; int flag_all_intrinsics;
......
...@@ -690,7 +690,8 @@ Enables commonly used warning options pertaining to usage that ...@@ -690,7 +690,8 @@ Enables commonly used warning options pertaining to usage that
we recommend avoiding and that we believe are easy to avoid. we recommend avoiding and that we believe are easy to avoid.
This currently includes @option{-Waliasing}, @option{-Wampersand}, This currently includes @option{-Waliasing}, @option{-Wampersand},
@option{-Wconversion}, @option{-Wsurprising}, @option{-Wintrinsics-std}, @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 @item -Waliasing
@opindex @code{Waliasing} @opindex @code{Waliasing}
...@@ -832,15 +833,22 @@ intrinsic; in this case, an explicit interface or @code{EXTERNAL} or ...@@ -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 @code{INTRINSIC} declaration might be needed to get calls later resolved to
the desired intrinsic/procedure. 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 @item -Wunused-parameter
@opindex @code{Wunused-parameter} @opindex @code{Wunused-parameter}
@cindex warnings, unused parameter @cindex warnings, unused parameter
@cindex unused parameter @cindex unused parameter
Contrary to @command{gcc}'s meaning of @option{-Wunused-parameter}, Contrary to @command{gcc}'s meaning of @option{-Wunused-parameter},
@command{gfortran}'s implementation of this option does not warn @command{gfortran}'s implementation of this option does not warn
about unused dummy arguments, but about unused @code{PARAMETER} values. about unused dummy arguments (see @option{-Wunused-dummy-argument}),
@option{-Wunused-parameter} is not included in @option{-Wall} but is but about unused @code{PARAMETER} values. @option{-Wunused-parameter}
implied by @option{-Wall -Wextra}. is not included in @option{-Wall} but is implied by @option{-Wall -Wextra}.
@item -Walign-commons @item -Walign-commons
@opindex @code{Walign-commons} @opindex @code{Walign-commons}
......
...@@ -132,6 +132,10 @@ Wintrinsic-shadow ...@@ -132,6 +132,10 @@ Wintrinsic-shadow
Fortran Warning Fortran Warning
Warn if a user-procedure has the same name as an intrinsic Warn if a user-procedure has the same name as an intrinsic
Wunused-dummy-argument
Fortran Warning
Warn about unused dummy arguments.
cpp cpp
Fortran Joined Separate Negative(nocpp) Fortran Joined Separate Negative(nocpp)
Enable preprocessing Enable preprocessing
......
...@@ -87,6 +87,7 @@ gfc_init_options (unsigned int argc, const char **argv) ...@@ -87,6 +87,7 @@ gfc_init_options (unsigned int argc, const char **argv)
gfc_option.warn_intrinsic_shadow = 0; gfc_option.warn_intrinsic_shadow = 0;
gfc_option.warn_intrinsics_std = 0; gfc_option.warn_intrinsics_std = 0;
gfc_option.warn_align_commons = 1; gfc_option.warn_align_commons = 1;
gfc_option.warn_unused_dummy_argument = 0;
gfc_option.max_errors = 25; gfc_option.max_errors = 25;
gfc_option.flag_all_intrinsics = 0; gfc_option.flag_all_intrinsics = 0;
...@@ -417,6 +418,7 @@ set_Wall (int setting) ...@@ -417,6 +418,7 @@ set_Wall (int setting)
gfc_option.warn_intrinsic_shadow = setting; gfc_option.warn_intrinsic_shadow = setting;
gfc_option.warn_intrinsics_std = setting; gfc_option.warn_intrinsics_std = setting;
gfc_option.warn_character_truncation = setting; gfc_option.warn_character_truncation = setting;
gfc_option.warn_unused_dummy_argument = setting;
warn_unused = setting; warn_unused = setting;
warn_return_type = setting; warn_return_type = setting;
...@@ -616,6 +618,10 @@ gfc_handle_option (size_t scode, const char *arg, int value, ...@@ -616,6 +618,10 @@ gfc_handle_option (size_t scode, const char *arg, int value,
gfc_option.warn_align_commons = value; gfc_option.warn_align_commons = value;
break; break;
case OPT_Wunused_dummy_argument:
gfc_option.warn_unused_dummy_argument = value;
break;
case OPT_fall_intrinsics: case OPT_fall_intrinsics:
gfc_option.flag_all_intrinsics = 1; gfc_option.flag_all_intrinsics = 1;
break; break;
......
...@@ -3878,24 +3878,29 @@ generate_local_decl (gfc_symbol * sym) ...@@ -3878,24 +3878,29 @@ generate_local_decl (gfc_symbol * sym)
if (sym->attr.referenced) if (sym->attr.referenced)
gfc_get_symbol_decl (sym); gfc_get_symbol_decl (sym);
/* Warnings for unused dummy arguments. */
else if (sym->attr.dummy)
{
/* INTENT(out) dummy arguments are likely meant to be set. */ /* INTENT(out) dummy arguments are likely meant to be set. */
else if (warn_unused_variable if (gfc_option.warn_unused_dummy_argument
&& sym->attr.dummy
&& sym->attr.intent == INTENT_OUT) && sym->attr.intent == INTENT_OUT)
{ {
if (sym->ts.type != BT_DERIVED) if (sym->ts.type != BT_DERIVED)
gfc_warning ("Dummy argument '%s' at %L was declared INTENT(OUT) " gfc_warning ("Dummy argument '%s' at %L was declared "
"but was not set", sym->name, &sym->declared_at); "INTENT(OUT) but was not set", sym->name,
&sym->declared_at);
else if (!gfc_has_default_initializer (sym->ts.u.derived)) else if (!gfc_has_default_initializer (sym->ts.u.derived))
gfc_warning ("Derived-type dummy argument '%s' at %L was " gfc_warning ("Derived-type dummy argument '%s' at %L was "
"declared INTENT(OUT) but was not set and does " "declared INTENT(OUT) but was not set and "
"not have a default initializer", "does not have a default initializer",
sym->name, &sym->declared_at); sym->name, &sym->declared_at);
} }
/* Specific warning for unused dummy arguments. */ else if (gfc_option.warn_unused_dummy_argument)
else if (warn_unused_variable && sym->attr.dummy)
gfc_warning ("Unused dummy argument '%s' at %L", sym->name, gfc_warning ("Unused dummy argument '%s' at %L", sym->name,
&sym->declared_at); &sym->declared_at);
}
/* Warn for unused variables, but not if they're inside a common /* Warn for unused variables, but not if they're inside a common
block or are use-associated. */ block or are use-associated. */
else if (warn_unused_variable 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> 2010-05-20 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/30298 PR c++/30298
......
! { 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
! { 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment