Hey,
Let's define a function which is supposed to return us a list of links
for a given process:
-spec links(pid()) -> [port() | pid()].
links(Pid) ->
{links, Links} = process_info(Pid, links),
Links.
Now let's run the dialyzer on the beam file:
dialyzer -Wno_return -Wunderspecs --fullpath --plt .plt pi.beam
Checking whether the PLT .plt is up-to-date... yes
Proceeding with analysis...
pi.erl:5: Type specification pi:links(pid()) -> [port() | pid()] is a
supertype of the success typing: pi:links(pid()) -> [pid()]
done in 0m1.45s
done (warnings were emitted)
However it's clearly not right. For instance:
()1> erlang:process_info(whereis(erl_prim_loader), links).
{links,[#Port<0.1>,<0.0.0>]}
I wanted to fix it by myself, however could not find the right place
to apply the patch. Where can I find specs for ERTS BIFs?
Thanks,
Michal