Description:
A build failure occurs in Modules/posixmodule.c when compiling CPython from the main branch using Clang with ThreadSanitizer and the --disable-gil flag.
The compilation fails with two distinct types of errors:
- The compiler reports that the
statx struct has no member named stx_atomic_write_unit_max_opt. This error originates from the MM macro expansion within the pystatx_result_members definition.
- Subsequently, multiple errors are reported for an invalid application of
sizeof to an incomplete type PyMemberDef[]. This happens when the Py_ARRAY_LENGTH macro is used on pystatx_result_members, indicating that the array's definition was not completed due to the initial error.
This suggests that the feature detection or conditional compilation logic for the stx_atomic_write_unit_max_opt member is not functioning correctly under this specific build configuration.
Steps to Reproduce:
- Check out the
main branch of cpython.
- Configure the build with the following command:
CC=clang CXX=clang++ ./configure --with-thread-sanitizer --with-pydebug --disable-gil
- Run the build:
Expected Behavior:
The build process should complete successfully.
Actual Behavior:
The build fails with the following errors logged from Modules/posixmodule.c:
../Modules/posixmodule.c:3369:5: error: no member named 'stx_atomic_write_unit_max_opt' in 'statx'
3369 | MM(stx_atomic_write_unit_max_opt, Py_T_UINT, atomic_write_unit_max_opt,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3370 | "maximum optimized size for direct I/O with torn-write protection"),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./Modules/posixmodule.c:3325:20: note: expanded from macro 'MM'
3325 | M(#attr, type, offsetof(Py_statx_result, stx.stx_##member), doc)
| ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/llvm-20/lib/clang/20/include/__stddef_offsetof.h:16:24: note: expanded from macro 'offsetof'
16 | #define offsetof(t, d) __builtin_offsetof(t, d)
| ^
./Modules/posixmodule.c:3323:18: note: expanded from macro 'M'
3323 | {attr, type, offset, Py_READONLY, PyDoc_STR(doc)}
| ^~~~~~
./Modules/posixmodule.c:3427:28: error: invalid application of 'sizeof' to an incomplete type 'PyMemberDef[]' (aka 'struct PyMemberDef[]')
3427 | for (size_t i = 0; i < Py_ARRAY_LENGTH(pystatx_result_members) - 1; ++i) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./Include/pymacro.h:190:12: note: expanded from macro 'Py_ARRAY_LENGTH'
190 | (sizeof(array) / sizeof((array)[0]))
| ^~~~~~~
./Modules/posixmodule.c:3447:9: error: invalid application of 'sizeof' to an incomplete type 'PyMemberDef[]' (aka 'struct PyMemberDef[]')
3447 | if (Py_ARRAY_LENGTH(pystatx_result_members) > 1
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./Include/pymacro.h:190:12: note: expanded from macro 'Py_ARRAY_LENGTH'
190 | (sizeof(array) / sizeof((array)[0]))
| ^~~~~~~
Environment:
- Compiler: Clang
- Configuration Flags:
--with-thread-sanitizer --with-pydebug --disable-gil
Description:
A build failure occurs in
Modules/posixmodule.cwhen compiling CPython from themainbranch using Clang with ThreadSanitizer and the--disable-gilflag.The compilation fails with two distinct types of errors:
statxstruct has no member namedstx_atomic_write_unit_max_opt. This error originates from theMMmacro expansion within thepystatx_result_membersdefinition.sizeofto an incomplete typePyMemberDef[]. This happens when thePy_ARRAY_LENGTHmacro is used onpystatx_result_members, indicating that the array's definition was not completed due to the initial error.This suggests that the feature detection or conditional compilation logic for the
stx_atomic_write_unit_max_optmember is not functioning correctly under this specific build configuration.Steps to Reproduce:
mainbranch of cpython.Expected Behavior:
The build process should complete successfully.
Actual Behavior:
The build fails with the following errors logged from
Modules/posixmodule.c:Environment:
--with-thread-sanitizer --with-pydebug --disable-gil