Patchwork [fortran] RFD: PR 56666 Allow suppression of zero-trip DO loop warning

login
register
mail settings
Submitter Thomas Koenig
Date Aug. 11, 2013, 9:51 p.m.
Message ID <52080744.2070609@netcologne.de>
Download mbox | patch
Permalink /patch/266404/
State New
Headers show

Comments

Thomas Koenig - Aug. 11, 2013, 9:51 p.m.
Hi Janus,

> So: Ok for trunk from my side.
> 
> However, I would prefer to disable the warning by default, but include
> it in -Wall.

Here's a patch to do just that.

Regression-tested (hence the changes to the existing test cases :-)

OK for trunk?  Once it goes in, I will also update the WWW changes.

	Thomas

2013-08-03  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-03  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.
Janus Weil - Aug. 11, 2013, 10:48 p.m.
2013/8/11 Thomas Koenig <tkoenig@netcologne.de>:
> Hi Janus,
>
>> So: Ok for trunk from my side.
>>
>> However, I would prefer to disable the warning by default, but include
>> it in -Wall.
>
> Here's a patch to do just that.
>
> Regression-tested (hence the changes to the existing test cases :-)
>
> OK for trunk?

Looks good to me ...

Thanks,
Janus



> 2013-08-03  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-03  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.
>
Thomas Koenig - Aug. 12, 2013, 6:06 a.m.
Hi Janus,

>> OK for trunk?
> Looks good to m

Committed as rev. 201658; also committed a
snippet to the documentation.

Thanks for the review!

	Thomas

Patch

Index: fortran/gfortran.h
===================================================================
--- fortran/gfortran.h	(Revision 201448)
+++ fortran/gfortran.h	(Arbeitskopie)
@@ -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;
Index: fortran/invoke.texi
===================================================================
--- fortran/invoke.texi	(Revision 201448)
+++ fortran/invoke.texi	(Arbeitskopie)
@@ -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
Index: fortran/lang.opt
===================================================================
--- fortran/lang.opt	(Revision 201448)
+++ fortran/lang.opt	(Arbeitskopie)
@@ -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
Index: fortran/options.c
===================================================================
--- fortran/options.c	(Revision 201448)
+++ fortran/options.c	(Arbeitskopie)
@@ -109,6 +109,7 @@  gfc_init_options (unsigned int decoded_options_cou
   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,
       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;
Index: fortran/resolve.c
===================================================================
--- fortran/resolve.c	(Revision 201448)
+++ fortran/resolve.c	(Arbeitskopie)
@@ -6282,8 +6282,10 @@  gfc_resolve_iterator (gfc_iterator *iter, bool rea
 	  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);
     }
 
Index: testsuite/gfortran.dg/array_constructor_11.f90
===================================================================
--- testsuite/gfortran.dg/array_constructor_11.f90	(Revision 201448)
+++ testsuite/gfortran.dg/array_constructor_11.f90	(Arbeitskopie)
@@ -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)
Index: testsuite/gfortran.dg/array_constructor_18.f90
===================================================================
--- testsuite/gfortran.dg/array_constructor_18.f90	(Revision 201448)
+++ testsuite/gfortran.dg/array_constructor_18.f90	(Arbeitskopie)
@@ -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'.
Index: testsuite/gfortran.dg/array_constructor_22.f90
===================================================================
--- testsuite/gfortran.dg/array_constructor_22.f90	(Revision 201448)
+++ testsuite/gfortran.dg/array_constructor_22.f90	(Arbeitskopie)
@@ -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 
Index: testsuite/gfortran.dg/coarray_15.f90
===================================================================
--- testsuite/gfortran.dg/coarray_15.f90	(Revision 201448)
+++ testsuite/gfortran.dg/coarray_15.f90	(Arbeitskopie)
@@ -1,5 +1,5 @@ 
 ! { dg-do run }
-! { dg-options "-fcoarray=single" }
+! { dg-options "-fcoarray=single -Wzerotrip" }
 !
 ! PR fortran/18918
 !
Index: testsuite/gfortran.dg/do_1.f90
===================================================================
--- testsuite/gfortran.dg/do_1.f90	(Revision 201448)
+++ testsuite/gfortran.dg/do_1.f90	(Arbeitskopie)
@@ -1,4 +1,5 @@ 
 ! { dg-do run }
+! { dg-options "-Wall" }
 ! Program to check corner cases for DO statements.
 program do_1
   implicit none
Index: testsuite/gfortran.dg/do_3.F90
===================================================================
--- testsuite/gfortran.dg/do_3.F90	(Revision 201448)
+++ testsuite/gfortran.dg/do_3.F90	(Arbeitskopie)
@@ -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
Index: testsuite/gfortran.dg/do_check_5.f90
===================================================================
--- testsuite/gfortran.dg/do_check_5.f90	(Revision 201448)
+++ testsuite/gfortran.dg/do_check_5.f90	(Arbeitskopie)
@@ -1,5 +1,5 @@ 
 ! { dg-do compile }
-! 
+! { dg-options "-Wall" }
 ! PR/fortran 38432
 ! DO-loop compile-time checks
 !