[erlang-bugs] Specs of reltool

Kostis Sagonas kostis@REDACTED
Wed Jan 12 16:14:54 CET 2011


Kostis Sagonas wrote:
> A dialyzer user complained that he gets spurious warnings when using 
> reltool functions.  A quick dialyzer run revealed that reltool is full 
> of erroneous specs which cannot possibly be right.
> 
> For example, dialyzer complains that:
> 
> reltool.erl:178: The specification for reltool:get_target_spec/1 states 
> that the function might also return
>       {'ok',[[any()] | {_,_} | {_,_,_} | {_,_,_,_}] |
>       {'copy_file',[any()]} | {'strip_beam_file',[any()]} |
>       {'copy_file',[any()],[any()]} | {'create_dir',[any()],[any()]} |
>       {'write_file',[any()],maybe_improper_list(any(),binary() | [])} |
>       {'archive',[any()],[any()],[any()]} |
>       {'create_dir',[any()],[any()],[any()]}}
> but the inferred return is
>       {'error',string()} | {'ok',pid()}
> 
> and indeed:
> 
> get_target_spec(PidOrOptions)
>   when is_pid(PidOrOptions); is_list(PidOrOptions) ->
>     eval_server(PidOrOptions, true,
>         fun(Pid) -> reltool_server:gen_spec(Pid) end).
> 
> where there is a promise that eval_server/3 will return:
> 
> -spec eval_server(server(), boolean(), fun((server_pid()) -> term())) ->
>  {ok, server_pid()} | {error, reason()}.
> 
> 
> These two together cannot be right. In fact, it's easy to see that this 
> function returns whatever the fun in its third argument returns (which 
> is term() in this case, if one believes the 3rd argument).
> 
> In general, reltool produces many dialyzer warnings of similar kind.
> They should be fixed because they are not only wrong, but they affect 
> users of this application.

I was expecting some action from the responsible developer, especially 
since I've described the issue and its solution, but apparently my mail 
has been ignored during the last three months. :-(

Anyway, since the rebar developers kept bothering me, I've spent some 
time investigating this and fixed these problems. Some cleanup of the 
file was also done as a bonus.

    git fetch git://github.com/kostis/otp.git reltool-spec-fixes

Kostis


More information about the erlang-patches mailing list