extern void abort(void); extern void exit(int); int bar(void); int baz(void); struct foo { struct foo *next; }; struct foo *test(struct foo *node) { while (node) { if (bar() && !baz()) break; node = node->next; } return node; } int bar (void) { return 0; } int baz (void) { return 0; } int main(void) { struct foo a, b, *c; a.next = &b; b.next = (struct foo *)0; c = test(&a); if (c) abort(); exit (0); }