Skip to content

Build failure with 3.14.0b3 free-threaded #450

@clin1234

Description

@clin1234
(venv) cc@pretty:/tmp/ns-emu-tools$ pip install greenlet
Collecting greenlet
  Using cached greenlet-3.2.3.tar.gz (185 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: greenlet
  Building wheel for greenlet (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  × Building wheel for greenlet (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [148 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/__init__.py -> build/lib.linux-x86_64-cpython-314t/greenlet
      creating build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_weakref.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_version.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_tracing.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_throw.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_stack_saved.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_leaks.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_greenlet_trash.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_greenlet.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_generator_nested.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_generator.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_gc.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_extension_interface.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_cpp.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/test_contextvars.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/leakcheck.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/fail_switch_two_greenlets.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/fail_switch_three_greenlets2.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/fail_switch_three_greenlets.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/fail_slp_switch.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/fail_initialstub_already_started.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/fail_cpp_exception.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/fail_clearing_run_switches.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/__init__.py -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      creating build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/__init__.py -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      running egg_info
      writing src/greenlet.egg-info/PKG-INFO
      writing dependency_links to src/greenlet.egg-info/dependency_links.txt
      writing requirements to src/greenlet.egg-info/requires.txt
      writing top-level names to src/greenlet.egg-info/top_level.txt
      reading manifest file 'src/greenlet.egg-info/SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      warning: no previously-included files found matching 'benchmarks/*.json'
      no previously-included directories found matching 'docs/_build'
      warning: no files found matching '*.py' under directory 'appveyor'
      warning: no previously-included files matching '*.pyc' found anywhere in distribution
      warning: no previously-included files matching '*.pyd' found anywhere in distribution
      warning: no previously-included files matching '*.so' found anywhere in distribution
      warning: no previously-included files matching '.coverage' found anywhere in distribution
      adding license file 'LICENSE'
      adding license file 'LICENSE.PSF'
      writing manifest file 'src/greenlet.egg-info/SOURCES.txt'
      copying src/greenlet/CObjects.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/PyGreenlet.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/PyGreenlet.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/PyGreenletUnswitchable.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/PyModule.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TBrokenGreenlet.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TExceptionState.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TGreenlet.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TGreenlet.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TGreenletGlobals.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TMainGreenlet.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TPythonState.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TStackState.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TThreadState.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TThreadStateCreator.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TThreadStateDestroy.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/TUserGreenlet.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/greenlet.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/greenlet.h -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/greenlet_allocator.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/greenlet_compiler_compat.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/greenlet_cpython_compat.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/greenlet_exceptions.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/greenlet_internal.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/greenlet_msvc_compat.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/greenlet_refs.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/greenlet_slp_switch.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/greenlet_thread_support.hpp -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/slp_platformselect.h -> build/lib.linux-x86_64-cpython-314t/greenlet
      copying src/greenlet/tests/_test_extension.c -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/tests/_test_extension_cpp.cpp -> build/lib.linux-x86_64-cpython-314t/greenlet/tests
      copying src/greenlet/platform/setup_switch_x64_masm.cmd -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_aarch64_gcc.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_alpha_unix.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_amd64_unix.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_arm32_gcc.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_arm32_ios.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_arm64_masm.asm -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_arm64_masm.obj -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_arm64_msvc.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_csky_gcc.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_loongarch64_linux.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_m68k_gcc.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_mips_unix.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_ppc64_aix.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_ppc64_linux.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_ppc_aix.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_ppc_linux.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_ppc_macosx.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_ppc_unix.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_riscv_unix.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_s390_unix.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_sh_gcc.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_sparc_sun_gcc.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_x32_unix.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_x64_masm.asm -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_x64_masm.obj -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_x64_msvc.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_x86_msvc.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      copying src/greenlet/platform/switch_x86_unix.h -> build/lib.linux-x86_64-cpython-314t/greenlet/platform
      running build_ext
      building 'greenlet._greenlet' extension
      creating build/temp.linux-x86_64-cpython-314t/src/greenlet
      g++ -fno-strict-overflow -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -fexceptions -fcf-protection -fexceptions -fcf-protection -fexceptions -fcf-protection -O3 -fPIC -I/home/cc/venv/include -I/usr/include/python3.14t -c src/greenlet/greenlet.cpp -o build/temp.linux-x86_64-cpython-314t/src/greenlet/greenlet.o
      In file included from /usr/include/python3.14t/internal/pycore_pythread.h:11,
                       from /usr/include/python3.14t/internal/pycore_condvar.h:8,
                       from /usr/include/python3.14t/internal/pycore_gil.h:11,
                       from /usr/include/python3.14t/internal/pycore_interp_structs.h:261,
                       from /usr/include/python3.14t/internal/pycore_gc.h:11,
                       from /usr/include/python3.14t/internal/pycore_object.h:12,
                       from /usr/include/python3.14t/internal/pycore_stackref.h:11,
                       from /usr/include/python3.14t/internal/pycore_interpframe.h:10,
                       from src/greenlet/TGreenlet.hpp:35,
                       from src/greenlet/greenlet_internal.hpp:18,
                       from src/greenlet/greenlet.cpp:19:
      /usr/include/python3.14t/dynamic_annotations.h:472:3: error: template with C linkage
        472 |   template <class T>
            |   ^~~~~~~~
      /usr/include/python3.14t/internal/pycore_pythread.h:4:1: note: ‘extern "C"’ linkage started here
          4 | extern "C" {
            | ^~~~~~~~~~
      /usr/include/python3.14t/internal/pycore_object.h: In function ‘PyObject* _Py_XGetRef(PyObject**)’:
      /usr/include/python3.14t/internal/pycore_object.h:617:46: error: invalid conversion from ‘void*’ to ‘PyObject*’ {aka ‘_object*’} [-fpermissive]
        617 |         PyObject *value = _Py_atomic_load_ptr(ptr);
            |                           ~~~~~~~~~~~~~~~~~~~^~~~~
            |                                              |
            |                                              void*
      /usr/include/python3.14t/internal/pycore_object.h: In function ‘PyObject* _Py_TryXGetRef(PyObject**)’:
      /usr/include/python3.14t/internal/pycore_object.h:632:42: error: invalid conversion from ‘void*’ to ‘PyObject*’ {aka ‘_object*’} [-fpermissive]
        632 |     PyObject *value = _Py_atomic_load_ptr(ptr);
            |                       ~~~~~~~~~~~~~~~~~~~^~~~~
            |                                          |
            |                                          void*
      /usr/include/python3.14t/internal/pycore_stackref.h: In function ‘int _Py_TryXGetStackRef(PyObject**, _PyStackRef*)’:
      /usr/include/python3.14t/internal/pycore_stackref.h:774:47: error: invalid conversion from ‘void*’ to ‘PyObject*’ {aka ‘_object*’} [-fpermissive]
        774 |     PyObject *op = _Py_atomic_load_ptr_relaxed(src);
            |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
            |                                               |
            |                                               void*
      error: command '/opt/gcc-latest/bin/g++' failed with exit code 1
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for greenlet
Failed to build greenlet
ERROR: Failed to build installable wheels for some pyproject.toml based projects (greenlet)

I have a PR python/cpython#135892 that fixes the invalid conversion errors. As for linkage, 🤷

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions