diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2019-02-02 16:21:43 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2019-02-02 16:21:43 +0000 |
commit | 5197d79937c3dcf57e1a3be4e624947220d4c8f8 (patch) | |
tree | 9a76d70f09976b6c12171e9531bfced61c36c516 /gcc | |
parent | a3df90b9672562d0e2feeb093e20c1d21bd4cca5 (diff) | |
download | gcc-5197d79937c3dcf57e1a3be4e624947220d4c8f8.zip gcc-5197d79937c3dcf57e1a3be4e624947220d4c8f8.tar.gz gcc-5197d79937c3dcf57e1a3be4e624947220d4c8f8.tar.bz2 |
re PR fortran/88298 (Bogus conversion warning for CSHIFT with -fno-range-check -m64)
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/arith.c | 2 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 3 | ||||
-rw-r--r-- | gcc/fortran/intrinsic.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/warn_conversion_10.f90 | 8 |
6 files changed, 27 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ce6df90..622af1e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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 diff --git a/gcc/fortran/arith.c b/gcc/fortran/arith.c index 99fb61c..425345c 100644 --- a/gcc/fortran/arith.c +++ b/gcc/fortran/arith.c @@ -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); diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index e7a9b6f..9643deb 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -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 diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index 8d80869..f8d3a69 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 727dc4b..904a591 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..e7d0a3c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/warn_conversion_10.f90 @@ -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 |