[erlang-questions] 12B4 dialyzer problem 2

Tobias Lindahl tobias.lindahl@REDACTED
Thu Sep 11 12:55:56 CEST 2008


Hi Anthony,

Anthony Shipman wrote:
> 
> It appears that dialyzer can't prove that the parent and strmID fields can 
> never be undefined. This isn't surprising. But I expected that dialyzer would 
> accept the declaration
> 	parent:: pid(),
> to tell it that the field is never undefined.

Currently, the only way to say that a field cannot contain 'undefined' 
is to have a default value in the record declaration. The reason is that 
  all record constructions must follow the type declarations, and if you 
construct an empty record without a default value the type must also 
allow 'undefied'.

> 
> If I am going to get this problem everywhere I use this basic gen_server idiom 
> then dialyzer is going to give me lots and lots of false negatives.
> 

If Dialyzer reports a false positive, then this is a bug. You do not 
include the contract for streamIface:specialToDevice/3, so I can't 
determine if it is a false positive. Dialyzer should not complain unless 
one of the arguments is _totally_ incompatible with the contract, i.e., 
the argument type and the contract type has no intersection.

Tobias



More information about the erlang-questions mailing list