1fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner// Like the compiler, the static analyzer treats some functions differently if
2fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner// they come from a system header -- for example, it is assumed that system
3fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner// functions do not arbitrarily free() their parameters, and that some bugs
4fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner// found in system headers cannot be fixed by the user and should be
5fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner// suppressed.
6fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner#pragma clang system_header
7fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner
8fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner#ifdef __cplusplus
9fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner#define restrict /*restrict*/
10fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner#endif
11fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner
12fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnertypedef struct _FILE FILE;
13fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnerextern FILE *stdin;
14fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnerextern FILE *stdout;
15fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnerextern FILE *stderr;
16fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner// Include a variant of standard streams that occur in the pre-processed file.
17fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnerextern FILE *__stdinp;
18fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnerextern FILE *__stdoutp;
19fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnerextern FILE *__stderrp;
20fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner
213c3fe462f7978b429ecdd71750c26be25c3d1335Chris Lattnerint scanf(const char *restrict format, ...);
22551ccae044b0ff658fe629dd67edd5ffe75d10e8Reid Spencerint fscanf(FILE *restrict, const char *restrict, ...);
2338135af219c48a8626d6af34a92e7e8bb957c81fChris Lattnerint printf(const char *restrict format, ...);
24c4d3b918165461bc6f5d395bca8d9d9d8a84413dAlkis Evlogimenosint fprintf(FILE *restrict, const char *restrict, ...);
25abf295fc6cfb438617e8b105022ce506f56674d8Chris Lattnerint getchar(void);
26abf295fc6cfb438617e8b105022ce506f56674d8Chris Lattner
27fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner// Note, on some platforms errno macro gets replaced with a function call.
28fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnerextern int errno;
29fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner
30fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnertypedef __typeof(sizeof(int)) size_t;
31aa14147cd6401e9c66dc9f81d1a47a90a5477159Chris Lattner
32aa14147cd6401e9c66dc9f81d1a47a90a5477159Chris Lattnersize_t strlen(const char *);
33aa14147cd6401e9c66dc9f81d1a47a90a5477159Chris Lattner
34aa14147cd6401e9c66dc9f81d1a47a90a5477159Chris Lattnerchar *strcpy(char *restrict, const char *restrict);
35fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner
36ebd7e6c54dce754a88d8f38df4ac2f388f35435eChris Lattnertypedef unsigned long __darwin_pthread_key_t;
37ebd7e6c54dce754a88d8f38df4ac2f388f35435eChris Lattnertypedef __darwin_pthread_key_t pthread_key_t;
38edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukmanint pthread_setspecific(pthread_key_t, const void *);
39fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner
40fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnertypedef long long __int64_t;
41fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnertypedef __int64_t __darwin_off_t;
42fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnertypedef __darwin_off_t fpos_t;
43aa14147cd6401e9c66dc9f81d1a47a90a5477159Chris Lattner
44fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnervoid setbuf(FILE * restrict, char * restrict);
45fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnerint setvbuf(FILE * restrict, char * restrict, int, size_t);
46bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris Lattner
47bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris LattnerFILE *fopen(const char * restrict, const char * restrict);
48bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris Lattnerint fclose(FILE *);
49fb449b9ea5a37fb411aee7d42f6a76119602288dChris LattnerFILE *funopen(const void *,
50fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner                 int (*)(void *, char *, int),
51fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner                 int (*)(void *, const char *, int),
52fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner                 fpos_t (*)(void *, fpos_t, int),
53fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner                 int (*)(void *));
54fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner
55fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnerint sqlite3_bind_text_my(int, const char*, int n, void(*)(void*));
56fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner
57fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnertypedef void (*freeCallback) (void*);
58fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnertypedef struct {
59fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner  int i;
60fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner  freeCallback fc;
61fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner} StWithCallback;
62fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner
63bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris Lattnerint dealocateMemWhenDoneByVal(void*, StWithCallback);
64bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris Lattnerint dealocateMemWhenDoneByRef(StWithCallback*, const void*);
65bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris Lattner
66bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris Lattnertypedef struct CGContext *CGContextRef;
67bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris LattnerCGContextRef CGBitmapContextCreate(void *data/*, size_t width, size_t height,
68bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris Lattner                                   size_t bitsPerComponent, size_t bytesPerRow,
69bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris Lattner                                   CGColorSpaceRef space,
70bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris Lattner                                   CGBitmapInfo bitmapInfo*/);
71bae74d9192f04d8185c7b4580565d56cc4ef53f2Chris Lattnervoid *CGBitmapContextGetData(CGContextRef context);
728c68b6a226ce46b35eafda972e04bf53128c2615Chris Lattner
73f542649f1b374b1bae845e4e4f6d1e82f90a9e31Chris Lattner// Include xpc.
74fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnertypedef struct _xpc_connection_s * xpc_connection_t;
75aa14147cd6401e9c66dc9f81d1a47a90a5477159Chris Lattnertypedef void (*xpc_finalizer_t)(void *value);
76fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnervoid xpc_connection_set_context(xpc_connection_t connection, void *context);
77aa14147cd6401e9c66dc9f81d1a47a90a5477159Chris Lattnervoid xpc_connection_set_finalizer_f(xpc_connection_t connection, xpc_finalizer_t finalizer);
78ead1b3f0bb70cd9c1ba7a853a79070cb47db9344Chris Lattnervoid xpc_connection_resume(xpc_connection_t connection);
79ead1b3f0bb70cd9c1ba7a853a79070cb47db9344Chris Lattner
80ead1b3f0bb70cd9c1ba7a853a79070cb47db9344Chris Lattner//The following are fake system header functions for generic testing.
818c68b6a226ce46b35eafda972e04bf53128c2615Chris Lattnervoid fakeSystemHeaderCallInt(int *);
828c68b6a226ce46b35eafda972e04bf53128c2615Chris Lattnervoid fakeSystemHeaderCallIntPtr(int **);
838c68b6a226ce46b35eafda972e04bf53128c2615Chris Lattner
84aa14147cd6401e9c66dc9f81d1a47a90a5477159Chris Lattnertypedef struct __SomeStruct {
85aa14147cd6401e9c66dc9f81d1a47a90a5477159Chris Lattner  char * p;
86fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattner} SomeStruct;
87fb449b9ea5a37fb411aee7d42f6a76119602288dChris Lattnervoid fakeSystemHeaderCall(SomeStruct *);
889fddc12c9b16a5526b0ee2e6f1da252f7974d7d0Chris Lattner