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