[erlang-bugs] HiPE bug with comparison of floats with integers
Mikael Pettersson
mikpe@REDACTED
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