Skip to content

Unguarded use of Py_END_CRITICAL_SECTION leads to build failures on Py<3.13 #27516

Closed
@h-vetinari

Description

@h-vetinari

Not sure how this works in numpy's CI, but in conda-forge, 2.1.2 is broken on everything but 3.13, due to (AFAICT) unguarded use of a function which doesn't exist in older python versions. Looking at the history of the respective file, a very likely candidate is 393b08c. CC @ngoldbaum

Linux fails at import time, for the other platforms this manifests as a compilation failure directly:

Linux

ImportError: $PREFIX/lib/python3.10/site-packages/numpy/_core/_multiarray_umath.cpython-310-aarch64-linux-gnu.so: undefined symbol: Py_END_CRITICAL_SECTION

OSX

[371/513] Compiling C object numpy/_core/_multiarray_umath.cpython-311-darwin.so.p/src_multiarray_textreading_rows.c.o
FAILED: numpy/_core/_multiarray_umath.cpython-311-darwin.so.p/src_multiarray_textreading_rows.c.o 
x86_64-apple-darwin13.4.0-clang -Inumpy/_core/_multiarray_umath.cpython-311-darwin.so.p -Inumpy/_core -I../numpy/_core -Inumpy/_core/include -I../numpy/_core/include -I../numpy/_core/src/common -I../numpy/_core/src/multiarray -I../numpy/_core/src/npymath -I../numpy/_core/src/umath -I../numpy/_core/src/highway -I$PREFIX/include -I$PREFIX/include/python3.11 -I$SRC_DIR/builddir/meson_cpu -fvisibility=hidden -fdiagnostics-color=always -DNDEBUG -Wall -Winvalid-pch -std=c11 -O3 -fno-strict-aliasing -ftrapping-math -DNPY_HAVE_CLANG_FPSTRICT -msse -msse2 -msse3 -mssse3 -DNPY_HAVE_SSE2 -DNPY_HAVE_SSE -DNPY_HAVE_SSE3 -DNPY_HAVE_SSSE3 -march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fstack-protector-strong -O2 -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/numpy-2.1.2 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -D_FORTIFY_SOURCE=2 -isystem $PREFIX/include -mmacosx-version-min=10.13 -mmacosx-version-min=10.13 -DHAVE_CBLAS -DNPY_INTERNAL_BUILD -DHAVE_NPY_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -MD -MQ numpy/_core/_multiarray_umath.cpython-311-darwin.so.p/src_multiarray_textreading_rows.c.o -MF numpy/_core/_multiarray_umath.cpython-311-darwin.so.p/src_multiarray_textreading_rows.c.o.d -o numpy/_core/_multiarray_umath.cpython-311-darwin.so.p/src_multiarray_textreading_rows.c.o -c ../numpy/_core/src/multiarray/textreading/rows.c
../numpy/_core/src/multiarray/textreading/rows.c:63:5: error: call to undeclared function 'Py_BEGIN_CRITICAL_SECTION'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
   63 |     Py_BEGIN_CRITICAL_SECTION(converters);
      |     ^
../numpy/_core/src/multiarray/textreading/rows.c:116:5: error: call to undeclared function 'Py_END_CRITICAL_SECTION'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
  116 |     Py_END_CRITICAL_SECTION();
      |     ^
2 errors generated.

Windows

[499/513] Linking target numpy/_core/_multiarray_umath.cp311-win_amd64.pyd
FAILED: numpy/_core/_multiarray_umath.cp311-win_amd64.pyd 
"link" @numpy/_core/_multiarray_umath.cp311-win_amd64.pyd.rsp
   Creating library numpy\_core\_multiarray_umath.cp311-win_amd64.lib and object numpy\_core\_multiarray_umath.cp311-win_amd64.exp
src_multiarray_textreading_rows.c.obj : error LNK2019: unresolved external symbol Py_BEGIN_CRITICAL_SECTION referenced in function create_conv_funcs
src_umath_dispatching.c.obj : error LNK2001: unresolved external symbol Py_BEGIN_CRITICAL_SECTION
src_multiarray_textreading_rows.c.obj : error LNK2019: unresolved external symbol Py_END_CRITICAL_SECTION referenced in function create_conv_funcs

src_umath_dispatching.c.obj : error LNK2001: unresolved external symbol Py_END_CRITICAL_SECTION

numpy\_core\_multiarray_umath.cp311-win_amd64.pyd : fatal error LNK1120: 2 unresolved externals

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions