1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
typedef struct { /*@null@*/ /*@only@*/ int *x; } *st;
void f(/*@only@*/ st x)
{
if (x->x != NULL)
{
free (x->x);
} ;
free (x);
}
void f2 (/*@only@*/ st x)
{
if (x->x != NULL)
{
free (x->x);
}
else
{
;
}
free (x);
}
void g (/*@only@*/ st x)
{
if (x->x == NULL)
{
}
else
{
free (x->x);
}
free (x);
}
void h(/*@only@*/ st x)
{
if (7 > 3)
{
if (x->x != NULL)
{
free (x->x);
}
} /* 1. Storage x->x is released in one path, but live in another. */
free (x);
}
void m(/*@only@*/ st x)
{
if (7 > 3)
{
}
else
{
free (x->x); /* 2. Possibly null storage passed as non-null param: x->x */
} /* 3. Storage x->x is released in one path, but live in another. */
free (x);
}
|