Bug in HiPE on x86-64?

Mikael Pettersson mikpe@REDACTED
Tue Jun 20 17:52:31 CEST 2006


Stefan Axelsson L \(LN/EAB\) writes:
 > Hi, I'm seeing different behaviour depending on whether a module is
 > compiled with HiPE and without, when I make a call with a function
 > argument. It works when I wrap the function in an anonymous function
 > though. Is this a feature or a bug? I've read the documentation and
 > while there are a few differences noted, nothing really jumps out at me
 > that would explain this (I'm a relative newbie to Erlang, so that's not
 > to say isn't in there of course).
 > 
 > Below are a few test cases that provoke the deviation. In the first case
 > the evaluation succeeds and in the second I get an error message.
 > Removing the -smp switch makes no difference. As mentioned, invoking the
 > test as: "merge_sort:test_sort(1000000, 1, fun(N,Xs)->
 > merge_sort:merge_sort(N,Xs) end)/1000000." works, i.e. Produces the
 > expected results.
 > 
 > This is on an AMD Opteron x86-64. The code and details are included
 > below.
...
 > sax@REDACTED:~/Erlang> erl -smp
 > Erlang (BEAM) emulator version 5.5 [source] [64-bit] [smp:2]
 > [async-threads:0] [hipe]
 > 
 > Eshell V5.5  (abort with ^G)
 > 1> c(merge_sort,native).
 > {ok,merge_sort}
 > 2> merge_sort:test_sort(1000000, 1, fun
 > merge_sort:merge_sort/2)/1000000.
 > ** exited: {{badfun,#Fun<merge_sort.merge_sort.2>},[]} **
 > 3>
 > =ERROR REPORT==== 20-Jun-2006::11:10:20 ===
 > Error in process <0.32.0> with exit value:
 > {{badfun,#Fun<merge_sort.merge_sort.2>},[]}

I've reproduced this problem on 32-bit PowerPC. It's not dependent on
architecture or word size; instead, the issue appears to be that these
pseudo-closures (values of fun M:F/A expressions) aren't recognized by
HiPE-generated code as function values.

Thanks for reporting this. We'll look into it.

/Mikael



More information about the erlang-questions mailing list