Paul Eggert wrote:
> portable programs should not pass a NULL format to 'error', so this is not
> a gnulib bug.

Yes. But why does it not yield a GCC warning?

======================== foo.c =========================
#include <errno.h>
#include <stdlib.h>
extern void error (int __status, int __errnum, __const char *__format, ...)
  __attribute__ ((__format__ (__printf__, 3, 4)))
#ifdef DECLARE_NONNULL
  __attribute__ ((__nonnull__(3)))
#endif
;

void foo ()
{
  error (EXIT_FAILURE, EPERM, NULL);
}
=====================================================

$ gcc -Wformat=2 -c foo.c
$ gcc -Wformat=2 -c foo.c -DDECLARE_NONNULL
foo.c: In function 'foo':
foo.c:12: warning: null argument where non-null required (argument 3)

Should the declaration in glibc's and gnulib's error.h be changed to contain a
__attribute__ ((__nonnull__(3)))  ?

Or should gcc be changed so that  __attribute__ ((__format__ (__printf__, m, 
n)))
implies __attribute__ ((__nonnull__(m))) ?

Bruno


Reply via email to