typedef struct _node *node;
struct _node {
int val;
/*@dependent@*/ /*@null@*/ node next;
}
void node_free1 (/*@only@*/ node n)
{
free (n); /* error: must free n->next */
}
void node_free2 (/*@only@*/ node n)
{
node nn = n->next;
free (n); /* okay */
} /* okay - no need to free nn since it is dependent */
void node_free3 (/*@only@*/ node n)
{
node nn = n->next;
free (n); /* okay */
node_free1 (nn); /* error: dependent at only */
} /* okay */