http://bugs.winehq.org/show_bug.cgi?id=28810
--- Comment #3 from Rico kgbricola@web.de 2011-11-19 09:07:34 CST --- Oh, nice explanation. Thank you.
Now let's describe, why I think this might be the same for your problem. There are only failing values which are theoretically big enough (b3ffffff). There is no conversation for exp_float but there might be one for got_float.
So if the path is "something special" the compiler might not convert to float (probably with valgrind) and without valgrind it might use the float value.
You may verify this with my test by commenting out e.g. the ok call in get_int2. That way you get the float as float: buggy.c:40: Test failed: 33554432.000000 33554432.000000
When the ok call is in you get the float as double: buggy.c:40: Test failed: 33554432.000000 33554431.000000
This happens without changing the gcc parameters! It's pure speculation that this might be the same problem but for me it looks a bit related, because changing some unrelated line changes the conversation. Valgrind might trigger the same...
Nevertheless I know where my problem comes from and how to resolve it.
Though, that doesn't solve your problem, sorry for the noise.