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:
Miss Skeleton (bot) 2019-10-22 13:17:21 -07:00 committed by GitHub
parent d4dc4a58f5
commit b102e4f052
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 6 deletions

View File

@ -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.

7
configure vendored
View File

@ -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;
} }

View File

@ -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

View File

@ -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. */