OSDN Git Service

PR fortran/22503
authorreichelt <reichelt@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Jul 2005 08:30:46 +0000 (08:30 +0000)
committerreichelt <reichelt@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Jul 2005 08:30:46 +0000 (08:30 +0000)
* resolve.c (resolve_operator): Improve diagnostic for comparison
of logicals with invalid operator.

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

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102417 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 205c717..cf77df8 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 ff2ac56..8718f4d 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 a874b2a..14426f6 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