[Python-checkins] cpython: Issue #23644: Fix issues with C++ when compiling Python extensions

victor.stinner python-checkins at python.org
Tue Mar 17 22:54:46 CET 2015


https://hg.python.org/cpython/rev/cb05b6d7aacd
changeset:   95023:cb05b6d7aacd
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Tue Mar 17 22:53:27 2015 +0100
summary:
  Issue #23644: Fix issues with C++ when compiling Python extensions

Disable completly pyatomic.h on C++, because <stdatomic.h> is not compatible with C++.

<pyatomic.h> is only needed by the optimized PyThreadState_GET() macro in
pystate.h. Instead, declare PyThreadState_GET() as an alias to
PyThreadState_Get(), as done for limited API.

files:
  Include/pyatomic.h |  12 +++---------
  Include/pystate.h  |  10 +++++++---
  2 files changed, 10 insertions(+), 12 deletions(-)


diff --git a/Include/pyatomic.h b/Include/pyatomic.h
--- a/Include/pyatomic.h
+++ b/Include/pyatomic.h
@@ -1,4 +1,6 @@
-#ifndef Py_LIMITED_API
+/* Issue #23644: <stdatomic.h> is incompatible with C++, see:
+   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60932 */
+#if !defined(Py_LIMITED_API) && !defined(__cplusplus)
 #ifndef Py_ATOMIC_H
 #define Py_ATOMIC_H
 
@@ -6,10 +8,6 @@
 
 #include "pyconfig.h"
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 #if defined(HAVE_STD_ATOMIC)
 #include <stdatomic.h>
 #endif
@@ -250,9 +248,5 @@
 #define _Py_atomic_load_relaxed(ATOMIC_VAL) \
     _Py_atomic_load_explicit(ATOMIC_VAL, _Py_memory_order_relaxed)
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif  /* Py_ATOMIC_H */
 #endif  /* Py_LIMITED_API */
diff --git a/Include/pystate.h b/Include/pystate.h
--- a/Include/pystate.h
+++ b/Include/pystate.h
@@ -174,12 +174,16 @@
 /* Variable and macro for in-line access to current thread state */
 
 /* Assuming the current thread holds the GIL, this is the
-   PyThreadState for the current thread. */
-#ifndef Py_LIMITED_API
+   PyThreadState for the current thread.
+
+   Issue #23644: pyatomic.h is incompatible with C++ (yet). Disable
+   PyThreadState_GET() optimization: declare it as an alias to
+   PyThreadState_Get(), as done for limited API. */
+#if !defined(Py_LIMITED_API) && !defined(__cplusplus)
 PyAPI_DATA(_Py_atomic_address) _PyThreadState_Current;
 #endif
 
-#if defined(Py_DEBUG) || defined(Py_LIMITED_API)
+#if defined(Py_DEBUG) || defined(Py_LIMITED_API) || defined(__cplusplus)
 #define PyThreadState_GET() PyThreadState_Get()
 #else
 #define PyThreadState_GET() \

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list