From 0e934c7df1aa82e72dfb3654e8f0f3a42bad9f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Mon, 2 Dec 2024 09:42:39 +0100 Subject: [PATCH] zig.h: Use C99/C11 headers if available regardless of language standard. If present, these headers are usable even when compiling for older C language versions. Most notably, this enables zig.h atomics to work with slimcc and TinyCC in C99 mode (and earlier). --- lib/zig.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/zig.h b/lib/zig.h index 06d44fe819..f1fc5ebfdd 100644 --- a/lib/zig.h +++ b/lib/zig.h @@ -68,9 +68,16 @@ #define zig_x86 #endif +#if defined(__has_include) +#define zig_has_include(include) __has_include(include) +#else +#define zig_has_include(include) 0 +#endif + #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ #define __STDC_WANT_IEC_60559_TYPES_EXT__ #endif + #include #include #include @@ -82,7 +89,7 @@ #if __STDC_VERSION__ >= 202311L /* bool, true, and false are provided by the language. */ -#elif __STDC_VERSION__ >= 199901L +#elif __STDC_VERSION__ >= 199901L || zig_has_include() #include #else typedef char bool; @@ -428,7 +435,7 @@ zig_extern void *memset (void *, int, size_t); /* ===================== 8/16/32/64-bit Integer Support ===================== */ -#if __STDC_VERSION__ >= 199901L || defined(zig_msvc) +#if __STDC_VERSION__ >= 199901L || defined(zig_msvc) || zig_has_include() #include #else @@ -3655,7 +3662,7 @@ zig_float_builtins(64) res = zig_atomicrmw_expected; \ } while (0) -#if __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__) +#if (__STDC_VERSION__ >= 201112L || (zig_has_include() && !defined(zig_msvc))) && !defined(__STDC_NO_ATOMICS__) #include typedef enum memory_order zig_memory_order; #define zig_memory_order_relaxed memory_order_relaxed