diff options
author | Sam Gross <colesbury@gmail.com> | 2023-12-08 16:31:32 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-08 16:31:32 (GMT) |
commit | 4d1eea59bd26d329417cc2252f1c91b52d0f4a28 (patch) | |
tree | 60e80c245569191864c8c133117d9c9987c3824b | |
parent | c744dbe9ac0e88e395a7464f20a4fd4184a0a222 (diff) | |
download | cpython-4d1eea59bd26d329417cc2252f1c91b52d0f4a28.zip cpython-4d1eea59bd26d329417cc2252f1c91b52d0f4a28.tar.gz cpython-4d1eea59bd26d329417cc2252f1c91b52d0f4a28.tar.bz2 |
gh-112779: Check 1-byte atomics in configure (gh-112819)
-rwxr-xr-x | configure | 18 | ||||
-rw-r--r-- | configure.ac | 18 |
2 files changed, 28 insertions, 8 deletions
@@ -27885,6 +27885,9 @@ printf "%s\n" "$TEST_MODULES" >&6; } # libatomic __atomic_fetch_or_8(), or not, depending on the C compiler and the # compiler flags. # +# gh-112779: On RISC-V, GCC 12 and earlier require libatomic support for 1-byte +# and 2-byte operations, but not for 8-byte operations. +# # Avoid #include <Python.h> or #include <pyport.h>. The <Python.h> header # requires <pyconfig.h> header which is only written below by AC_OUTPUT below. # If the check is done after AC_OUTPUT, modifying LIBS has no effect @@ -27924,12 +27927,19 @@ typedef intptr_t Py_ssize_t; int main() { - uint64_t byte; - _Py_atomic_store_uint64(&byte, 2); - if (_Py_atomic_or_uint64(&byte, 8) != 2) { + uint64_t value; + _Py_atomic_store_uint64(&value, 2); + if (_Py_atomic_or_uint64(&value, 8) != 2) { + return 1; // error + } + if (_Py_atomic_load_uint64(&value) != 10) { + return 1; // error + } + uint8_t byte = 0xb8; + if (_Py_atomic_or_uint8(&byte, 0x2d) != 0xb8) { return 1; // error } - if (_Py_atomic_load_uint64(&byte) != 10) { + if (_Py_atomic_load_uint8(&byte) != 0xbd) { return 1; // error } return 0; // all good diff --git a/configure.ac b/configure.ac index 1512e6d..c07d7ce 100644 --- a/configure.ac +++ b/configure.ac @@ -7023,6 +7023,9 @@ AC_SUBST([TEST_MODULES]) # libatomic __atomic_fetch_or_8(), or not, depending on the C compiler and the # compiler flags. # +# gh-112779: On RISC-V, GCC 12 and earlier require libatomic support for 1-byte +# and 2-byte operations, but not for 8-byte operations. +# # Avoid #include <Python.h> or #include <pyport.h>. The <Python.h> header # requires <pyconfig.h> header which is only written below by AC_OUTPUT below. # If the check is done after AC_OUTPUT, modifying LIBS has no effect @@ -7052,12 +7055,19 @@ typedef intptr_t Py_ssize_t; int main() { - uint64_t byte; - _Py_atomic_store_uint64(&byte, 2); - if (_Py_atomic_or_uint64(&byte, 8) != 2) { + uint64_t value; + _Py_atomic_store_uint64(&value, 2); + if (_Py_atomic_or_uint64(&value, 8) != 2) { + return 1; // error + } + if (_Py_atomic_load_uint64(&value) != 10) { + return 1; // error + } + uint8_t byte = 0xb8; + if (_Py_atomic_or_uint8(&byte, 0x2d) != 0xb8) { return 1; // error } - if (_Py_atomic_load_uint64(&byte) != 10) { + if (_Py_atomic_load_uint8(&byte) != 0xbd) { return 1; // error } return 0; // all good |