aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorreichelt <reichelt@138bc75d-0d04-0410-961f-82ee72b054a4>2005-07-27 08:30:46 +0000
committerreichelt <reichelt@138bc75d-0d04-0410-961f-82ee72b054a4>2005-07-27 08:30:46 +0000
commit62a94956ace1e0cac9853b54026fc5dec4ddd51f (patch)
tree72122f8156e77bc3684060fea90f41120ca52b61
parent8dc7fca4bee8b1656dec3b5844626fb8556e5877 (diff)
PR fortran/22503
* 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
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c11
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/logical_comp.f909
4 files changed, 28 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 205c7177bb0..cf77df83cc1 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index ff2ac5675cd..8718f4d4529 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a874b2ad4c5..14426f66ac4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 00000000000..a961b291c3a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/logical_comp.f90
@@ -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