This patch enables Dialyzer to detect cases where a function has a specification for a return type containing some list with elements different than those Dialyzer's own algorithm can infer e.g. a function specified to return [atom()] when actually [[atom()]] is returned.<br>


<div class="gmail_quote"><div>
<br></div><div>Previously Dialyzer remained silent under normal operation, seeing that these two types have the empty list as a common element, so the spec was not 'completely irrelevant'.</div><div><br></div><div>

Using this patch one can find discrepancies in the specs of stdlib's sys.erl and erl_scan.erl. Kostis and I are in contact with the OTP team for the best way fix those as well.</div>

<div><br></div><div>  git fetch git://<a href="http://github.com/aronisstav/otp.git" target="_blank">github.com/aronisstav/otp.git</a> dialyzer-list-spec</div><div><br></div><div>Regards,</div><div><br></div><div>Stavros</div>


<div><br></div>
<div>---</div><div><br></div><div>The new warnings are:</div><div><br></div><div>sys.erl:303: Invalid type specification for function sys:handle_debug/4. The success typing is ([{_,_}],_,_,_) -> [{_,_}]<br></div><div>


<div>
erl_scan.erl:204: Invalid type specification for function erl_scan:token_info/2. The success typing is (_,'category' | 'column' | 'length' | 'line' | 'location' | 'symbol' | 'text' | maybe_improper_list('category' | 'column' | 'length' | 'line' | 'location' | 'symbol' | 'text','category' | 'column' | 'length' | 'line' | 'location' | 'symbol' | 'text' | [])) -> 'undefined' | maybe_improper_list({_,_},'undefined' | [] | {_,_}) | {_,_}</div>



<div>erl_scan.erl:242: Invalid type specification for function erl_scan:attributes_info/2. The success typing is (_,'column' | 'length' | 'line' | 'location' | 'text' | maybe_improper_list('column' | 'length' | 'line' | 'location' | 'text','column' | 'length' | 'line' | 'location' | 'text' | [])) -> 'undefined' | maybe_improper_list({_,_},'undefined' | [] | {_,_}) | {_,_}</div>



</div><div><br></div>
</div><br>