typedef struct _node *node;
typedef struct {
char *val;
} *item;
struct _node {
/*@dependent@*/ item val;
/*@null@*/ node next;
}
void node_free1 (/*@only@*/ node n)
{
free (n); /* errors: must free n->next */
}
void node_free2 (/*@only@*/ node n)
{
node nn = n->next;
free (n); /* okay */
} /* error - nn not released */
void node_free3 (/*@only@*/ node n)
{
node nn = n->next;
free (n->val); /* error: free dependent */
free (n); /* okay */
if (nn != NULL) {
node_free1 (nn); /* okay (error for null) */
}
} /* okay */
syntax highlighted by Code2HTML, v. 0.9.1