16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -fsyntax-only -triple x86_64-apple-macosx10.9.0 -verify -Wsentinel -std=c++11 %s
26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
36bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesptrdiff_t p0; // expected-error{{unknown}}
46bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessize_t s0; // expected-error{{unknown}}
56bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid* v0 = NULL; // expected-error{{undeclared}}
66bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hineswint_t w0; // expected-error{{unknown}}
76bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesmax_align_t m0; // expected-error{{unknown}}
86bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
96bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define __need_ptrdiff_t
106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include <stddef.h>
116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesptrdiff_t p1;
136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessize_t s1; // expected-error{{unknown}}
146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid* v1 = NULL; // expected-error{{undeclared}}
156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hineswint_t w1; // expected-error{{unknown}}
166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesmax_align_t m1; // expected-error{{unknown}}
176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define __need_size_t
196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include <stddef.h>
206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesptrdiff_t p2;
226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessize_t s2;
236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid* v2 = NULL; // expected-error{{undeclared}}
246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hineswint_t w2; // expected-error{{unknown}}
256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesmax_align_t m2; // expected-error{{unknown}}
266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define __need_NULL
286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include <stddef.h>
296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesptrdiff_t p3;
316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessize_t s3;
326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid* v3 = NULL;
336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hineswint_t w3; // expected-error{{unknown}}
346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesmax_align_t m3; // expected-error{{unknown}}
356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Shouldn't bring in wint_t by default:
376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include <stddef.h>
386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesptrdiff_t p4;
406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessize_t s4;
416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid* v4 = NULL;
426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hineswint_t w4; // expected-error{{unknown}}
436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesmax_align_t m4;
446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define __need_wint_t
466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include <stddef.h>
476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesptrdiff_t p5;
496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinessize_t s5;
506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid* v5 = NULL;
516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hineswint_t w5;
526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesmax_align_t m5;
536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// linux/stddef.h does something like this for cpp files:
566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#undef NULL
576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define NULL 0
586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// glibc (and other) headers then define __need_NULL and rely on stddef.h
606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// to redefine NULL to the correct value again.
616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define __need_NULL
626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include <stddef.h>
636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// gtk headers then use __attribute__((sentinel)), which doesn't work if NULL
656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// is 0.
666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid f(const char* c, ...) __attribute__((sentinel));
676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid g() {
686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  f("", NULL);  // Shouldn't warn.
696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
70