1// RUN: %clang_cc1 -fsyntax-only -triple x86_64-apple-macosx10.9.0 -verify -Wsentinel -std=c++11 %s 2 3ptrdiff_t p0; // expected-error{{unknown}} 4size_t s0; // expected-error{{unknown}} 5void* v0 = NULL; // expected-error{{undeclared}} 6wint_t w0; // expected-error{{unknown}} 7max_align_t m0; // expected-error{{unknown}} 8 9#define __need_ptrdiff_t 10#include <stddef.h> 11 12ptrdiff_t p1; 13size_t s1; // expected-error{{unknown}} 14void* v1 = NULL; // expected-error{{undeclared}} 15wint_t w1; // expected-error{{unknown}} 16max_align_t m1; // expected-error{{unknown}} 17 18#define __need_size_t 19#include <stddef.h> 20 21ptrdiff_t p2; 22size_t s2; 23void* v2 = NULL; // expected-error{{undeclared}} 24wint_t w2; // expected-error{{unknown}} 25max_align_t m2; // expected-error{{unknown}} 26 27#define __need_NULL 28#include <stddef.h> 29 30ptrdiff_t p3; 31size_t s3; 32void* v3 = NULL; 33wint_t w3; // expected-error{{unknown}} 34max_align_t m3; // expected-error{{unknown}} 35 36// Shouldn't bring in wint_t by default: 37#include <stddef.h> 38 39ptrdiff_t p4; 40size_t s4; 41void* v4 = NULL; 42wint_t w4; // expected-error{{unknown}} 43max_align_t m4; 44 45#define __need_wint_t 46#include <stddef.h> 47 48ptrdiff_t p5; 49size_t s5; 50void* v5 = NULL; 51wint_t w5; 52max_align_t m5; 53 54 55// linux/stddef.h does something like this for cpp files: 56#undef NULL 57#define NULL 0 58 59// glibc (and other) headers then define __need_NULL and rely on stddef.h 60// to redefine NULL to the correct value again. 61#define __need_NULL 62#include <stddef.h> 63 64// gtk headers then use __attribute__((sentinel)), which doesn't work if NULL 65// is 0. 66void f(const char* c, ...) __attribute__((sentinel)); 67void g() { 68 f("", NULL); // Shouldn't warn. 69} 70