On Mon, Aug 20, 2012 at 01:51:49PM -0600, Eric Blake wrote: > Our existing STRNEQ_NULLABLE() triggered a warning in gcc 4.7 when > used with a literal NULL argument: > > qemumonitorjsontest.c: In function 'testQemuMonitorJSONGetMachines': > qemumonitorjsontest.c:289:5: error: null argument where non-null required (argument 1) [-Werror=nonnull] > > even though the strcmp is provably dead when a null argument is > present. Squelch the warning by refactoring things so that gcc > never sees strcmp() called with NULL arguments (we still compare > NULL as not equal to "", this rewrite merely aids gcc). > > Next, gcc has a valid warning about a literal NULLSTR(NULL): > > qemumonitorjsontest.c:289:5: error: invalid application of 'sizeof' to a void type [-Werror=pointer-arith] > > Of course, you'd never write NULLSTR(NULL) directly, but it is > handy to use through macros. And since we only really need the > code to be warning-free when developing with modern gcc, and > merely compiled correctly elsewhere, we can rely on gcc extensions > to avoid dereferencing NULL even inside a sizeof operation. > > * src/internal.h (STREQ_NULLABLE, STRNEQ_NULLABLE): Avoid gcc 4.7 > stupidity. > (NULLSTR): Allow passing compile-time constants via macros. > --- > src/internal.h | 24 ++++++++++++++++++------ > 1 file changed, 18 insertions(+), 6 deletions(-) Not sure I entirely understand the GCC black magic, but if it works for you I'll ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list