Thread overview
[Issue 1257] New: Erroneous warning for ushort = (ushort | ushort)
Jun 05, 2007
d-bugmail
Sep 27, 2008
d-bugmail
Sep 27, 2008
d-bugmail
Dec 08, 2008
d-bugmail
Dec 08, 2008
d-bugmail
June 05, 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1257

           Summary: Erroneous warning for ushort = (ushort | ushort)
           Product: D
           Version: 1.014
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Keywords: rejects-valid
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla@digitalmars.com
        ReportedBy: clugdbug@yahoo.com.au


void main(){
ushort a = 1;
ushort b = 2;
ushort c = a|b;
}

dmd -w bug.d
warning - bug.d(5): Error: implicit conversion of expression (cast(int)a |
cast(
int)b) of type int to ushort can cause loss of data
-------

This is ridiculous. Logical operations on two operands of the same size should not be implicitly converted. The code above is _never_ a bug.

This is particularly bad because
int c = a|b;
does _not_ generate a warning, even though it involves a change from unsigned
to signed, _and_ a change of size, and is therefore likely to be a bug!


-- 

September 27, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1257


paching@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |paching@gmail.com




------- Comment #1 from paching@gmail.com  2008-09-26 23:53 -------
I've been bitten by this too. Simple operations like assigning the sum of two shorts to another short give warnings; I've had to shut them off as a workaround.


-- 

September 27, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1257





------- Comment #2 from andrei@metalanguage.com  2008-09-27 00:18 -------
(In reply to comment #1)
> I've been bitten by this too. Simple operations like assigning the sum of two shorts to another short give warnings; I've had to shut them off as a workaround.

I think the sum of any integrals smaller than int/uint should result in int/uint, so that warning is legit in that case. The reason is a mix of being principled (operations should avoid overflow) and being practical (int won't spill into long). Bitwise operations should indeed preserve size.


-- 

December 08, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1257


bugzilla@digitalmars.com changed:

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




------- Comment #3 from bugzilla@digitalmars.com  2008-12-08 03:39 -------
It doesn't give those warnings anymore.


-- 

December 08, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1257


smjg@iname.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |smjg@iname.com




------- Comment #4 from smjg@iname.com  2008-12-08 05:51 -------
See also issue 1977.


--