aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>2005-07-27 08:30:46 +0000
committerVolker Reichelt <reichelt@gcc.gnu.org>2005-07-27 08:30:46 +0000
commit6a28f513f101340c99203a5290501c787833b205 (patch)
tree72122f8156e77bc3684060fea90f41120ca52b61 /gcc
parent2350455936313427a68eb1e0245a5e49d5ea8165 (diff)
downloadgcc-6a28f513f101340c99203a5290501c787833b205.zip
gcc-6a28f513f101340c99203a5290501c787833b205.tar.gz
gcc-6a28f513f101340c99203a5290501c787833b205.tar.bz2
re PR fortran/22503 (Suggest to use .EQV. when comparing logicals with .EQ.)
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
Diffstat (limited to 'gcc')
-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 205c717..cf77df8 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 ff2ac56..8718f4d 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 a874b2a..14426f6 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 0000000..a961b29
--- /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