]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-37415: Fix stdatomic.h header check for ICC compiler (GH-16717)
authorMiss Skeleton (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 22 Oct 2019 20:17:21 +0000 (13:17 -0700)
committerGitHub <noreply@github.com>
Tue, 22 Oct 2019 20:17:21 +0000 (13:17 -0700)
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 028f7349a0f6eaea0fec31becb587fcdf6e3cb28)

Co-authored-by: Victor Stinner <vstinner@python.org>
Misc/NEWS.d/next/Build/2019-10-11-15-32-58.bpo-37415.D9RXrq.rst [new file with mode: 0644]
configure
configure.ac
pyconfig.h.in

diff --git a/Misc/NEWS.d/next/Build/2019-10-11-15-32-58.bpo-37415.D9RXrq.rst b/Misc/NEWS.d/next/Build/2019-10-11-15-32-58.bpo-37415.D9RXrq.rst
new file mode 100644 (file)
index 0000000..98f4a3b
--- /dev/null
@@ -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.
index 0f466db4aa0a8249a1d0addda2ace396ae33e4df..b769d59629637b0599df0cc61ef43905a2b665ed 100755 (executable)
--- a/configure
+++ b/configure
@@ -16849,9 +16849,12 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 
 
     #include <stdatomic.h>
-    atomic_int value = ATOMIC_VAR_INIT(1);
+    atomic_int int_var;
+    atomic_uintptr_t uintptr_var;
     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;
     }
 
index 1ef0df70e686ae61165e231401785fab9691bd99..49acff31363b0c8a83f100c7dec546b34613a139 100644 (file)
@@ -5492,9 +5492,12 @@ AC_LINK_IFELSE(
 [
   AC_LANG_SOURCE([[
     #include <stdatomic.h>
-    atomic_int value = ATOMIC_VAR_INIT(1);
+    atomic_int int_var;
+    atomic_uintptr_t uintptr_var;
     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;
     }
   ]])
@@ -5504,7 +5507,7 @@ AC_MSG_RESULT($have_stdatomic_h)
 
 if test "$have_stdatomic_h" = yes; then
     AC_DEFINE(HAVE_STD_ATOMIC, 1,
-              [Has stdatomic.h with atomic_int])
+              [Has stdatomic.h with atomic_int and atomic_uintptr_t])
 fi
 
 # Check for GCC >= 4.7 __atomic builtins
index d36fc933f48cc206c64b0bd0b98485ef4ccdbdd9..f4816fdcdfc4be9878aa63488b8714c4100ea5ae 100644 (file)
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
-/* Has stdatomic.h with atomic_int */
+/* Has stdatomic.h with atomic_int and atomic_uintptr_t */
 #undef HAVE_STD_ATOMIC
 
 /* Define to 1 if you have the `strdup' function. */