diff mbox

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

Message ID 51FD2FA9.508@netcologne.de
State New
Headers show

Commit Message

Thomas Koenig Aug. 3, 2013, 4:28 p.m. UTC
Hello world,

the rather self-explanatory patch implements the -Wzerotrip
option.  The positive form is not really useful, because
the option is on by default (so the default behavior is
not changed).

The negative form of the option, -Wno-zerotrip, suppresses the
warning.  I have also added information of how to suppress the
warning in the message.

Alternatively, it is also possible to only activate the warning
if it is set explicitly, or with -Wall.  I can easily change the
patch to do so, if that turns out to be the consensus (I have no
strong opinion on the matter either way)

Regression-tested. OK for trunk?

	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.
         (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.

Comments

Janus Weil Aug. 6, 2013, 10:41 a.m. UTC | #1
Hi Thomas,

> the rather self-explanatory patch implements the -Wzerotrip
> option.  The positive form is not really useful, because
> the option is on by default (so the default behavior is
> not changed).
>
> The negative form of the option, -Wno-zerotrip, suppresses the
> warning.  I have also added information of how to suppress the
> warning in the message.
>
> Alternatively, it is also possible to only activate the warning
> if it is set explicitly, or with -Wall.  I can easily change the
> patch to do so, if that turns out to be the consensus (I have no
> strong opinion on the matter either way)
>
> Regression-tested. OK for trunk?

I'm never quite sure whether I like the ongoing inflation of warning
options, but this particular flag is one that I might find useful
myself on occasion. So: Ok for trunk from my side.

However, I would prefer to disable the warning by default, but include
it in -Wall.

Thanks for the patch ...

Cheers,
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.
>         (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.
diff mbox

Patch

Index: gfortran.h
===================================================================
--- gfortran.h	(Revision 201448)
+++ 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: invoke.texi
===================================================================
--- invoke.texi	(Revision 201448)
+++ invoke.texi	(Arbeitskopie)
@@ -954,6 +954,12 @@  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 on by default and can be deactivated by
+@option{-Wno-zerotrip}.
+
 @item -Werror
 @opindex @code{Werror}
 @cindex warnings, to errors
Index: lang.opt
===================================================================
--- lang.opt	(Revision 201448)
+++ 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: options.c
===================================================================
--- options.c	(Revision 201448)
+++ 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 = 1;
   gfc_option.warn_realloc_lhs = 0;
   gfc_option.warn_realloc_lhs_all = 0;
   gfc_option.warn_compare_reals = 0;
@@ -747,6 +748,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: resolve.c
===================================================================
--- resolve.c	(Revision 201448)
+++ 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);
     }