September 19, 2012 [dmd-internals] float.infinity->int test case in constfold.d | ||||
---|---|---|---|---|
| ||||
runnable/constfold.d contains the following test case: --- void test2() { float f = float.infinity; int i = cast(int) f; writeln(i); writeln(cast(int)float.max); assert(i == cast(int)float.max); assert(i == 0x80000000); } --- Is it really valid, i.e. is the result of the cast really defined? I didn't look up the correct behavior in the C standard, but interestingly both GCC and Clang (i.e. the LLVM constant folder) produce int.min in unoptimized builds but int.max in optimized builds of the following program: --- #include <iostream> #include <limits> int main(int argc, char const *argv[]) { std::cout << static_cast<int>(std::numeric_limits<float>::infinity()) << std::endl; return 0; } --- Can somebody shed light on the issue? David _______________________________________________ dmd-internals mailing list dmd-internals@puremagic.com http://lists.puremagic.com/mailman/listinfo/dmd-internals |
Copyright © 1999-2021 by the D Language Foundation