On Sat, Jul 18, 2009 at 1:58 PM, Ramsay Jones<ramsay@xxxxxxxxxxxxxxxxxxx> wrote: > > These sparse warnings are caused by broken new-lib headers, > which sometimes result in NULL being defined as 0, and at > other times defined as ((void *)0). > > In essence, the only header which works correctly (by defining > NULL as ((void *)0)) is stddef.h. The stdio.h and time.h headers > also work, almost by accident, by indirectly including stddef.h. > The other standard headers which are required to define the NULL > macro, namely locale.h, stdlib.h, string.h and wchar.h, all > define the macro as the 0 token. (This is a slightly simplified > description of the problem). > > In order to suppress these warnings, include the stddef.h header > at the start of ptrlist.c. > > Signed-off-by: Ramsay Jones <ramsay@xxxxxxxxxxxxxxxxxxx> > --- > > Hi Chris, > > $ cat -n null-test.sh > 1 #!/bin/bash > 2 > 3 # The C99 standard says that the following headers define NULL: > 4 # locale.h (7.11), stddef.h (7.17), stdio.h (7.19.1), > 5 # stdlib.h (7.20), string.h (7.21.1), time.h (7.23.1), > 6 # wchar.h (7.24.1). > 7 > 8 for i in locale.h stddef.h stdio.h stdlib.h string.h time.h wchar.h > 9 do > 10 printf "%10s: " $i > 11 printf "#include<%s>\nchar *xyz_ptr = NULL;\n" $i >t.c > 12 cgcc -E t.c | grep xyz_ptr > 13 done > 14 rm t.c > 15 > $ ./null-test.sh That is what I get in FC11: locale.h: char *xyz_ptr = ((void *)0); stddef.h: char *xyz_ptr = ((void *)0); stdio.h: char *xyz_ptr = ((void *)0); stdlib.h: char *xyz_ptr = ((void *)0); string.h: char *xyz_ptr = ((void *)0); time.h: char *xyz_ptr = ((void *)0); wchar.h: char *xyz_ptr = ((void *)0); Which system has this problem? Chris -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html