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