Skip to content

gh-160704: Restore C11-C17 static_assert fallback - #160705

Open
ZhongRuoyu wants to merge 1 commit into
python:mainfrom
ZhongRuoyu:restore-static_assert-fallback
Open

ZhongRuoyu wants to merge 1 commit into
python:mainfrom
ZhongRuoyu:restore-static_assert-fallback

Conversation

@ZhongRuoyu

@ZhongRuoyu ZhongRuoyu commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

_Py_STDC_VERSION needs to be defined before its value can be checked. In 8335bcb (gh-160208: Add a private wrapper around __STDC_VERSION__ (GH-160376), 2026-10-23), the condition defined(_Py_STDC_VERSION) is incorrectly negated, which prevents the fallback definition of static_assert in C11-C17 builds and causes a build error when building with an old C library that does not define static_assert.

Below is an example when building CPython 3.15.2 with glibc 2.13:

gcc -pthread -c -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer  -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall    -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I/usr/local/src/python/Include/internal -I/usr/local/src/python/Include/internal/mimalloc -IObjects -IInclude -IPython -I. -I/usr/local/src/python/Include    -DPy_BUILD_CORE -o Objects/longobject.o /usr/local/src/python/Objects/longobject.c
In file included from /usr/local/src/python/Include/Python.h:70,
                from /usr/local/src/python/Objects/longobject.c:5:
/usr/local/src/python/Include/internal/pycore_bitutils.h: In function '_Py_popcount32':
/usr/local/src/python/Include/pymacro.h:175:13: error: implicit declaration of function 'static_assert' [-Wimplicit-function-declaration]
    175 |             static_assert((cond), #cond); \
        |             ^~~~~~~~~~~~~
/usr/local/src/python/Include/internal/pycore_bitutils.h:100:5: note: in expansion of macro 'Py_BUILD_ASSERT'
    100 |     Py_BUILD_ASSERT(sizeof(x) <= sizeof(unsigned int));
        |     ^~~~~~~~~~~~~~~
make: *** [Makefile:3407: Objects/longobject.o] Error 1

Restore compilation in such environments by fixing the negation.

Please backport to 3.15.

CC: @encukou

`_Py_STDC_VERSION` needs to be defined before its value can be checked.
In 8335bcb (pythongh-160208: Add a private wrapper around __STDC_VERSION__
(pythonGH-160376), 2026-10-23), the condition `defined(_Py_STDC_VERSION)` is
incorrectly negated, which prevents the fallback definition of
`static_assert` in C11-C17 builds and causes a build error when building
with an old C library that does not define `static_assert`.

Below is an example when building CPython 3.15.2 with glibc 2.13:

    gcc -pthread -c -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer  -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall    -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I/usr/local/src/python/Include/internal -I/usr/local/src/python/Include/internal/mimalloc -IObjects -IInclude -IPython -I. -I/usr/local/src/python/Include    -DPy_BUILD_CORE -o Objects/longobject.o /usr/local/src/python/Objects/longobject.c
    In file included from /usr/local/src/python/Include/Python.h:70,
                    from /usr/local/src/python/Objects/longobject.c:5:
    /usr/local/src/python/Include/internal/pycore_bitutils.h: In function '_Py_popcount32':
    /usr/local/src/python/Include/pymacro.h:175:13: error: implicit declaration of function 'static_assert' [-Wimplicit-function-declaration]
      175 |             static_assert((cond), #cond); \
          |             ^~~~~~~~~~~~~
    /usr/local/src/python/Include/internal/pycore_bitutils.h:100:5: note: in expansion of macro 'Py_BUILD_ASSERT'
      100 |     Py_BUILD_ASSERT(sizeof(x) <= sizeof(unsigned int));
          |     ^~~~~~~~~~~~~~~
    make: *** [Makefile:3407: Objects/longobject.o] Error 1

Restore compilation in such environments by fixing the negation.

Signed-off-by: Ruoyu Zhong <zhongruoyu@outlook.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants