diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h index 193a28259f0c..2c70d5159417 100644 --- a/Zend/zend_portability.h +++ b/Zend/zend_portability.h @@ -114,6 +114,9 @@ using std::memory_order_acquire; #if defined(ZEND_WIN32) && !defined(__clang__) # define ZEND_ASSUME(c) __assume(c) +#elif defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 14 +/* GCC emits a warning when __attribute__ appears directly after a label, so we need a do-while loop. */ +# define ZEND_ASSUME(c) do { __attribute__((assume(c))); } while (0) #elif defined(__clang__) && __has_builtin(__builtin_assume) # pragma clang diagnostic ignored "-Wassume" # define ZEND_ASSUME(c) __builtin_assume(c)