re PR fortran/88298 (Bogus conversion warning for CSHIFT with -fno-range-check -m64)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 2 Feb 2019 16:21:43 +0000 (16:21 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 2 Feb 2019 16:21:43 +0000 (16:21 +0000)
2019-02-02  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/88298
* arith.c (gfc_int2int): Do not warn if src->do_not_warn is set.
* gfortran.h (gfc_expr): Add flag do_not_warn.
* intrinsic.c (gfc_convert_type_warn): Set expr->do_not_warn if
no warning is desired.

2019-02-02  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/88298
* gfortran.dg/warn_conversion_10.f90: New test.

From-SVN: r268475

gcc/fortran/ChangeLog
gcc/fortran/arith.c
gcc/fortran/gfortran.h
gcc/fortran/intrinsic.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/warn_conversion_10.f90 [new file with mode: 0644]

index ce6df90aa775c67b4af73617d523858ae3521fc8..622af1e39020b84fb0c2fde15044e59196f4314f 100644 (file)
@@ -1,3 +1,11 @@
+2019-02-02  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/88298
+       * arith.c (gfc_int2int): Do not warn if src->do_not_warn is set.
+       * gfortran.h (gfc_expr): Add flag do_not_warn.
+       * intrinsic.c (gfc_convert_type_warn): Set expr->do_not_warn if
+       no warning is desired.
+
 2019-02-02  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/88393
index 99fb61c15b9ddb119b5063fcbcf6508feaf151e8..425345c99a37447fa70de4f2c3e47d1b9404245a 100644 (file)
@@ -2061,7 +2061,7 @@ gfc_int2int (gfc_expr *src, int kind)
       gfc_convert_mpz_to_signed (result->value.integer,
                                 gfc_integer_kinds[k].bit_size);
 
-      if (warn_conversion && kind < src->ts.kind)
+      if (warn_conversion && !src->do_not_warn && kind < src->ts.kind)
        gfc_warning_now (OPT_Wconversion, "Conversion from %qs to %qs at %L",
                         gfc_typename (&src->ts), gfc_typename (&result->ts),
                         &src->where);
index e7a9b6f567442a90761322cf3715aac77f0ef187..9643deba129b19c9214ce64522e76f3f71b57d32 100644 (file)
@@ -2168,6 +2168,9 @@ typedef struct gfc_expr
 
   unsigned int do_not_resolve_again : 1;
 
+  /* Set this if no warning should be given somewhere in a lower level.  */
+
+  unsigned int do_not_warn : 1;
   /* If an expression comes from a Hollerith constant or compile-time
      evaluation of a transfer statement, it may have a prescribed target-
      memory representation, and these cannot always be backformed from
index 8d80869b9bca860251b05723b457a92b8fcd3309..f8d3a69d46d5ad1823523e134374b66276dc1f46 100644 (file)
@@ -5028,6 +5028,8 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag)
   if (ts->type == BT_UNKNOWN)
     goto bad;
 
+  expr->do_not_warn = ! wflag;
+
   /* NULL and zero size arrays get their type here, unless they already have a
      typespec.  */
   if ((expr->expr_type == EXPR_NULL
index 727dc4bf43b3b728e6f69828649067b776a87a83..904a5911d7732b0aa3a689904c96e0c00d5585e9 100644 (file)
@@ -1,3 +1,8 @@
+2019-02-02  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/88298
+       * gfortran.dg/warn_conversion_10.f90: New test.
+
 2019-02-02  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/88393
diff --git a/gcc/testsuite/gfortran.dg/warn_conversion_10.f90 b/gcc/testsuite/gfortran.dg/warn_conversion_10.f90
new file mode 100644 (file)
index 0000000..e7d0a3c
--- /dev/null
@@ -0,0 +1,8 @@
+! { dg-do compile }
+! { dg-options "-fno-range-check -Wconversion" }
+! PR 88298 - this used to warn unnecessarily.  Original test case by
+! Harald Anlauf.
+subroutine bug (j, js)
+  integer    :: j, js(3,2)
+  js(:,:) = cshift (js(:,:), shift=j, dim=1)
+end subroutine bug