[erlang-questions] Preprocessor bug?

Richard Carlsson <>
Sat Feb 23 20:03:21 CET 2008


I have changed the inliner so that instead of reporting a
compile-time error (which was really the wrong thing to do),
it now quietly skips the attempt to inline the call if the
arities don't match. (The fix is simple: find the place
which prints the error report, and change it to return {E,S}
in case of arity mismatch. Or wait for the next OTP release.)

Handling is_function/2 would let it remove the redundant code
as well. I'm leaving that for later.

    /Richard

David King wrote:
> I'm not sure if this is a bug or, if it is a bug, it even needs to be  
> fixed. This code:
> 
> f(F,A) when is_function(F,1) ->
>    F(A);
> f(F,B) when is_function(F,2) ->
>    F(B,B).
> 
> main() ->
>    f(fun(a) ->
>          io:format("f(g/1): ~p~n",[a])
>      end, a),
>    f(fun(b,b) ->
>          io:format("f(g/2): ~p~n",[b])
>      end, b).
> 
> compiles and works as expected, unless -compile(inline) is specified.
> If -compile(inline) is specified, the compiler dies with "error:  
> function called with wrong number of arguments!". I would think that  
> when the pre-processor can't determine at pre-compile time which  
> clause to run, it just wouldn't run one, but this is a mess I know I'm  
> getting into when I use -compile(inline), so it might not even matter.
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions


-- 
 "Having users is like optimization: the wise course is to delay it."
   -- Paul Graham



More information about the erlang-questions mailing list