/* An example where the deallocator requires non-NULL. */ struct foo; extern void foo_release (struct foo *) __attribute__((nonnull)); extern struct foo *foo_acquire (void) __attribute__ ((malloc (foo_release))); void test_1 (void) { struct foo *p = foo_acquire (); /* { dg-message "this call could return NULL" } */ foo_release (p); /* { dg-warning "use of possibly-NULL 'p' where non-null" } */ } void test_2 (void) { struct foo *p = foo_acquire (); if (!p) return; foo_release (p); }