| // RUN: %clang_cc1 -fsyntax-only -verify -Wnonnull %s |
| |
| #ifdef __cplusplus |
| # define EXTERN_C extern "C" |
| #else |
| # define EXTERN_C extern |
| #endif |
| |
| typedef struct _FILE FILE; |
| typedef __SIZE_TYPE__ size_t; |
| typedef __builtin_va_list va_list; |
| |
| EXTERN_C int printf(const char *, ...); |
| EXTERN_C int fprintf(FILE *, const char *restrict, ...); |
| EXTERN_C int sprintf(char* restrict, char const* res, ...); |
| EXTERN_C int vfprintf(FILE* restrict, char const* res, __builtin_va_list); |
| |
| EXTERN_C int scanf(char const *restrict, ...); |
| EXTERN_C int fscanf(FILE* restrict, char const* res, ...); |
| EXTERN_C int sscanf(char const* restrict, char const* res, ...); |
| |
| void test(FILE *fp, va_list ap) { |
| char buf[256]; |
| int num; |
| |
| __builtin_printf(__null, "x"); |
| // expected-warning@-1 {{null passed to a callee that requires a non-null argument}} |
| |
| printf(__null, "xxd"); |
| // expected-warning@-1 {{null passed to a callee that requires a non-null argument}} |
| |
| fprintf(fp, __null, 42); |
| // expected-warning@-1 {{null passed to a callee that requires a non-null argument}} |
| |
| sprintf(buf, __null); |
| // expected-warning@-1 {{null passed to a callee that requires a non-null argument}} |
| |
| scanf(__null); |
| // expected-warning@-1 {{null passed to a callee that requires a non-null argument}} |
| |
| fscanf(fp, __null); |
| // expected-warning@-1 {{null passed to a callee that requires a non-null argument}} |
| |
| vfprintf(__null, "xxd", ap); |
| // expected-warning@-1 {{null passed to a callee that requires a non-null argument}} |
| |
| sscanf(__null, "%d", &num); |
| // expected-warning@-1 {{null passed to a callee that requires a non-null argument}} |
| } |