phobos unittests not passing with dmd built by clang

Martin Nowak dawg at dawgfoto.de
Tue Jan 31 15:45:08 PST 2012


On Tue, 31 Jan 2012 20:48:56 +0100, Jacob Carlborg <doob at me.com> wrote:

> On 2012-01-31 19:56, Martin Nowak wrote:
>> On Tue, 31 Jan 2012 18:13:29 +0100, Trass3r <un at known.com> wrote:
>>
>>>> Can anyone confirm this?
>>>> If yes, bug in clang, dmd or phobos?
>>>
>>> Note that the dmd testsuite passes for me.
>>
>> Clang behaves differently, but it's probably not a bug.
>>
>> ----
>> #include <stdio.h>
>> #include <math.h>
>>
>> int main()
>> {
>> long double foo = NAN;
>> double a = foo;
>> double b = NAN;
>> double c = fabs(NAN);
>> printf("%Lf %d\n", foo, (int)signbit(foo));
>> printf("%f %d\n", a, (int)signbit(a));
>> printf("%f %d\n", b, (int)signbit(b));
>> printf("%f %d\n", c, (int)signbit(c));
>> }
>> ----
>>
>> double a = foo; // seems like "FSTP m64fp" doesn't preserve the sign bit
>>
>> We need to fix the code in PortInitializer::PortInitializer() which
>> relies on
>> sign preserving of NaN size conversions.
>
> I thought Clang would be compatible with GCC.
>

I think it's undefined behavior to rely on the exact representation of NaN.

 From what I've seen whether "a" ends up with a sign or not depends on  
processor
internal state and is not specified by Intel, clang emits different code  
thus the difference.
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1486.htm


More information about the Digitalmars-d mailing list