commit:     7162eddddc424024d808f45c64c50b90126ec8e1
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Mon May  5 04:25:44 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon May  5 05:05:42 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7162eddd

dev-python/cython: Backport a fix for rdma-core hang

Closes: https://bugs.gentoo.org/955375
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 dev-python/cython/cython-3.1.0_rc1-r1.ebuild       | 86 ++++++++++++++++++++++
 .../files/cython-3.1.0_rc1-rdma-core-hang.patch    | 54 ++++++++++++++
 2 files changed, 140 insertions(+)

diff --git a/dev-python/cython/cython-3.1.0_rc1-r1.ebuild 
b/dev-python/cython/cython-3.1.0_rc1-r1.ebuild
new file mode 100644
index 000000000000..561a1b8a077f
--- /dev/null
+++ b/dev-python/cython/cython-3.1.0_rc1-r1.ebuild
@@ -0,0 +1,86 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_TESTED=( python3_{10..12} )
+PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" pypy3 pypy3_11 python3_13{,t} )
+PYTHON_REQ_USE="threads(+)"
+
+inherit distutils-r1 multiprocessing pypi toolchain-funcs
+
+DESCRIPTION="A Python to C compiler"
+HOMEPAGE="
+       https://cython.org/
+       https://github.com/cython/cython/
+       https://pypi.org/project/Cython/
+"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 
~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos 
~x64-macos ~x64-solaris"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+       ${RDEPEND}
+       test? (
+               $(python_gen_cond_dep '
+                       <dev-python/numpy-2[${PYTHON_USEDEP}]
+               ' "${PYTHON_TESTED[@]}")
+       )
+"
+
+PATCHES=(
+       "${FILESDIR}/${PN}-0.29.22-spawn-multiprocessing.patch"
+       "${FILESDIR}/${PN}-0.29.23-pythran-parallel-install.patch"
+       # 
https://github.com/cython/cython/commit/a0794ffb47c9f44be94b3cd8fe6c639766cbda26
+       "${FILESDIR}/${P}-rdma-core-hang.patch"
+)
+
+distutils_enable_sphinx docs \
+       dev-python/jinja2 \
+       dev-python/sphinx-issues \
+       dev-python/sphinx-tabs
+
+python_prepare_all() {
+       # Needs dev-python/pip and doesn't like 'externally-managed' (bug 
#927995)
+       rm tests/run/coverage_cmd_src_pkg_layout.srctree || die
+
+       distutils-r1_python_prepare_all
+}
+
+python_compile() {
+       # Python gets confused when it is in sys.path before build.
+       local -x PYTHONPATH=
+
+       distutils-r1_python_compile
+}
+
+python_test() {
+       if ! has "${EPYTHON/./_}" "${PYTHON_TESTED[@]}"; then
+               einfo "Skipping tests on ${EPYTHON} (xfail)"
+               return
+       fi
+
+       # Needed to avoid confusing cache tests
+       unset CYTHON_FORCE_REGEN
+
+       tc-export CC
+       # https://github.com/cython/cython/issues/1911
+       local -x CFLAGS="${CFLAGS} -fno-strict-overflow"
+       "${PYTHON}" runtests.py \
+               -vv \
+               -j "$(makeopts_jobs)" \
+               --work-dir "${BUILD_DIR}"/tests \
+               --no-examples \
+               --no-code-style \
+               || die "Tests fail with ${EPYTHON}"
+}
+
+python_install_all() {
+       local DOCS=( CHANGES.rst README.rst ToDo.txt USAGE.txt )
+       distutils-r1_python_install_all
+}

diff --git a/dev-python/cython/files/cython-3.1.0_rc1-rdma-core-hang.patch 
b/dev-python/cython/files/cython-3.1.0_rc1-rdma-core-hang.patch
new file mode 100644
index 000000000000..3561870b0453
--- /dev/null
+++ b/dev-python/cython/files/cython-3.1.0_rc1-rdma-core-hang.patch
@@ -0,0 +1,54 @@
+From a0794ffb47c9f44be94b3cd8fe6c639766cbda26 Mon Sep 17 00:00:00 2001
+From: Stefan Behnel <[email protected]>
+Date: Sun, 4 May 2025 21:48:27 +0200
+Subject: [PATCH] Prevent infinite loop in type inference when a variable is
+ named like the type of its value (e.g. list += []).
+
+Closes https://github.com/cython/cython/issues/6835
+---
+ Cython/Compiler/ExprNodes.py |  2 +-
+ tests/run/type_inference.pyx | 24 ++++++++++++++++++++++++
+ 2 files changed, 25 insertions(+), 1 deletion(-)
+
+diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py
+index a0413ab8d62..b02154a0b30 100644
+--- a/Cython/Compiler/ExprNodes.py
++++ b/Cython/Compiler/ExprNodes.py
+@@ -2042,7 +2042,7 @@ def infer_type(self, env):
+                 return self.inferred_type
+             return py_object_type
+         elif (self.entry.type.is_extension_type or 
self.entry.type.is_builtin_type) and \
+-                self.name == self.entry.type.name:
++                not self.is_target and self.name == self.entry.type.name:
+             # Unfortunately the type attribute of type objects
+             # is used for the pointer to the type they represent.
+             return type_type
+diff --git a/tests/run/type_inference.pyx b/tests/run/type_inference.pyx
+index b746d05d9f3..226455dae0d 100644
+--- a/tests/run/type_inference.pyx
++++ b/tests/run/type_inference.pyx
+@@ -883,3 +886,24 @@ def test_builtin_max():
+             a = max(self.a, self.a)
+             assert typeof(a) == "Python object", typeof(a)
+     C().get_max()
++
++
++def variable_with_name_of_type():
++    """
++    >>> variable_with_name_of_type()
++    ([], 'abc')
++    """
++    # Names like 'list.append' refer to the type and must be inferred as such,
++    # but a simple variable called 'list' is not the same and used to break 
type inference.
++    # See https://github.com/cython/cython/issues/6835
++    rest_list = []
++    list = []  # note: same name as type of value
++    list += rest_list
++    assert typeof(list) == 'list object', typeof(list)
++
++    rest_str = "abc"
++    str = ""
++    str += rest_str
++    assert typeof(str) == 'str object', typeof(str)
++
++    return list, str

Reply via email to