HiPE bug with comparison of floats with integers
Paul Guyot
pguyot@REDACTED
Mon Jan 31 10:41:39 CET 2011
Hello,
There is a bug in HiPE compilation with the comparison of floats with integers.
This bug happens with the following two functions:
------
-module(hipe_zero).
-export([f/1, g/2]).
f(X) ->
Y = X / 2,
Y == 0.
g(X, Z) ->
Y = X / 2,
case Z of
test when Y == 0 -> test_zero;
test -> test_non_zero;
other -> other
end.
------
Beam will evaluate hipe_zero:f(0) and hipe_zero:f(0.0) to true, while HiPE will evaluate hipe_zero:f(0) and hipe_zero:f(0.0) to false. HiPE properly evaluates hipe_zero:f/1 to true if passed {icode_inline_bifs, false}. However, not inlining the '==' bif just masks the bug as HiPE does not properly evaluate hipe_zero:g(0, test) to test_zero.
Paul
--
Semiocast http://semiocast.com/
+33.183627948 - 20 rue Lacaze, 75014 Paris
More information about the erlang-bugs
mailing list