static void checkOpen (/*@open@*/ /*@null@*/ FILE *);
static void checkClosed (/*@closed@*/ /*@null@*/ FILE *);
void passOpen (/*@open@*/ FILE *f)
/*@ensures closed f@*/
{
(void) fputc (3, f);
} /* error: ensures not satisfied, didn't close */
/*@dependent@*/ FILE *returnOpen (char *s)
/*@ensures open result@*/
{
FILE *fle = fopen (s, "r");
assert (fle != NULL);
(void) fclose (fle);
return fle; /* error: ensures not satisfied */
}
int main (void)
{
FILE *fle = NULL;
char s[10];
checkClosed (fle); /* okay */
checkOpen (fle); /* error */
fle = fopen ("test", "r");
if (fle == NULL)
{
return 0;
}
passOpen (fle);
(void) fclose (fle); /* error: already closed */
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1