Jim Meyering wrote: > > Arguments for doing it: > > - Allows GCC to produce its warning when passed a literal NULL value. > > - An added piece of documentation (but only when done completely, > > throughout gnulib). > > - Allows tools like the clang static analyzer to avoid warning about > what it would otherwise call a potential NULL dereference.
Good point. The analysis is not very capable at this point, but it can improve in the future. For example, in this code, I get a warning only about the first function. The static analysis done by the Eclipse Java compiler would also warn about a redundant 'if' in the second function. =========================== foo.c ============================== #include <stddef.h> extern int func1 (char *); extern int func2 (char *) __attribute__ ((__nonnull__ (1))); int foo1 (char *s) { int n = func1 (s); if (s == NULL) n += func2 (s); return n; } int foo2 (char *s) { int n = func2 (s); if (s != NULL) n++; return n; } ================================================================= $ scan-build gcc -c -O foo.c ANALYZE: foo.c foo1 foo.c:11:10: warning: Null pointer passed as an argument to a 'nonnull' parameter n += func2 (s); ^ ~ ANALYZE: foo.c foo2 1 diagnostic generated. I'll post a proposal for __nonnull__ declarations. Bruno