[dmd-beta] Struct Comparision WTF: Is the new or old behavior right?

Walter Bright walter at digitalmars.com
Fri Dec 9 23:56:30 PST 2011



On 12/9/2011 10:36 PM, David Simcha wrote:
> Using DMD 2.057 beta:
>
> // test2.d:
> import std.stdio;
>
> struct S {
>     double d;  // NaN
> }
>
> void main() {
>     S s;
>     writeln(s == S.init);
> }
>
> $ dmd test2.d -m32
> $ ./test2
> true
> $ dmd test2.d -m64
> $ ./test2
> false
>
> Somehow I think it's a bad idea to have the result of this comparison change 
> depending on whether you're compiling in 32- or 64-bit mode.  I just spent a 
> few hours debugging Plot2kill because this behavior changed between releases 
> in 64-bit mode, and I was comparing font structs to their .init values to 
> determine whether they had already been initialized.  Everything worked in 
> 32-bit mode but failed in 64-bit mode.  In 64-bit mode it looked like the 
> structs had already been initialized (e.g. titleFont == Font.init is false) so 
> they never got initialized.  Needless to say, GTK does weird things when you 
> pass in a NaN as a font size.
>

The 32 bit code is wrong (please file a bug report). Comparisons should always 
yield false if one or both operands is a nan.


More information about the dmd-beta mailing list