Bug 730 – broken operator handling of ifloat/idouble/ireal

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
Linux
Creation time
2006-12-23T07:13:00Z
Last change time
2014-02-15T13:20:21Z
Keywords
accepts-invalid
Assigned to
bugzilla
Creator
thomas-dloop

Comments

Comment #0 by thomas-dloop — 2006-12-23T07:13:04Z
# # void foo(){ # ifloat f = 1.0fi; # f *= 2.0fi; // illegal but compiles # } # It looks like all arithmetic operators for imaginary types perform insufficient type checks. test cases: http://dstress.kuehne.cn/nocompile/o/opAssign_21_A.d http://dstress.kuehne.cn/nocompile/o/opAssign_21_B.d http://dstress.kuehne.cn/nocompile/o/opAssign_21_C.d
Comment #1 by thomas-dloop — 2006-12-23T08:30:34Z
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 [email protected] schrieb am 2006-12-23: > http://d.puremagic.com/issues/show_bug.cgi?id=730 > test cases: > http://dstress.kuehne.cn/nocompile/o/opAssign_21_A.d > http://dstress.kuehne.cn/nocompile/o/opAssign_21_B.d > http://dstress.kuehne.cn/nocompile/o/opAssign_21_C.d Should have been: http://dstress.kuehne.cn/nocompile/o/opMulAssign_21_A.d http://dstress.kuehne.cn/nocompile/o/opMulAssign_21_B.d http://dstress.kuehne.cn/nocompile/o/opMulAssign_21_C.d -----BEGIN PGP SIGNATURE----- iD8DBQFFjT5cLK5blCcjpWoRAtWEAKCOxes9Y4yOPIUHzXdzthB4topa+ACfU6Ho znTa8F9q1YbtXUaIWPGrmkQ= =xHSE -----END PGP SIGNATURE-----
Comment #2 by bugzilla — 2007-10-31T04:30:46Z
It's not illegal. The mathematical result is 0, which is what is assigned to f.
Comment #3 by clugdbug — 2007-11-01T02:54:00Z
(In reply to comment #2) > It's not illegal. The mathematical result is 0, which is what is assigned to f. The imaginary part of the expression is indeed 0. But that involves an implicit cast from double to idouble, which is very hard to justify. The type of (1.0i * 2.0i) is double. It's not even a cdouble. The current behaviour violates a *= b <---> a = a*b, since the latter won't compile. idouble *= idouble is a bug in user code, 100% of the time. (I actually got bitten by this, when I wrote generic dot product code. You can't assume that a = a*a compiles).
Comment #4 by clugdbug — 2009-10-14T00:07:25Z
Fixed in DMD1.048