<div dir="auto"><div>When you comment out your nowarn directive, you indeed get told<div dir="auto"><br></div><div dir="auto">dt.erl:11: The call erlang:element(2,Dict::dict:dict(_,_)) contains an opaque term as 2nd argument when terms of different types are expected in these positions</div><div dir="auto"><br></div><div dir="auto">which I'm guessing, is what your real code also gets?</div><div dir="auto"><br></div><div dir="auto">I don't think it will be possible to let dialyzer think otherwise. So I would suggest making whatever type you're dealing with non opaque. Or fix the code to not look inside an opaque type :-)</div><div dir="auto"><br></div><div dir="auto">Cheers, Robby</div><div dir="auto"><br></div><br><br><div class="gmail_quote"><div dir="ltr">On Sat, 13 Oct 2018 18:37 Peti Gömöri, <<a href="mailto:gomoripeti@gmail.com">gomoripeti@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Robby,<div><br></div><div>While violation of opacity of data types is a bad, bad thing to do, it wont necessarily result in a crash at runtime. I guess that dialyzer by default infers that inner() function's return success type is none() because of the opacity violation, but I would like to override this, to allow inner() to return something (any()). This way I could check discrepancies in other parts of outer() function (and transitively the whole application)</div><div><br></div><div>thanks</div><div>Peter</div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, Oct 13, 2018 at 4:57 PM Robert Raschke <<a href="mailto:rtrlists@googlemail.com" target="_blank" rel="noreferrer">rtrlists@googlemail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">Hi Peti,<div dir="auto"><br></div><div dir="auto">that dialyzer warning usually really means what it says, unfortunately without pointing out where exactly the path is that leads to "no return". In my experience, it is worth investigating where your code may end up with an error that leads to a crash. And not try to silence the warning. </div><div dir="auto"><br></div><div dir="auto">Cheers, </div><div dir="auto">Robby</div><div dir="auto"><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, 13 Oct 2018 15:01 Peti Gömöri, <<a href="mailto:gomoripeti@gmail.com" target="_blank" rel="noreferrer">gomoripeti@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi,<div><br></div><div>Let's say I have a function that does a bad thing, but I now it will actually return. I can use the `-dialyzer` module attribute to silence the warning about the particular function, but is there any way to convince dialyzer to ignore that warning and assume that the function will return (and consequently all other functions calling it will also return).</div><div><br></div><div>For example for the below module dialyzer still warns:</div><div>dt.erl:6: Function outer/0 has no local return<br></div><div><br></div><div>```</div><div><div>-module(dt).</div><div> -export([outer/0]).</div><div><br></div><div>-dialyzer({nowarn_function, inner/0}).</div><div><br></div><div>outer() -></div><div>    inner().</div><div><br></div><div>inner() -></div><div>    Dict = dict:new(),</div><div>    element(2, Dict).</div></div><div>```</div><div><br></div><div>(this is just an example, I dont want to decompose a dict)</div><div><br></div><div>thanks</div><div>Peter</div></div></div></div>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" rel="noreferrer noreferrer" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer noreferrer noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div>
</blockquote></div>
</blockquote></div></div></div>