dlialyzer a bit too sceptic?

Ulf Wiger (AL/EAB) <>
Mon Jun 26 12:02:13 CEST 2006


 
Just for the record, the problem was that the function
in question wasn't exported. After seeing Dialyzer's 
warning, I simply assumed that it was.

The helpful message from Dialyzer would of course have
been that the call will fail because the function isn't
exported.

BR,
Ulf W

> -----Original Message-----
> From: Tobias Lindahl [mailto:] 
> Sent: den 21 juni 2006 18:56
> To: Ulf Wiger (AL/EAB)
> Cc: erlang-questions
> Subject: Re: dlialyzer a bit too sceptic?
> 
> This seems very strange to me too. Can you send me the module 
> (offline from the list) so that I can have a look?
> 
> By the way, which version of Dialyzer is this?
> 
> Tobias
> 
> 
> Ulf Wiger (AL/EAB) wrote:
> > Dialyzer (R11B-0) gave me the following warning on some 
> 'rdbms' code:
> > 
> > {rdbms_groups,'-do_add_members/2-fun-0-',2}: Call to function 
> > {rdbms_props,do_write_property,2} with signature 
> ((_,{{'acl',atom()} | 
> > {'typedef',_} | {'attr',_,_} | 'access_module' | 'acl' | 
> 'indexes' | 
> > 'read_filter' | 'rec_type' | 'references' | 'write_filter',_}) -> 
> > 'ok') will fail since the arguments are of type 
> > ('schema',{{'group',_,'membership'},_})!
> > 
> > 
> > But the function rdbms_props:do_write_property/2 looks like this:
> > 
> > 
> > do_write_property(Tab, Prop) ->
> >     mnesia_schema:do_write_table_property(Tab, Prop).
> > 
> > 
> > I.e. absolutely no restrictions on Prop. If one were to 
> introduce one, 
> > it would be something similar to that of
> > mnesia_schema:write_table_property/2 - namely that Prop is a tuple 
> > with at least one element.
> > 
> > 
> > write_table_property(Tab, Prop) when tuple(Prop), size(Prop) >= 1 ->
> >     schema_transaction(fun() -> do_write_table_property(Tab, Prop) 
> > end); write_table_property(Tab, Prop) ->
> >     {aborted, {bad_type, Tab, Prop}}.
> > 
> > do_write_table_property(Tab, Prop) ->
> >     TidTs = get_tid_ts_and_lock(schema, write),
> >     {_, _, Ts} = TidTs,
> >     Store = Ts#tidstore.store,
> >     case change_prop_in_existing_op(Tab, Prop, 
> write_property, Store) of
> > 	true ->
> > 	    ...
> > 	    %% we have merged the table prop into the create_table op
> > 	    ok;
> > 	false ->
> > 	    ...,
> > 	    insert_schema_ops(TidTs, make_write_table_properties(Tab,
> > [Prop]))
> >     end.
> > 
> > 
> > It's not at all clear to me why Dialyzer thinks the call would fail.
> > 
> > BR,
> > Ulf W
> 



More information about the erlang-questions mailing list