------- Comment #4 from tobi at gcc dot gnu dot org 2005-11-02 12:37 -------
I was curious, and tried below patch, changing .EQV. to .NEQV. in the testcase,
and still we don't get the "right" result, since our logical type is a real
logical, in that only the lowest bit is considered. I did some checking, and
our output functions seem to agree with the generated code about what values
are true and what values are false, i.e.
print *,i, lo1 , lo1 .eqv. lo2, lo1 .eqv. .true.
if (lo1 .eqv. lo2) PRINT *, "2nd column true"
if (lo1 .eqv. .true.) PRINT *, "3rd column true"
would not do fancy stuff.
Index: trans-expr.c
===================================================================
--- trans-expr.c (revision 106379)
+++ trans-expr.c (working copy)
@@ -988,12 +988,17 @@ gfc_conv_expr_op (gfc_se * se, gfc_expr
break;
case INTRINSIC_NE:
- case INTRINSIC_NEQV:
code = NE_EXPR;
checkstring = 1;
lop = 1;
break;
+ case INTRINSIC_NEQV:
+ code = TRUTH_XOR_EXPR;
+ checkstring = 1;
+ lop = 1;
+ break;
+
case INTRINSIC_GT:
code = GT_EXPR;
checkstring = 1;
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22495