------- Comment #2 from dfranke at gcc dot gnu dot org 2009-12-11 18:56 -------
Using "-O3 -fno-signed-zeros" (the latter being set by -ffast-math) gets rid of
all the additional computations and results in
<bb 2>:
D.1504_2 = *a_1(D);
D.1514_10 = REALPART_EXPR <*b_4(D)>;
D.1515_11 = IMAGPART_EXPR <*b_4(D)>;
D.1516_12 = D.1504_2 * D.1514_10;
D.1517_13 = D.1504_2 * D.1515_11;
__result_op.0_6 = COMPLEX_EXPR <D.1516_12, D.1517_13>;
return __result_op.0_6;
With the patch below, the warning would be disabled. However is this warning a
feature (then keep it), or an artefact of an implementation detail (then remove
it)?
Index: expr.c
===================================================================
--- expr.c (revision 155148)
+++ expr.c (working copy)
@@ -720,9 +720,9 @@ gfc_type_convert_binary (gfc_expr *e)
else
e->ts.kind = op2->ts.kind;
if (op1->ts.type != BT_COMPLEX || op1->ts.kind != e->ts.kind)
- gfc_convert_type (e->value.op.op1, &e->ts, 2);
+ gfc_convert_type_warn (e->value.op.op1, &e->ts, 2, 0);
if (op2->ts.type != BT_COMPLEX || op2->ts.kind != e->ts.kind)
- gfc_convert_type (e->value.op.op2, &e->ts, 2);
+ gfc_convert_type_warn (e->value.op.op2, &e->ts, 2, 0);
done:
return;
--
dfranke at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords|missed-optimization |
Known to fail|4.5.0 |
Summary|Bogus conversion of |Spurious warning on
|REAL*COMPLEX to |REAL*COMPLEX with -
|COMPLEX*COMPLEX |Wconversion
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40290