]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/88298 (Bogus conversion warning for CSHIFT with -fno-range-check -m64)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 2 Feb 2019 17:07:40 +0000 (17:07 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 2 Feb 2019 17:07:40 +0000 (17:07 +0000)
2019-02-02  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/88298
Backport from trunk
* 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
Backport from trunk
* gfortran.dg/warn_conversion_10.f90: New test.

From-SVN: r268479

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 62adf03bbd76ac9147a43c2f7909baee85979543..704a15269dd7ce8844ce54a2f81a0c699e7f68f6 100644 (file)
@@ -1,3 +1,12 @@
+2019-02-02  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/88298
+       Backport from trunk
+       * 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/57048
index c594048eb51023265caacb70e974771a32081fdf..895d65f53d4c06bef6222ddd828ccd80d2ff6e95 100644 (file)
@@ -2050,7 +2050,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 071dece717ce2eff7155fd70f838a8e6ab6843f5..c0bb9b5d49090dde399f35604c3eafc15885d24c 100644 (file)
@@ -2106,6 +2106,9 @@ typedef struct gfc_expr
   /* Will require finalization after use.  */
   unsigned int must_finalize : 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 2f60fe8c87721344ab2d4e3e03fdd8f0318bd5ad..8eb815c9a5b68b7b431510e483a2bd9688d779a6 100644 (file)
@@ -4919,6 +4919,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.  */
   if (expr->expr_type == EXPR_NULL
       || (expr->expr_type == EXPR_ARRAY && expr->value.constructor == NULL))
index 3195c9c067977985af77af5d712ed518f9002814..3499c0b3fd51154dffedebbba07d398b3efcf320 100644 (file)
@@ -1,3 +1,9 @@
+2019-02-02  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/88298
+       Backport from trunk
+       * gfortran.dg/warn_conversion_10.f90: New test.
+
 2019-02-02  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/57048
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