<div dir="ltr">Hi OTP team and other interested parties.<div><br></div><div>While I was building up the enacl application, I have discovered a problem where I can crash the dialyzer. Attached are two minimized files which exposes the problem. To compile this I did:</div><div><br></div><div>erlc +debug_info *.erl</div><div>dialyzer --build_plt --apps kernel stdlib</div><div>dialyzer *.beam</div><div><br></div><div>and it produces the following IDE (Internal Dialyzer Error):</div><div><br></div><div><div>erlc +debug_info *.erl</div><div>dialyzer *.beam</div><div>  Checking whether the PLT /home/jlouis/.dialyzer_plt is up-to-date... yes</div><div>  Proceeding with analysis...</div><div>=ERROR REPORT==== 16-Dec-2014::01:00:27 ===</div><div>Error in process <0.48.0> with exit value: {{case_clause,map},[{dialyzer_dataflow,find_terminals,1,[{file,"dialyzer_dataflow.erl"},{line,3451}]},{dialyzer_dataflow,find_terminals_list,3,[{file,"dialyzer_dataflow.erl"},{line,3504}]},{dialyzer_dataflow,classify_returns... </div><div><br></div><div><br></div><div>dialyzer: Analysis failed with error:</div><div>{{case_clause,map},</div><div> [{dialyzer_dataflow,find_terminals,1,</div><div>                     [{file,"dialyzer_dataflow.erl"},{line,3451}]},</div><div>  {dialyzer_dataflow,find_terminals_list,3,</div><div>                     [{file,"dialyzer_dataflow.erl"},{line,3504}]},</div><div>  {dialyzer_dataflow,classify_returns,1,</div><div>                     [{file,"dialyzer_dataflow.erl"},{line,3443}]},</div><div>  {dialyzer_dataflow,'-state__get_warnings/2-fun-0-',7,</div><div>                     [{file,"dialyzer_dataflow.erl"},{line,2908}]},</div><div>  {lists,foldl,3,[{file,"lists.erl"},{line,1261}]},</div><div>  {dialyzer_dataflow,state__get_warnings,2,</div><div>                     [{file,"dialyzer_dataflow.erl"},{line,2934}]},</div><div>  {dialyzer_dataflow,get_warnings,5,</div><div>                     [{file,"dialyzer_dataflow.erl"},{line,142}]},</div><div>  {dialyzer_succ_typings,collect_warnings,2,</div><div>                         [{file,"dialyzer_succ_typings.erl"},{line,182}]}]}</div><div>Last messages in the log cache:</div><div>  Reading files and computing callgraph... done in 0.06 secs</div><div>  Removing edges... done in 0.01 secs</div><div>Makefile:2: recipe for target 'all' failed</div><div>make: *** [all] Error 1</div><div><br></div><div>I have attached the two culprit files. They have the following sizes:</div><div><br></div><div><div>jlouis@eldar:~/tmp/problem$ wc *.erl</div><div> 12  29 211 enacl.erl</div><div> 23  36 460 enacl_nif.erl</div><div> 35  65 671 total</div></div><div><br></div><div>and I think it may be possible to shrink further down, but I think it is already small enough to be workable. Do note: while one part is a NIF, you don't need the underlying C code to break the dialyzer.</div><div><br></div><div>The full repository is at:</div><div><br></div><div><a href="https://github.com/jlouis/enacl">https://github.com/jlouis/enacl</a></div><div><br></div><div>and the commit ID 23e535fcc23c1 should have the error if you want to look at the full repository. It does require a properly installed libsodium, which is not in Debian/Ubuntu for instance, which is why I have tried to narrow down the problem before reporting it.</div><div><br></div><div>I hope this is enough to track down the error, perhaps by looking at the backtrace and error case alone. Otherwise, please come back to me.</div><div> </div>-- <br><div class="gmail_signature">J.</div>
</div></div>