jeremyjh / dialyxir

Mix tasks to simplify use of Dialyzer in Elixir projects.
Apache License 2.0
1.69k stars 141 forks source link

Unexpected type error #393

Closed tim2CF closed 4 years ago

tim2CF commented 4 years ago

Sample project and details how to reproduce bug are there https://github.com/tim2CF/dialyzer_bug#dialyzerbug

jeremyjh commented 4 years ago

That is really interesting. I'm not sure where dialyzer is finding the type {atom() | [any()] | number() | {_, _, _, _}, [{atom() | tuple(), _}]}.

In the spec: eval_quoted(Macro.t(), list(), Macro.Env.t() | keyword()) :: {term(), binding :: list()}

It might be an Elixir bug or an Dialyzer bug but almost certainly not a dialyxir bug as we don't control any of the code generation or analysis. I would expect you can recreate with the dialyzer CLI, do you mind trying that?

tim2CF commented 4 years ago

Hm, I don't know how to probably use Dialyzer without mix task. If I just apply binary to beam files with PLT generated by Dialyxir, it fails with unrelated error

dialyzer: Analysis failed with error:
{undef,
 [{elixir_erl,debug_info,
   [core_v1,'Elixir.DialyzerBug',
    {elixir_v1,

But I agree, it's probably bug of Erlang, Elixir or Dialyzer.

tim2CF commented 4 years ago

Seems this particular bug has been fixed in Elixir, this PR https://github.com/elixir-lang/elixir/pull/9961 I'm closing this issue, thanks!