[erlang-bugs] Native compilation hangs with rm-reverse-eta-conversion

Anthony Ramine <>
Mon Jan 21 10:09:14 CET 2013

Hi Kostis,

My patch removes the automatic eta-abstraction for function references from the BEAM code generation [1]. The consequence of this is that some fun references labels (the ones which are from exported functions) are now taken from the exports table in beam_dict.

This makes hipe pass exported functions which are used as fun references to hipe_coordinator both in `Closures` and `Exported`, and that makes everything hang if the exported function contains a fun reference to itself, like in erl_syntax:is_literal/1 [3].

Could you explain to me what `Escaping` and `NonEscaping` means? More specifically, what the boolean() value in the pairs of `NonEscaping` mean.


[1] https://github.com/nox/otp/commit/42b87b
[2] https://github.com/nox/otp/blob/master/lib/hipe/main/hipe.erl#L762-770
[3] https://github.com/nox/otp/blob/master/lib/syntax_tools/src/erl_syntax.erl#L5909-5929

Anthony Ramine

Le 20 janv. 2013 à 09:30, Kostis Sagonas a écrit :

> The following is just a guess, but I suspect that your patch either broke a bytecode invariant that the hipe type analyzer relied on (in which case your code needs to respect this invariant), or generated code which is OK but it's code that had never been tested before (so it's a bug in the analysis of the native code compiler)

More information about the erlang-bugs mailing list