diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2013-08-12 05:50:03 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2013-08-12 05:50:03 +0000 |
commit | 0e533e50789534e93b1ab0a9dfcb44afa9c94cec (patch) | |
tree | c0b67820530848b80905158737ebf6f035db92ad /gcc | |
parent | 4fade8c2c3a1e45834a8c9ec81a91c72a75a8e5a (diff) | |
download | gcc-0e533e50789534e93b1ab0a9dfcb44afa9c94cec.zip gcc-0e533e50789534e93b1ab0a9dfcb44afa9c94cec.tar.gz gcc-0e533e50789534e93b1ab0a9dfcb44afa9c94cec.tar.bz2 |
re PR fortran/56666 (Suppression flag for " DO loop at (1) will be executed zero times")
2013-08-12 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/56666
* gfortran.h (gfc_option_t): Add warn_zerotrip.
* invoke.texi (-Wzerotrip): Document option.
* lang.opt (Wzerotrip): Add.
* options.c (gfc_init_options): Initialize warn_zerotrip.
(set_Wall): Add handling of warn_zerotrip.
(gfc_handle_option): Handle OPT_Wzerotrip.
* resolve.c (gfc_resolve_iterator): Honor
gfc_option.warn_zerotrip; update error message to show
how to suppress the warning.
2013-08-12 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/56666
* gfortran.dg/do_check_10.f90: New test.
* gfortran.dg/array_constructor_11.f90: Add -Wzerotrip to dg-options.
* gfortran.dg/array_constructor_18.f90: Likewise.
* gfortran.dg/array_constructor_22.f90: Likewise.
* gfortran.dg/coarray_15.f90: Likewise.
* gfortran.dg/do_1.f90: Add -Wall to dg-options.
* gfortran.dg/do_3.F90: Add -Wzerotrip to dg-options.
* gfortran.dg/do_check_5.f90: Add -Wall to gd-options.
From-SVN: r201658
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 1 | ||||
-rw-r--r-- | gcc/fortran/invoke.texi | 5 | ||||
-rw-r--r-- | gcc/fortran/lang.opt | 4 | ||||
-rw-r--r-- | gcc/fortran/options.c | 6 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/array_constructor_11.f90 | 1 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/array_constructor_18.f90 | 1 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/array_constructor_22.f90 | 1 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/coarray_15.f90 | 2 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/do_1.f90 | 1 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/do_3.F90 | 2 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/do_check_10.f90 | 7 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/do_check_5.f90 | 2 |
15 files changed, 59 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c1adb88..ba34ac1 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,16 @@ +2013-08-12 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/56666 + * gfortran.h (gfc_option_t): Add warn_zerotrip. + * invoke.texi (-Wzerotrip): Document option. + * lang.opt (Wzerotrip): Add. + * options.c (gfc_init_options): Initialize warn_zerotrip. + (set_Wall): Add handling of warn_zerotrip. + (gfc_handle_option): Handle OPT_Wzerotrip. + * resolve.c (gfc_resolve_iterator): Honor + gfc_option.warn_zerotrip; update error message to show + how to suppress the warning. + 2013-08-09 Janus Weil <janus@gcc.gnu.org> * gfortran.h (gfc_get_code): Modified prototype. diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 5c617ca..691aa8c 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -2252,6 +2252,7 @@ typedef struct int warn_align_commons; int warn_real_q_constant; int warn_unused_dummy_argument; + int warn_zerotrip; int warn_realloc_lhs; int warn_realloc_lhs_all; int warn_compare_reals; diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi index 3af57a3..69bec27 100644 --- a/gcc/fortran/invoke.texi +++ b/gcc/fortran/invoke.texi @@ -954,6 +954,11 @@ This option is implied by @option{-Wextra}. Warn if the pointer in a pointer assignment might be longer than the its target. This option is implied by @option{-Wall}. +@item -Wzerotrip +@opindex @code{Wzerotrip} +Warn if a @code{DO} loop is known to execute zero times at compile +time. This option is implied by @option{-Wall}. + @item -Werror @opindex @code{Werror} @cindex warnings, to errors diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index 61f77b4..4f79934 100644 --- a/gcc/fortran/lang.opt +++ b/gcc/fortran/lang.opt @@ -293,6 +293,10 @@ Wunused-dummy-argument Fortran Warning Warn about unused dummy arguments. +Wzerotrip +Fortran Warning +Warn about zero-trip DO loops + cpp Fortran Negative(nocpp) Enable preprocessing diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index 908b47e..3a9c508 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -109,6 +109,7 @@ gfc_init_options (unsigned int decoded_options_count, gfc_option.warn_align_commons = 1; gfc_option.warn_real_q_constant = 0; gfc_option.warn_unused_dummy_argument = 0; + gfc_option.warn_zerotrip = 0; gfc_option.warn_realloc_lhs = 0; gfc_option.warn_realloc_lhs_all = 0; gfc_option.warn_compare_reals = 0; @@ -466,6 +467,7 @@ set_Wall (int setting) gfc_option.warn_real_q_constant = setting; gfc_option.warn_unused_dummy_argument = setting; gfc_option.warn_target_lifetime = setting; + gfc_option.warn_zerotrip = setting; warn_return_type = setting; warn_uninitialized = setting; @@ -747,6 +749,10 @@ gfc_handle_option (size_t scode, const char *arg, int value, gfc_option.warn_unused_dummy_argument = value; break; + case OPT_Wzerotrip: + gfc_option.warn_zerotrip = value; + break; + case OPT_fall_intrinsics: gfc_option.flag_all_intrinsics = 1; break; diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 837bf15..067288d 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -6281,8 +6281,10 @@ gfc_resolve_iterator (gfc_iterator *iter, bool real_ok, bool own_scope) sgn = mpfr_sgn (iter->step->value.real); cmp = mpfr_cmp (iter->end->value.real, iter->start->value.real); } - if ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0)) - gfc_warning ("DO loop at %L will be executed zero times", + if (gfc_option.warn_zerotrip && + ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0))) + gfc_warning ("DO loop at %L will be executed zero times" + " (use -Wno-zerotrip to suppress)", &iter->step->where); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 786070c..3ff0e58 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,15 @@ +2013-08-12 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/56666 + * gfortran.dg/do_check_10.f90: New test. + * gfortran.dg/array_constructor_11.f90: Add -Wzerotrip to dg-options. + * gfortran.dg/array_constructor_18.f90: Likewise. + * gfortran.dg/array_constructor_22.f90: Likewise. + * gfortran.dg/coarray_15.f90: Likewise. + * gfortran.dg/do_1.f90: Add -Wall to dg-options. + * gfortran.dg/do_3.F90: Add -Wzerotrip to dg-options. + * gfortran.dg/do_check_5.f90: Add -Wall to gd-options. + 2013-08-11 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53349 diff --git a/gcc/testsuite/gfortran.dg/array_constructor_11.f90 b/gcc/testsuite/gfortran.dg/array_constructor_11.f90 index bb9f0dd..410fbcb 100644 --- a/gcc/testsuite/gfortran.dg/array_constructor_11.f90 +++ b/gcc/testsuite/gfortran.dg/array_constructor_11.f90 @@ -1,6 +1,7 @@ ! Like array_constructor_6.f90, but check iterators with non-default stride, ! including combinations which lead to zero-length vectors. ! { dg-do run } +! { dg-options "-Wzerotrip" } program main implicit none call build (77) diff --git a/gcc/testsuite/gfortran.dg/array_constructor_18.f90 b/gcc/testsuite/gfortran.dg/array_constructor_18.f90 index c789768..6853c06 100644 --- a/gcc/testsuite/gfortran.dg/array_constructor_18.f90 +++ b/gcc/testsuite/gfortran.dg/array_constructor_18.f90 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-Wzerotrip" } ! Tests the fix for PR32875, in which the character length for the ! array constructor would get lost in simplification and would lead ! the error 'Not Implemented: complex character array constructor'. diff --git a/gcc/testsuite/gfortran.dg/array_constructor_22.f90 b/gcc/testsuite/gfortran.dg/array_constructor_22.f90 index 0dcdaea..f7cdb27 100644 --- a/gcc/testsuite/gfortran.dg/array_constructor_22.f90 +++ b/gcc/testsuite/gfortran.dg/array_constructor_22.f90 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-Wzerotrip" } ! PR34990 ICE in gfc_typenode_for_spec, at fortran/trans-types.c:842 ! Test case that of the reporters. module test diff --git a/gcc/testsuite/gfortran.dg/coarray_15.f90 b/gcc/testsuite/gfortran.dg/coarray_15.f90 index 0aecb2f..ee01e61 100644 --- a/gcc/testsuite/gfortran.dg/coarray_15.f90 +++ b/gcc/testsuite/gfortran.dg/coarray_15.f90 @@ -1,5 +1,5 @@ ! { dg-do run } -! { dg-options "-fcoarray=single" } +! { dg-options "-fcoarray=single -Wzerotrip" } ! ! PR fortran/18918 ! diff --git a/gcc/testsuite/gfortran.dg/do_1.f90 b/gcc/testsuite/gfortran.dg/do_1.f90 index 171275a..b041279 100644 --- a/gcc/testsuite/gfortran.dg/do_1.f90 +++ b/gcc/testsuite/gfortran.dg/do_1.f90 @@ -1,4 +1,5 @@ ! { dg-do run } +! { dg-options "-Wall" } ! Program to check corner cases for DO statements. program do_1 implicit none diff --git a/gcc/testsuite/gfortran.dg/do_3.F90 b/gcc/testsuite/gfortran.dg/do_3.F90 index 67723a5..eb4751d 100644 --- a/gcc/testsuite/gfortran.dg/do_3.F90 +++ b/gcc/testsuite/gfortran.dg/do_3.F90 @@ -1,5 +1,5 @@ ! { dg-do run } -! { dg-options "-std=legacy -ffree-line-length-none -fno-range-check -fwrapv" } +! { dg-options "-std=legacy -ffree-line-length-none -fno-range-check -fwrapv -Wzerotrip" } program test integer :: count integer :: i diff --git a/gcc/testsuite/gfortran.dg/do_check_10.f90 b/gcc/testsuite/gfortran.dg/do_check_10.f90 new file mode 100644 index 0000000..016dab7 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/do_check_10.f90 @@ -0,0 +1,7 @@ +! { dg-do compile } +! { dg-options "-Wall -Wno-zerotrip" } +program main + do i=1,0 + print *,i + end do +end program main diff --git a/gcc/testsuite/gfortran.dg/do_check_5.f90 b/gcc/testsuite/gfortran.dg/do_check_5.f90 index 3df7b14..57930fd6 100644 --- a/gcc/testsuite/gfortran.dg/do_check_5.f90 +++ b/gcc/testsuite/gfortran.dg/do_check_5.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! +! { dg-options "-Wall" } ! PR/fortran 38432 ! DO-loop compile-time checks ! |