bpo-37415: Fix stdatomic.h header check for ICC compiler (GH-16717)
Fix stdatomic.h header check for ICC compiler: the ICC implementation
lacks atomic_uintptr_t type which is needed by Python.
Test:
* atomic_int and atomic_uintptr_t types
* atomic_load_explicit() and atomic_store_explicit()
* memory_order_relaxed and memory_order_seq_cst constants
But don't test ATOMIC_VAR_INIT(): it's not used in Python.
(cherry picked from commit 028f7349a0
)
Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
parent
d4dc4a58f5
commit
b102e4f052
|
@ -0,0 +1,2 @@
|
||||||
|
Fix stdatomic.h header check for ICC compiler: the ICC implementation lacks
|
||||||
|
atomic_uintptr_t type which is needed by Python.
|
|
@ -16849,9 +16849,12 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
|
||||||
|
|
||||||
#include <stdatomic.h>
|
#include <stdatomic.h>
|
||||||
atomic_int value = ATOMIC_VAR_INIT(1);
|
atomic_int int_var;
|
||||||
|
atomic_uintptr_t uintptr_var;
|
||||||
int main() {
|
int main() {
|
||||||
int loaded_value = atomic_load(&value);
|
atomic_store_explicit(&int_var, 5, memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&uintptr_var, 0, memory_order_relaxed);
|
||||||
|
int loaded_value = atomic_load_explicit(&int_var, memory_order_seq_cst);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5492,9 +5492,12 @@ AC_LINK_IFELSE(
|
||||||
[
|
[
|
||||||
AC_LANG_SOURCE([[
|
AC_LANG_SOURCE([[
|
||||||
#include <stdatomic.h>
|
#include <stdatomic.h>
|
||||||
atomic_int value = ATOMIC_VAR_INIT(1);
|
atomic_int int_var;
|
||||||
|
atomic_uintptr_t uintptr_var;
|
||||||
int main() {
|
int main() {
|
||||||
int loaded_value = atomic_load(&value);
|
atomic_store_explicit(&int_var, 5, memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&uintptr_var, 0, memory_order_relaxed);
|
||||||
|
int loaded_value = atomic_load_explicit(&int_var, memory_order_seq_cst);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
]])
|
]])
|
||||||
|
@ -5504,7 +5507,7 @@ AC_MSG_RESULT($have_stdatomic_h)
|
||||||
|
|
||||||
if test "$have_stdatomic_h" = yes; then
|
if test "$have_stdatomic_h" = yes; then
|
||||||
AC_DEFINE(HAVE_STD_ATOMIC, 1,
|
AC_DEFINE(HAVE_STD_ATOMIC, 1,
|
||||||
[Has stdatomic.h with atomic_int])
|
[Has stdatomic.h with atomic_int and atomic_uintptr_t])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check for GCC >= 4.7 __atomic builtins
|
# Check for GCC >= 4.7 __atomic builtins
|
||||||
|
|
|
@ -963,7 +963,7 @@
|
||||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
#undef HAVE_STDLIB_H
|
#undef HAVE_STDLIB_H
|
||||||
|
|
||||||
/* Has stdatomic.h with atomic_int */
|
/* Has stdatomic.h with atomic_int and atomic_uintptr_t */
|
||||||
#undef HAVE_STD_ATOMIC
|
#undef HAVE_STD_ATOMIC
|
||||||
|
|
||||||
/* Define to 1 if you have the `strdup' function. */
|
/* Define to 1 if you have the `strdup' function. */
|
||||||
|
|
Loading…
Reference in New Issue