[erlang-bugs] Possible Dialyzer bug (reproducible test case)

Jesper Louis Andersen jesper.louis.andersen@REDACTED
Thu Jan 16 16:09:07 CET 2014


I may be totally off here, but I have a strange bug which I have seen twice
now on R16B03, OSX for the Dialyzer. To reproduce it, execute the following
steps:

# Clone repository and force a specific version
; git clone https://github.com/jlouis/msgpack-erlang.git
; cd msgpack-erlang
; git checkout origin/dialyzer-failure
; make
; make build_plt # Takes about 2 minutes
; make dialyzer

Gives the following:

=ERROR REPORT==== 16-Jan-2014::15:52:18 ===
Error in process <0.67.0> with exit value:
{function_clause,[{erl_types,unify_lists,[[{c,tuple,[{c,atom,[ext],unknown},{c,atom,[msgpack_term],unknown}],{2,{c,atom,[ext],unknown}}}],[],[],[{c,tuple,[{c,atom,[enable_str],unknown},{c,atom,[true],unknown}],{2,{c,atom...


dialyzer: Analysis failed with error:
{function_clause,[{erl_types,unify_lists,
                             [[{c,tuple,[...],...}],[],[],[{...}|...],[]],
                             [{file,"erl_types.erl"},{line,2695}]},
                  {erl_types,t_unify,4,[{file,[...]},{line,...}]},
                  {erl_types,t_unify,4,[{file,...},{...}]},
                  {erl_types,t_unify,3,[{...}|...]},
                  {dialyzer_typesig,solve_subtype,4,[...]},
                  {dialyzer_typesig,mk_constraint,3,...},
                  {dialyzer_typesig,state__store_conj,...},
                  {dialyzer_typesig,...}]}
Last messages in the log cache:
  Reading files and computing callgraph... done in 0.27 secs
  Removing edges... done in 0.04 secs

=ERROR REPORT==== 16-Jan-2014::15:52:18 ===
Error in process <0.69.0> with exit value:
{badarg,[{ets,insert,[790562,[{{msgpack,pack,1},{{c,binary,[8,8],unknown},[{c,union,[none,{c,binary,[8,0],unknown},none,none,{c,list,[{c,union,[none,{c,binary,[8,0],unknown},none,none,{c,list,[any,{c,nil,[],unknown}],unknown...

make: *** [dialyzer] Error 1

If you run `git show origin/dialyzer-failure` you have the following patch
chunk:

diff --git a/include/msgpack.hrl b/include/msgpack.hrl
index 6ef046d..4796492 100644
--- a/include/msgpack.hrl
+++ b/include/msgpack.hrl
@@ -63,8 +63,8 @@
           impl = erlang      :: erlang | nif,
           allow_atom = none  :: none | pack, %% allows atom when packing
           enable_str = false :: boolean(), %% true for new spec
-          ext_packer = undefined :: msgpack_ext_packer(),
-          ext_unpacker = undefined :: msgpack_ext_unpacker(),
+          ext_packer = undefined :: undefined | msgpack_ext_packer(),
+          ext_unpacker = undefined :: undefined | msgpack_ext_unpacker(),
           original_list = []       :: msgpack_list_options()
          }).

Undoing this patch chunk makes the dialyzer report a slew of warnings, but
not fail.

Is it possible that someone can try doing the same on another setup to
verify the presence/absence of the error? Also preferable on older releases
to make a target for bisection.


-- 
J.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20140116/b8e14a4d/attachment.htm>


More information about the erlang-bugs mailing list