include "config/public_api.td" include "spec/stdc.td" include "spec/posix.td" include "spec/gpu_ext.td" include "spec/gnu_ext.td" include "spec/llvm_libc_ext.td" def AssertMacro : MacroDef<"assert"> { let Defn = [{ #undef assert #ifdef NDEBUG #define assert(e) (void)0 #else #define assert(e) \ ((e) ? (void)0 : __assert_fail(#e, __FILE__, __LINE__, __PRETTY_FUNCTION__)) #endif }]; } def StaticAssertMacro : MacroDef<"static_assert"> { let Defn = [{ #ifndef __cplusplus #undef static_assert #define static_assert _Static_assert #endif }]; } def AssertAPI : PublicAPI<"assert.h"> { let Macros = [ AssertMacro, StaticAssertMacro, ]; } def StringAPI : PublicAPI<"string.h"> { let Types = ["size_t"]; } def StdlibAPI : PublicAPI<"stdlib.h"> { let Types = [ "div_t", "ldiv_t", "lldiv_t", "size_t", "__bsearchcompare_t", "__qsortcompare_t", "__qsortrcompare_t", "__atexithandler_t", ]; } def FenvAPI: PublicAPI<"fenv.h"> { let Types = ["fenv_t"]; } def StdIOAPI : PublicAPI<"stdio.h"> { let Macros = [ SimpleMacroDef<"_IOFBF", "0">, SimpleMacroDef<"_IOLBF", "1">, SimpleMacroDef<"_IONBF", "2">, SimpleMacroDef<"EOF", "-1">, ]; let Types = ["size_t", "FILE"]; } def IntTypesAPI : PublicAPI<"inttypes.h"> { let Types = ["imaxdiv_t"]; } def TimeAPI : PublicAPI<"time.h"> { let Types = [ "clock_t", "time_t", "struct timespec", ]; }