[erlang-bugs] HiPe compiler FP inlining crashing
Mikael Pettersson
mikpelinux@REDACTED
Wed Nov 25 20:46:40 CET 2015
Mattias Jansson writes:
> Hello.
>
> I am having a problem with a crashing HiPe compiler.
Note, it's "HiPE" not "HiPe".
>
> It has been tested on Erlang OTP 18.1 (64-bit) on OSX 10.11.1, and also on Fedora Linux 22 with OTP versions 18.0 and 17.5 (64-bit).
> It crashes on Linux as well as OSX, but it does not crash in OTP 17.5. This has only been seen in 18.*
>
> The following code has been shrunk to remain syntactically correct and still show the error when compiling
> (you’d be surprised by how much of this code is actually necessary to reproduce this).
>
> <code>
> -module(rat_calc).
>
> -export([eat/0]).
>
> eat() ->
> eat_what(1.0, #{}).
>
> eat_what(Factor, #{rat_type := LT} = Rat) ->
> #{ cheese := Cheese } = Rat,
> UnitCheese = Cheese / 2,
> RetA = case eat() of
> {full, RetA1} ->
> CheeseB2 = min(RetA1, UnitCheese) * Factor,
> case eat() of
> full ->
> {win, RetA1};
> hungry ->
> {partial, RetA1 - CheeseB2}
> end;
> AOther ->
> AOther
> end,
> RetB = case eat() of
> {full, RetB1} ->
> CheeseA2 = min(RetB1, UnitCheese) * Factor,
> rat:init(single, LT, CheeseA2),
> case eat() of
> full ->
> {full, RetB1};
> hungry ->
> {hungry, RetB1 - CheeseA2}
> end
> end,
> {RetA, RetB}.
> </code>
>
> The code compiles without problem if running the compiler without the +native flag. With the flag, the compiler will crash.
> If compiling with the no_inline_fp flag enabled, the compiler does not crash.
I can reproduce the compiler crash with OTP 18.1 on Linux/x86_64, but not with OTP 17.5.
The crash is in a sanity check (hipe_icode_fp:assert_assigned/1) at the ICode level, well
before any target-dependent code is generated.
This could be caused by changes in the BEAM compiler's output, or by some change in HiPE.
Presumably a git bisect ought to identify it; care to try that?
/Mikael
More information about the erlang-bugs
mailing list