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

Paul Guyot pguyot@REDACTED
Mon Jan 31 11:31:26 CET 2011


Le 31 janv. 2011 à 11:20, Mikael Pettersson a écrit :

> 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).

Mikael,

Thank you for your quick reply. Indeed, I should have mentioned the platform: the bug can be observed on 64-bit x86 (MacOS X and FreeBSD).

Regards,

Paul
-- 
Semiocast            http://semiocast.com/
+33.183627948 - 20 rue Lacaze, 75014 Paris



More information about the erlang-bugs mailing list