Fix __builtin___clear_cache detection on GCC < 10. * For real this time. * Fixes #5617.
diff --git a/iree/hal/local/elf/platform/generic.c b/iree/hal/local/elf/platform/generic.c index c1df242..7bf4d3c 100644 --- a/iree/hal/local/elf/platform/generic.c +++ b/iree/hal/local/elf/platform/generic.c
@@ -94,10 +94,12 @@ // IREE_ELF_CLEAR_CACHE can be defined externally to override this default // behavior. #if !defined(IREE_ELF_CLEAR_CACHE) -// Explicitly enable for GCC, which has had this since 4.x but does not -// seem to advertise it via __has_builtin. -#if defined __has_builtin -#if __has_builtin(__builtin___clear_cache) || defined(__GNUC__) +// __has_builtin was added in GCC 10, so just hard-code the availability +// for < 10, special cased here so it can be dropped once no longer needed. +#if defined __GNUC__ && __GNUC__ < 10 +#define IREE_ELF_CLEAR_CACHE(start, end) __builtin___clear_cache(start, end) +#elif defined __has_builtin +#if __has_builtin(__builtin___clear_cache) #define IREE_ELF_CLEAR_CACHE(start, end) __builtin___clear_cache(start, end) #endif // __builtin___clear_cache #endif // __has_builtin
diff --git a/iree/hal/local/elf/platform/linux.c b/iree/hal/local/elf/platform/linux.c index 394e7a1..3ad721b 100644 --- a/iree/hal/local/elf/platform/linux.c +++ b/iree/hal/local/elf/platform/linux.c
@@ -144,10 +144,12 @@ // IREE_ELF_CLEAR_CACHE can be defined externally to override this default // behavior. #if !defined(IREE_ELF_CLEAR_CACHE) -// Explicitly enable for GCC, which has had this since 4.x but does not -// seem to advertise it via __has_builtin. -#if defined __has_builtin -#if __has_builtin(__builtin___clear_cache) || defined(__GNUC__) +// __has_builtin was added in GCC 10, so just hard-code the availability +// for < 10, special cased here so it can be dropped once no longer needed. +#if defined __GNUC__ && __GNUC__ < 10 +#define IREE_ELF_CLEAR_CACHE(start, end) __builtin___clear_cache(start, end) +#elif defined __has_builtin +#if __has_builtin(__builtin___clear_cache) #define IREE_ELF_CLEAR_CACHE(start, end) __builtin___clear_cache(start, end) #endif // __builtin___clear_cache #endif // __has_builtin