Clang Project

clang_source_code/test/Analysis/Inputs/system-header-simulator.h
1// Like the compiler, the static analyzer treats some functions differently if
2// they come from a system header -- for example, it is assumed that system
3// functions do not arbitrarily free() their parameters, and that some bugs
4// found in system headers cannot be fixed by the user and should be
5// suppressed.
6#pragma clang system_header
7
8#ifdef __cplusplus
9#define restrict /*restrict*/
10#endif
11
12typedef struct _FILE FILE;
13extern FILE *stdin;
14extern FILE *stdout;
15extern FILE *stderr;
16// Include a variant of standard streams that occur in the pre-processed file.
17extern FILE *__stdinp;
18extern FILE *__stdoutp;
19extern FILE *__stderrp;
20
21int scanf(const char *restrict format, ...);
22int fscanf(FILE *restrict, const char *restrict, ...);
23int printf(const char *restrict format, ...);
24int fprintf(FILE *restrict, const char *restrict, ...);
25int getchar(void);
26
27// Note, on some platforms errno macro gets replaced with a function call.
28extern int errno;
29
30typedef __typeof(sizeof(int)) size_t;
31
32size_t strlen(const char *);
33
34char *strcpy(char *restrict, const char *restrict);
35char *strncpy(char *dst, const char *src, size_t n);
36void *memcpy(void *dst, const void *src, size_t n);
37
38typedef unsigned long __darwin_pthread_key_t;
39typedef __darwin_pthread_key_t pthread_key_t;
40int pthread_setspecific(pthread_key_t, const void *);
41
42typedef long long __int64_t;
43typedef __int64_t __darwin_off_t;
44typedef __darwin_off_t fpos_t;
45
46void setbuf(FILE * restrict, char * restrict);
47int setvbuf(FILE * restrict, char * restrict, int, size_t);
48
49FILE *fopen(const char * restrict, const char * restrict);
50int fclose(FILE *);
51FILE *funopen(const void *,
52                 int (*)(void *, char *, int),
53                 int (*)(void *, const char *, int),
54                 fpos_t (*)(void *, fpos_t, int),
55                 int (*)(void *));
56
57int sqlite3_bind_text_my(int, const char*, int n, void(*)(void*));
58
59typedef void (*freeCallback) (void*);
60typedef struct {
61  int i;
62  freeCallback fc;
63} StWithCallback;
64
65int dealocateMemWhenDoneByVal(void*, StWithCallback);
66int dealocateMemWhenDoneByRef(StWithCallback*, const void*);
67
68typedef struct CGContext *CGContextRef;
69CGContextRef CGBitmapContextCreate(void *data/*, size_t width, size_t height,
70                                   size_t bitsPerComponent, size_t bytesPerRow,
71                                   CGColorSpaceRef space,
72                                   CGBitmapInfo bitmapInfo*/);
73void *CGBitmapContextGetData(CGContextRef context);
74
75// Include xpc.
76typedef struct _xpc_connection_s * xpc_connection_t;
77typedef void (*xpc_finalizer_t)(void *value);
78void xpc_connection_set_context(xpc_connection_t connection, void *context);
79void xpc_connection_set_finalizer_f(xpc_connection_t connection, xpc_finalizer_t finalizer);
80void xpc_connection_resume(xpc_connection_t connection);
81
82//The following are fake system header functions for generic testing.
83void fakeSystemHeaderCallInt(int *);
84void fakeSystemHeaderCallIntPtr(int **);
85
86// Some data strauctures may hold onto the pointer and free it later.
87void fake_insque(void *, void *);
88typedef struct fake_rb_tree { void *opaque[8]; } fake_rb_tree_t;
89void fake_rb_tree_init(fake_rb_tree_t *, const void *);
90void *fake_rb_tree_insert_node(fake_rb_tree_t *, void *);
91
92typedef struct __SomeStruct {
93  char * p;
94} SomeStruct;
95void fakeSystemHeaderCall(SomeStruct *);
96
97typedef int pid_t;
98pid_t fork(void);
99pid_t vfork(void);
100int execl(const char *path, const char *arg, ...);
101
102void exit(int status) __attribute__ ((__noreturn__));
103void _exit(int status) __attribute__ ((__noreturn__));
104void _Exit(int status) __attribute__ ((__noreturn__));
105
106#define UINT32_MAX        4294967295U
107#define INT64_MIN        (-INT64_MAX-1)
108#define __DBL_MAX__ 1.7976931348623157e+308
109#define DBL_MAX __DBL_MAX__
110#ifndef NULL
111#define __DARWIN_NULL 0
112#define NULL __DARWIN_NULL
113#endif
114
115#define offsetof(t, d) __builtin_offsetof(t, d)