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