Thread overview
[Issue 730] New: broken operator handling of ifloat/idouble/ireal
Dec 23, 2006
d-bugmail
Dec 23, 2006
Thomas Kuehne
Oct 31, 2007
d-bugmail
Nov 01, 2007
d-bugmail
Oct 14, 2009
Don
December 23, 2006
http://d.puremagic.com/issues/show_bug.cgi?id=730

           Summary: broken operator handling of ifloat/idouble/ireal
           Product: D
           Version: 0.177
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla@digitalmars.com
        ReportedBy: thomas-dloop@kuehne.cn


#
# 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


-- 

December 23, 2006
d-bugmail@puremagic.com 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


October 31, 2007
http://d.puremagic.com/issues/show_bug.cgi?id=730


bugzilla@digitalmars.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID




------- Comment #2 from bugzilla@digitalmars.com  2007-10-31 04:30 -------
It's not illegal. The mathematical result is 0, which is what is assigned to f.


-- 

November 01, 2007
http://d.puremagic.com/issues/show_bug.cgi?id=730


clugdbug@yahoo.com.au changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|INVALID                     |




------- Comment #3 from clugdbug@yahoo.com.au  2007-11-01 02:54 -------
(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).


-- 

October 14, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=730


Don <clugdbug@yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |RESOLVED
                 CC|                            |clugdbug@yahoo.com.au
         Resolution|                            |FIXED


--- Comment #4 from Don <clugdbug@yahoo.com.au> 2009-10-14 00:07:25 PDT ---
Fixed in DMD1.048

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------