<div dir="ltr">Even if we commit this workaround, can we report this as a bug to upstream Linux?  The test case you have shows how this definition of NULL is broken on x86_64, even in C with gcc:<div><pre style="color:rgb(0,0,0)">
$ cat t.c
#define NULL 0
int printf(const char *, ...);
int main() {
  printf("%d %d %d %d %d %d %p\n", 1, 2, 3, 4, 5, 6, 0xdeadbeefdeadbeefULL);
  printf("%d %d %d %d %d %d %p\n", 1, 2, 3, 4, 5, 6, NULL);
}

$ gcc -w t.c -o t && ./t
1 2 3 4 5 6 0xdeadbeefdeadbeef
1 2 3 4 5 6 0xdeadbeef00000000</pre></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Apr 27, 2014 at 2:50 PM, Nico Weber <span dir="ltr"><<a href="mailto:thakis@chromium.org" target="_blank">thakis@chromium.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
linux/stddef.h does something like<br>
<br>
#undef NULL<br>
#define NULL 0<br>
<br>
when included for C++ translation units, and by transitivity it ends<br>
up being pulled in often on linux (see llvm bug for examples).<br>
-Wsentinel doesn't allow 0 as sentinel, leading to warnings such as<br>
<br>
small.cc:6:18: error: missing sentinel in function call [-Werror,-Wsentinel]<br>
  foo("bar", NULL);<br>
                 ^<br>
                 , NULL<br>
<br>
<br>
To "fix" this, files defines __need_NULL and re-include stddef.h,<br>
assuming that stddef.h redefines NULL if __need_NULL is defined<br>
(similar to the __need_wint_t code that's already there). The attached<br>
patch teaches clang's stddef.h about __need_NULL. (As far as I<br>
understand, this shouldn't interfere with modules – linux/stddef.h<br>
interferes with that, but it does so independently of this patch.)<br>
<br>
Fixes PR12997. Patch mostly by Lei Zhang <<a href="mailto:thestig@chromium.org">thestig@chromium.org</a>>, test<br>
and tweaks by me.<br>
<span class="HOEnZb"><font color="#888888"><br>
Nico<br>
</font></span><br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>