------- Comment #2 from svfuerst at gmail dot com 2010-04-04 16:51 ------- Paragraph 2 in G.5.1 defines multiplication of a real floating point type by an imaginary floating point type to be an imaginary type, not a complex type.
In addition, the Rationale for Annex G states that "It allow writing imaginary and complex expressions in common mathematical style, for example x + I*y. Note that the multiplication here affects translated code, but does not necessitate an actual floating-point multiply, nor does the addition necessitate a floating point add." Which strongly suggests that the naive code generation which ignores the signed zero issue is the correct one. (Note that the rationale also lists the case where y=INFINITY as causing problems with signaling NaNs if I is _Complex_I.) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43639