re PR fortran/22503 (Suggest to use .EQV. when comparing logicals with .EQ.)
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>
Wed, 27 Jul 2005 08:30:46 +0000 (08:30 +0000)
committerVolker Reichelt <reichelt@gcc.gnu.org>
Wed, 27 Jul 2005 08:30:46 +0000 (08:30 +0000)
PR fortran/22503
* resolve.c (resolve_operator): Improve diagnostic for comparison
of logicals with invalid operator.

* gfortran.dg/logical_comp.f90: New test.

From-SVN: r102417

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/logical_comp.f90 [new file with mode: 0644]

index 205c7177bb00a542b3fb2511a42c9363acda259f..cf77df83cc1ef0fa0a74cdcaf3d0e42328b99400 100644 (file)
@@ -1,3 +1,9 @@
+2005-07-27  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR fortran/22503
+       * resolve.c (resolve_operator): Improve diagnostic for comparison
+       of logicals with invalid operator.
+
 2005-07-25  Jakub Jelinek  <jakub@redhat.com>
 
        PR fortran/20063
index ff2ac5675cdf65e5a2c9bc69cd45a0b9fc61667f..8718f4d45291c2e284e9e16a5603e7a427b84ed1 100644 (file)
@@ -1514,9 +1514,14 @@ resolve_operator (gfc_expr * e)
          break;
        }
 
-      sprintf (msg, "Operands of comparison operator '%s' at %%L are %s/%s",
-              gfc_op2string (e->value.op.operator), gfc_typename (&op1->ts),
-              gfc_typename (&op2->ts));
+      if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
+       sprintf (msg, "Logicals at %%L must be compared with %s instead of %s",
+                e->value.op.operator == INTRINSIC_EQ ? ".EQV." : ".NEQV.",
+                gfc_op2string (e->value.op.operator));
+      else
+       sprintf (msg, "Operands of comparison operator '%s' at %%L are %s/%s",
+                gfc_op2string (e->value.op.operator), gfc_typename (&op1->ts),
+                gfc_typename (&op2->ts));
 
       goto bad_op;
 
index a874b2ad4c5c0a2775a36283625f83b4e442f08c..14426f66ac42c18c31ff0d3cf6a04c8372e6c89e 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-27  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR fortran/22503
+       * gfortran.dg/logical_comp.f90: New test.
+
 2005-07-27  Jan Hubicka  <jh@suse.cz>
 
        * inliner-1.c: Add cleanup of dumps.
diff --git a/gcc/testsuite/gfortran.dg/logical_comp.f90 b/gcc/testsuite/gfortran.dg/logical_comp.f90
new file mode 100644 (file)
index 0000000..a961b29
--- /dev/null
@@ -0,0 +1,9 @@
+! { dg-do compile }
+! PR fortran/22503
+! Suggest use of appropriate comparison operator
+
+program foo
+  logical :: b
+  b = b .eq. b  ! { dg-error ".EQV. instead of .eq." }
+  b = b .ne. b  ! { dg-error ".NEQV. instead of .ne." }
+end program