18c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// Like the compiler, the static analyzer treats some functions differently if
28c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// they come from a system header -- for example, it is assumed that system
38c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// functions do not arbitrarily free() their parameters, and that some bugs
48c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// found in system headers cannot be fixed by the user and should be
58c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// suppressed.
635d4a09efbdc313b02f05612e6501a7ec7d3a37dAnna Zaks#pragma clang system_header
735d4a09efbdc313b02f05612e6501a7ec7d3a37dAnna Zaks
835d4a09efbdc313b02f05612e6501a7ec7d3a37dAnna Zakstypedef struct __sFILE {
935d4a09efbdc313b02f05612e6501a7ec7d3a37dAnna Zaks  unsigned char *_p;
1035d4a09efbdc313b02f05612e6501a7ec7d3a37dAnna Zaks} FILE;
1135d4a09efbdc313b02f05612e6501a7ec7d3a37dAnna ZaksFILE *fopen(const char * restrict, const char * restrict) __asm("_" "fopen" );
1235d4a09efbdc313b02f05612e6501a7ec7d3a37dAnna Zaksint fputc(int, FILE *);
1335d4a09efbdc313b02f05612e6501a7ec7d3a37dAnna Zaksint fputs(const char * restrict, FILE * restrict) __asm("_" "fputs" );
1435d4a09efbdc313b02f05612e6501a7ec7d3a37dAnna Zaksint fclose(FILE *);
1535d4a09efbdc313b02f05612e6501a7ec7d3a37dAnna Zaksvoid exit(int);
16233e26acc0ff2a1098f4c813f69286fce840a422Anna Zaks
17233e26acc0ff2a1098f4c813f69286fce840a422Anna Zaks// The following is a fake system header function
18233e26acc0ff2a1098f4c813f69286fce840a422Anna Zakstypedef struct __FileStruct {
19233e26acc0ff2a1098f4c813f69286fce840a422Anna Zaks  FILE * p;
20233e26acc0ff2a1098f4c813f69286fce840a422Anna Zaks} FileStruct;
21233e26acc0ff2a1098f4c813f69286fce840a422Anna Zaksvoid fakeSystemHeaderCall(FileStruct *);
22