digitalmars.D.bugs - optimizer bug ?
-
h3r3tic
(37/37)
Jun 05 2004
<Dcode>
import std.c.stdio;
ubyte[4] arr;
void foo()
{
*cast(float*)(&arr[0]) = 3.14;
}
uint bar()
{
uint result = *cast(uint*)&arr[0];
return result;
}
float baz()
{
assert (float.size == uint.size);
uint result = bar();
result &= 0xffffffff; // try to remove this line in optimize (-O) mode !
return *cast(float*)&result;
}
void main()
{
foo();
float x = baz();
printf("value: %f", x);
getchar();
}
</Dcode>
guess what happens when the commented line is removed in optimized mode. ok,
i'll tell you ;) instead of printing "3.140000" the program outputs "-nan".
i guess its not an optimization in that case ;)
why "result &= 0xffffffff;" ? it could be anything, like increment and then
decrement. seems like the value just needs to be "touched" in some way,
otherwise the compiler optimizes it out...
compiler version: 0.91
platform: win xp sp1
thanks for help,
Tom
Jun 05 2004








"h3r3tic" <aintmymail foo.bar>