Fortran : Don't warn for LOGICAL kind conversion PR96319
authorMark Eggleston <markeggleston@gcc.gnu.org>
Mon, 27 Jul 2020 14:28:50 +0000 (15:28 +0100)
committerMark Eggleston <markeggleston@gcc.gnu.org>
Wed, 29 Jul 2020 11:55:17 +0000 (12:55 +0100)
LOGICAL values will always fit regardless of kind so there
is no need for warnings.

2020-07-29  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/fortran/

PR fortran/96319
* intrinsic.c (gfc_convert_type_warn):  Add check for
LOGICAL type so that warnings are not output.

2020-07-29  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

PR fortran/96319
* gfortran.dg/pr96319.f90: New test.

gcc/fortran/intrinsic.c
gcc/testsuite/gfortran.dg/pr96319.f90 [new file with mode: 0644]

index 3518a4e2c87cc52e201b8d1bc1556930534e8f71..ef33587a774c8d3ec2edf2f2a10419259f22110e 100644 (file)
@@ -5245,8 +5245,10 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag,
        {
          /* Larger kinds can hold values of smaller kinds without problems.
             Hence, only warn if target kind is smaller than the source
-            kind - or if -Wconversion-extra is specified.  */
-         if (expr->expr_type != EXPR_CONSTANT)
+            kind - or if -Wconversion-extra is specified.  LOGICAL values
+            will always fit regardless of kind so ignore conversion.  */
+         if (expr->expr_type != EXPR_CONSTANT
+             && ts->type != BT_LOGICAL)
            {
              if (warn_conversion && from_ts.kind > ts->kind)
                gfc_warning_now (OPT_Wconversion, "Possible change of value in "
diff --git a/gcc/testsuite/gfortran.dg/pr96319.f90 b/gcc/testsuite/gfortran.dg/pr96319.f90
new file mode 100644 (file)
index 0000000..6d8d3b4
--- /dev/null
@@ -0,0 +1,12 @@
+! { dg-do compile }
+! { dg-options "-Wconversion -Wconversion-extra" }
+
+program test
+  LOGICAL(1) :: a
+  logical(4) :: t = .true.
+  logical(4) :: b
+  logical(1) :: f = .false.
+  a = t
+  b = f
+end program test
+