[erlang-bugs] HiPE bug with comparison of floats with integers

Mikael Pettersson <>
Mon Jan 31 11:20:43 CET 2011


Paul Guyot writes:
 > 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.

Platform? If it's 32-bit x86, please also try 64-bit x86 (and vice-versa).


More information about the erlang-bugs mailing list