https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84202
--- Comment #3 from Eric Gallager <egallager at gcc dot gnu.org> --- (In reply to Martin Sebor from comment #0) > GCC silently accepts definitions of functions such as f() below declared > with attribute returns_nonnull. Clang issues -Wnonnull on functions that > trivially violate that guarantee. > > void* __attribute__ ((returns_nonnull)) f () > { > return 0; // missing -Wnonnull > } > > Diagnosing trivial mistakes like the one above is only of very limited > usefulness. GCC can do much better by also diagnosing functions that might > return null such as the two below. Clang doesn't diagnose these. Maybe split it into a separate -Wmaybe-nonnull for the tougher cases. > > void* __attribute__ ((returns_nonnull)) g (unsigned n) > { > return __builtin_malloc (n); // missing -Wnonnull > } > > void* __attribute__ ((returns_nonnull)) h (unsigned n) > { > static char buf[256]; > > return n < sizeof buf ? buf : __builtin_malloc (n); // missing -Wnonnull > }