silx-kit / pyFAI

Fast Azimuthal Integration in Python
Other
104 stars 94 forks source link

Build fails with 2024.5.0 #2237

Closed blochl closed 1 month ago

blochl commented 2 months ago

My build fails with the following:

src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c: In function ‘__pyx_pf_5pyFAI_3ext_12sparse_utils_12ArrayBuilder___cinit__’:
src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c:45695:17: error: assignment to ‘struct __pyx_obj_5pyFAI_3ext_12sparse_utils_Vector *’ from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
45695 |     *__pyx_t_10 = __pyx_t_1;
      |                 ^
src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c: In function ‘__pyx_pf_5pyFAI_3ext_12sparse_utils_12ArrayBuilder_2__dealloc__’:
src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c:45783:16: error: assignment to ‘struct __pyx_obj_5pyFAI_3ext_12sparse_utils_Vector *’ from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
45783 |     *__pyx_t_5 = Py_None;
      |                ^

Distro: Arch Linux GCC: 14.1.1 Python: 3.12.4 Meson: 1.5.0 Ninja: 1.12.1 NumPy: 2.0.0 Last pyFAI successfully built: 2023.09

kif commented 2 months ago

Can you try with the main branch ? I suspect the version of gcc, because I tested everything else like python 3.12, numpy 2, ...

There are some bugs looks similar like: https://github.com/scikit-learn/scikit-learn/issues/28530 https://github.com/scikit-learn/scikit-learn/pull/28541 They suggest to use a very recent version of cython and if not possible, to pass this extra parameter to the compiler: -Wno-error=incompatible-pointer-types

blochl commented 2 months ago

Same error on the main branch (fac58156940ce06982c8c1ff188832128caa4366).

Cython version: 3.0.10

kif commented 2 months ago

Thanks for the report, won't be able to investigate before a month. Sorry.

blochl commented 2 months ago

Steps to reproduce on a clean container:

  1. Run the container:
    podman run --rm -it archlinux
  2. Do:
    # Install dependencies
    pacman -Syu git base-devel fftw opencl-driver cython meson-python \
        python-{numpy,scipy,matplotlib,h5py,pyopencl,pyqt5,build,installer,wheel}
    # Get the code:
    git clone https://github.com/silx-kit/pyFAI.git
    cd pyFAI
    # Fix incompatible settings:
    sed -i -e "/^requires =/,/^\]/{/^[[:space:]]*'ninja',[[:space:]]*$/d}" \
        -e "/^requires =/,/^\]/{/^[[:space:]]*'oldest-supported-numpy',[[:space:]]*$/d}" pyproject.toml
    # Build:
    python -m build --wheel --no-isolation
kif commented 1 month ago

Bug confirmed:

[27/92] Compiling Cython source /pyFAI/src/pyFAI/ext/sparse_builder.pyx
warning: /pyFAI/src/pyFAI/ext/sparse_builder.pxi:90:8: noexcept clause is ignored for function returning Python object
warning: /pyFAI/src/pyFAI/ext/sparse_builder.pxi:100:15: noexcept clause is ignored for function returning Python object
warning: /pyFAI/src/pyFAI/ext/sparse_builder.pxi:193:24: noexcept clause is ignored for function returning Python object
warning: /pyFAI/src/pyFAI/ext/sparse_builder.pxi:205:15: noexcept clause is ignored for function returning Python object
warning: /pyFAI/src/pyFAI/ext/sparse_builder.pxi:231:14: noexcept clause is ignored for function returning Python object
warning: /pyFAI/src/pyFAI/ext/sparse_builder.pxi:236:15: noexcept clause is ignored for function returning Python object
warning: /pyFAI/src/pyFAI/ext/sparse_builder.pxi:311:12: noexcept clause is ignored for function returning Python object
warning: /pyFAI/src/pyFAI/ext/sparse_builder.pxi:317:15: noexcept clause is ignored for function returning Python object
[41/92] Compiling C object src/pyFAI/ext/_convolution.cpython-312-x86_64-linux-gnu.so.p/meson-generated_src_pyFAI_ext__convolution.pyx.c.o
src/pyFAI/ext/_convolution.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/_convolution.pyx.c: In function ‘__pyx_pf_5pyFAI_3ext_12_convolution_horizontal_convolution’:
src/pyFAI/ext/_convolution.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/_convolution.pyx.c:18069:25: warning: ‘__pyx_v_acc’ may be used uninitialized [-Wmaybe-uninitialized]
18069 |                 #pragma omp parallel reduction(+:__pyx_v_acc) private(__pyx_t_1, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19)
      |                         ^~~
src/pyFAI/ext/_convolution.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/_convolution.pyx.c:17896:10: note: ‘__pyx_v_acc’ was declared here
17896 |   double __pyx_v_acc;
      |          ^~~~~~~~~~~
src/pyFAI/ext/_convolution.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/_convolution.pyx.c: In function ‘__pyx_pf_5pyFAI_3ext_12_convolution_2vertical_convolution’:
src/pyFAI/ext/_convolution.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/_convolution.pyx.c:18612:25: warning: ‘__pyx_v_acc’ may be used uninitialized [-Wmaybe-uninitialized]
18612 |                 #pragma omp parallel reduction(+:__pyx_v_acc) private(__pyx_t_1, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19)
      |                         ^~~
src/pyFAI/ext/_convolution.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/_convolution.pyx.c:18439:10: note: ‘__pyx_v_acc’ was declared here
18439 |   double __pyx_v_acc;
      |          ^~~~~~~~~~~
[80/92] Compiling C object src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/meson-generated_src_pyFAI_ext_sparse_utils.pyx.c.o
FAILED: src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/meson-generated_src_pyFAI_ext_sparse_utils.pyx.c.o 
cc -Isrc/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p -Isrc/pyFAI/ext -I../src/pyFAI/ext -I/usr/include/python3.12 -fvisibility=hidden -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -fPIC -MD -MQ src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/meson-generated_src_pyFAI_ext_sparse_utils.pyx.c.o -MF src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/meson-generated_src_pyFAI_ext_sparse_utils.pyx.c.o.d -o src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/meson-generated_src_pyFAI_ext_sparse_utils.pyx.c.o -c src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c
src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c: In function ‘__pyx_pf_5pyFAI_3ext_12sparse_utils_12ArrayBuilder___cinit__’:
src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c:45816:17: error: assignment to ‘struct __pyx_obj_5pyFAI_3ext_12sparse_utils_Vector *’ from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
45816 |     *__pyx_t_11 = __pyx_t_1;
      |                 ^
src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c: In function ‘__pyx_pf_5pyFAI_3ext_12sparse_utils_12ArrayBuilder_2__dealloc__’:
src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c:45904:16: error: assignment to ‘struct __pyx_obj_5pyFAI_3ext_12sparse_utils_Vector *’ from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
45904 |     *__pyx_t_5 = Py_None;
      |                ^
src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c: At top level:
src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c:61747:12: warning: ‘__pyx_memview_set_object’ defined but not used [-Wunused-function]
61747 | static int __pyx_memview_set_object(const char *itemp, PyObject *obj) {
      |            ^~~~~~~~~~~~~~~~~~~~~~~~
src/pyFAI/ext/sparse_utils.cpython-312-x86_64-linux-gnu.so.p/src/pyFAI/ext/sparse_utils.pyx.c:61742:20: warning: ‘__pyx_memview_get_object’ defined but not used [-Wunused-function]
61742 |   static PyObject *__pyx_memview_get_object(const char *itemp) {
      |                    ^~~~~~~~~~~~~~~~~~~~~~~~

I discussed with Cython developers and it is likely the warning about noexcept are not justified ... This narrows the regression to: cython 3.0.11 gcc 14.2.1

Debian is building pyFAI with gcc 14.1 and the same version of cython. Could this be to be a regression from gcc ?

kif commented 1 month ago

The bug is the same in debian experimental:

The Meson build system
Version: 1.5.1
Source dir: /pyFAI
Build dir: /pyFAI/build
Build type: native build
Project name: pyFAI
Project version: 2024.7.0a0
C compiler for the host machine: cc (gcc 14.2.0 "cc (Debian 14.2.0-3) 14.2.0")
C linker for the host machine: cc ld.bfd 2.43.1
C++ compiler for the host machine: c++ (gcc 14.2.0 "c++ (Debian 14.2.0-3) 14.2.0")
C++ linker for the host machine: c++ ld.bfd 2.43.1
Cython compiler for the host machine: cython (cython 3.0.11)
Host machine cpu family: x86_64
Host machine cpu: x86_64
Program python3 found: YES (/usr/bin/python3)
Library m found: YES
Dependency openmp found: YES 4.5 (cached)

@picca there is trouble ahead !

kif commented 1 month ago

Issue with GCC-14 (.2) is confirmed: export CC=gcc-13 provides a work around.

kif commented 1 month ago

The error is spotted on this line: https://github.com/silx-kit/pyFAI/blob/main/src/pyFAI/ext/sparse_utils.pyx#L197

kif commented 1 month ago

Since it is in some deprecated code, I guess the time has come to remove it.