diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Headers/stddefneeds.cpp | 69 | ||||
-rw-r--r-- | clang/test/Sema/format-strings.c | 3 |
2 files changed, 71 insertions, 1 deletions
diff --git a/clang/test/Headers/stddefneeds.cpp b/clang/test/Headers/stddefneeds.cpp new file mode 100644 index 00000000000..304a224acc6 --- /dev/null +++ b/clang/test/Headers/stddefneeds.cpp @@ -0,0 +1,69 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -Wsentinel -std=c++11 %s + +ptrdiff_t p0; // expected-error{{unknown}} +size_t s0; // expected-error{{unknown}} +void* v0 = NULL; // expected-error{{undeclared}} +wint_t w0; // expected-error{{unknown}} +max_align_t m0; // expected-error{{unknown}} + +#define __need_ptrdiff_t +#include <stddef.h> + +ptrdiff_t p1; +size_t s1; // expected-error{{unknown}} +void* v1 = NULL; // expected-error{{undeclared}} +wint_t w1; // expected-error{{unknown}} +max_align_t m1; // expected-error{{unknown}} + +#define __need_size_t +#include <stddef.h> + +ptrdiff_t p2; +size_t s2; +void* v2 = NULL; // expected-error{{undeclared}} +wint_t w2; // expected-error{{unknown}} +max_align_t m2; // expected-error{{unknown}} + +#define __need_NULL +#include <stddef.h> + +ptrdiff_t p3; +size_t s3; +void* v3 = NULL; +wint_t w3; // expected-error{{unknown}} +max_align_t m3; // expected-error{{unknown}} + +// Shouldn't bring in wint_t by default: +#include <stddef.h> + +ptrdiff_t p4; +size_t s4; +void* v4 = NULL; +wint_t w4; // expected-error{{unknown}} +max_align_t m4; + +#define __need_wint_t +#include <stddef.h> + +ptrdiff_t p5; +size_t s5; +void* v5 = NULL; +wint_t w5; +max_align_t m5; + + +// linux/stddef.h does something like this for cpp files: +#undef NULL +#define NULL 0 + +// glibc (and other) headers then define __need_NULL and rely on stddef.h +// to redefine NULL to the correct value again. +#define __need_NULL +#include <stddef.h> + +// gtk headers then use __attribute__((sentinel)), which doesn't work if NULL +// is 0. +void f(const char* c, ...) __attribute__((sentinel)); +void g() { + f("", NULL); // Shouldn't warn. +} diff --git a/clang/test/Sema/format-strings.c b/clang/test/Sema/format-strings.c index ad7b37c3e11..e31644a9875 100644 --- a/clang/test/Sema/format-strings.c +++ b/clang/test/Sema/format-strings.c @@ -1,8 +1,9 @@ // RUN: %clang_cc1 -fsyntax-only -verify -Wformat-nonliteral -isystem %S/Inputs %s // RUN: %clang_cc1 -fsyntax-only -verify -Wformat-nonliteral -isystem %S/Inputs -fno-signed-char %s -#define __need_wint_t #include <stdarg.h> +#include <stddef.h> +#define __need_wint_t #include <stddef.h> // For wint_t and wchar_t typedef struct _FILE FILE; |