<div dir="ltr">Oh, I forgot this important information:<div><br></div><div>This fails with a build of OTP 17.3.4 and 17.4, compiled with --enable-dirty-schedulers --disable-hipe</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 16, 2014 at 1:07 AM, Jesper Louis Andersen <span dir="ltr"><<a href="mailto:jesper.louis.andersen@gmail.com" target="_blank">jesper.louis.andersen@gmail.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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" target="_blank">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><span class="HOEnZb"><font color="#888888"><div> </div>-- <br><div>J.</div>
</font></span></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div class="gmail_signature">J.</div>
</div>