mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-14 05:20:25 +08:00
re PR fortran/54465 (Implement -Wextra for Fortran)
2012-10-21 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/54465 * lang.opt (Wextra): Add. * invoke.texi: Document that -Wc-binding-type, -Wconversion and -Wline-truncation are implied by -Wall. Document that -Wcompare-reals is implied by -Wextra. Document -Wextra. * options.c (set_Wextra): New function. (gfc_handle_option): Handle -Wextra. 2012-10-21 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/54465 * gfortran.dg/wextra_1.f: New test. From-SVN: r192649
This commit is contained in:
parent
699ae4b585
commit
72ac1c070c
@ -1,3 +1,13 @@
|
||||
2012-10-21 Thomas König <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/54465
|
||||
* lang.opt (Wextra): Add.
|
||||
* invoke.texi: Document that -Wc-binding-type, -Wconversion
|
||||
and -Wline-truncation are implied by -Wall. Document that
|
||||
-Wcompare-reals is implied by -Wextra. Document -Wextra.
|
||||
* options.c (set_Wextra): New function.
|
||||
(gfc_handle_option): Handle -Wextra.
|
||||
|
||||
2012-10-19 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/54224
|
||||
|
@ -727,7 +727,7 @@ warnings.
|
||||
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{-Wconversion}, @option{-Wsurprising}, @option{-Wc-binding-type},
|
||||
@option{-Wintrinsics-std}, @option{-Wno-tabs}, @option{-Wintrinsic-shadow},
|
||||
@option{-Wline-truncation}, @option{-Wtarget-lifetime},
|
||||
@option{-Wreal-q-constant} and @option{-Wunused}.
|
||||
@ -778,7 +778,8 @@ avoid such temporaries.
|
||||
Warn if the a variable might not be C interoperable. In particular, warn if
|
||||
the variable has been declared using an intrinsic type with default kind
|
||||
instead of using a kind parameter defined for C interoperability in the
|
||||
intrinsic @code{ISO_C_Binding} module.
|
||||
intrinsic @code{ISO_C_Binding} module. This option is implied by
|
||||
@option{-Wall}.
|
||||
|
||||
@item -Wcharacter-truncation
|
||||
@opindex @code{Wcharacter-truncation}
|
||||
@ -788,7 +789,8 @@ Warn when a character assignment will truncate the assigned string.
|
||||
@item -Wline-truncation
|
||||
@opindex @code{Wline-truncation}
|
||||
@cindex warnings, line truncation
|
||||
Warn when a source code line will be truncated.
|
||||
Warn when a source code line will be truncated. This option is
|
||||
implied by @option{-Wall}.
|
||||
|
||||
@item -Wconversion
|
||||
@opindex @code{Wconversion}
|
||||
@ -803,6 +805,14 @@ the expression after conversion. Implied by @option{-Wall}.
|
||||
@cindex conversion
|
||||
Warn about implicit conversions between different types and kinds.
|
||||
|
||||
@item -Wextra
|
||||
@opindex @code{Wextra}
|
||||
@cindex extra warnings
|
||||
@cindex warnings, extra
|
||||
Enables some warning options for usages of language features which
|
||||
may be problematic. This currently includes @option{-Wcompare-reals}
|
||||
and @option{-Wunused-parameter}.
|
||||
|
||||
@item -Wimplicit-interface
|
||||
@opindex @code{Wimplicit-interface}
|
||||
@cindex warnings, implicit interface
|
||||
@ -884,7 +894,7 @@ encountered, which yield an UNDERFLOW during compilation.
|
||||
Warn if a user-defined procedure or module procedure has the same name as an
|
||||
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.
|
||||
the desired intrinsic/procedure. This option is implied by @option{-Wall}.
|
||||
|
||||
@item -Wunused-dummy-argument
|
||||
@opindex @code{Wunused-dummy-argument}
|
||||
@ -939,6 +949,7 @@ allocatable variable; this includes scalars and derived types.
|
||||
@item -Wcompare-reals
|
||||
@opindex @code{Wcompare-reals}
|
||||
Warn when comparing real or complex types for equality or inequality.
|
||||
This option is implied by @option{-Wextra}.
|
||||
|
||||
@item -Wtarget-lifetime
|
||||
@opindex @code{Wtargt-lifetime}
|
||||
|
@ -230,6 +230,10 @@ Wconversion-extra
|
||||
Fortran Warning
|
||||
Warn about most implicit conversions
|
||||
|
||||
Wextra
|
||||
Fortran Warning
|
||||
Print extra (possibly unwanted) warnings
|
||||
|
||||
Wfunction-elimination
|
||||
Fortran Warning
|
||||
Warn about function call elimination
|
||||
|
@ -483,6 +483,13 @@ set_Wall (int setting)
|
||||
warn_maybe_uninitialized = setting;
|
||||
}
|
||||
|
||||
/* Set the options for -Wextra. */
|
||||
|
||||
static void
|
||||
set_Wextra (int setting)
|
||||
{
|
||||
gfc_option.warn_compare_reals = setting;
|
||||
}
|
||||
|
||||
static void
|
||||
gfc_handle_module_path_options (const char *arg)
|
||||
@ -653,6 +660,15 @@ gfc_handle_option (size_t scode, const char *arg, int value,
|
||||
gfc_option.warn_conversion_extra = value;
|
||||
break;
|
||||
|
||||
case OPT_Wextra:
|
||||
handle_generated_option (&global_options, &global_options_set,
|
||||
OPT_Wunused_parameter, NULL, value,
|
||||
gfc_option_lang_mask (), kind, loc,
|
||||
handlers, global_dc);
|
||||
set_Wextra (value);
|
||||
|
||||
break;
|
||||
|
||||
case OPT_Wfunction_elimination:
|
||||
gfc_option.warn_function_elimination = value;
|
||||
break;
|
||||
|
@ -814,26 +814,23 @@ gfc_allocate_allocatable (stmtblock_t * block, tree mem, tree size, tree token,
|
||||
}
|
||||
|
||||
|
||||
/* Free a given variable, if it's not NULL. */
|
||||
/* Free a given variable. If it is NULL, free takes care of this
|
||||
automatically. */
|
||||
tree
|
||||
gfc_call_free (tree var)
|
||||
{
|
||||
stmtblock_t block;
|
||||
tree tmp, cond, call;
|
||||
tree call;
|
||||
|
||||
if (TREE_TYPE (var) != TREE_TYPE (pvoid_type_node))
|
||||
var = fold_convert (pvoid_type_node, var);
|
||||
|
||||
gfc_start_block (&block);
|
||||
var = gfc_evaluate_now (var, &block);
|
||||
cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node, var,
|
||||
build_int_cst (pvoid_type_node, 0));
|
||||
call = build_call_expr_loc (input_location,
|
||||
builtin_decl_explicit (BUILT_IN_FREE),
|
||||
1, var);
|
||||
tmp = fold_build3_loc (input_location, COND_EXPR, void_type_node, cond, call,
|
||||
build_empty_stmt (input_location));
|
||||
gfc_add_expr_to_block (&block, tmp);
|
||||
gfc_add_expr_to_block (&block, call);
|
||||
|
||||
return gfc_finish_block (&block);
|
||||
}
|
||||
@ -861,11 +858,10 @@ gfc_call_free (tree var)
|
||||
}
|
||||
}
|
||||
|
||||
In this front-end version, status doesn't have to be GFC_INTEGER_4.
|
||||
Moreover, if CAN_FAIL is true, then we will not emit a runtime error,
|
||||
even when no status variable is passed to us (this is used for
|
||||
unconditional deallocation generated by the front-end at end of
|
||||
each procedure).
|
||||
In this front-end version, status doesn't have to be GFC_INTEGER_4. If
|
||||
CAN_FAIL is true, no status variable is passed and we are not dealing with
|
||||
a coarray, we will simply call free(). This is used for unconditional
|
||||
deallocation generated by the front-end at end of each procedure.
|
||||
|
||||
If a runtime-message is possible, `expr' must point to the original
|
||||
expression being deallocated for its locus and variable name.
|
||||
@ -890,6 +886,14 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg,
|
||||
STRIP_NOPS (pointer);
|
||||
}
|
||||
|
||||
else if (can_fail && status == NULL_TREE)
|
||||
{
|
||||
tmp = build_call_expr_loc (input_location,
|
||||
builtin_decl_explicit (BUILT_IN_FREE), 1,
|
||||
fold_convert (pvoid_type_node, pointer));
|
||||
return tmp;
|
||||
}
|
||||
|
||||
cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node, pointer,
|
||||
build_int_cst (TREE_TYPE (pointer), 0));
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-10-21 Thomas König <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/54465
|
||||
* gfortran.dg/wextra_1.f: New test.
|
||||
|
||||
2012-10-20 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* gcc.dg/tree-prof/unroll-1.c: New testcase.
|
||||
|
9
gcc/testsuite/gfortran.dg/wextra_1.f
Normal file
9
gcc/testsuite/gfortran.dg/wextra_1.f
Normal file
@ -0,0 +1,9 @@
|
||||
! { dg-do compile }
|
||||
! { dg-options "-Wextra" }
|
||||
program main
|
||||
integer, parameter :: x=3 ! { dg-warning "Unused parameter" }
|
||||
real :: a
|
||||
read (*,*) a
|
||||
if (a .eq. 3.14) a=2. ! { dg-warning "Equality comparison" }
|
||||
print *,a
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user