Open
Description
Bug report
Bug description:
For a non-gcc
/clang
compiler, _Py_TYPEOF
is not defined.
Lines 548 to 551 in c08a302
Which leads to
Py_CLEAR()
fallback to an implementation with memcpy()
call.Lines 1016 to 1027 in c08a302
Py_CLEAR()
is used in ./Modules/pwdmodule.c
Lines 355 to 358 in c08a302
without including
string.h
Lines 12 to 16 in c08a302
For a non-gcc
/clang
compiler, this may fail due to missing memcpy()
declaration.
./Include/object.h:1017: #define Py_CLEAR(op) do { PyObject **_tmp_op_ptr = _Py_CAST(PyObject**, &(op)); PyObject *_tmp_old_op = (*_tmp_op_ptr); if (_tmp_old_op != NULL) { PyObject *_null_ptr = _Py_NULL; memcpy(_tmp_op_ptr, &_null_ptr, sizeof(PyObject*)); Py_DECREF(_tmp_old_op); } } while (0)
^ implicit declaration of a function
./Modules/pwdmodule.c:356: Py_CLEAR(get_pwd_state(m)->StructPwdType);
^ in expansion of macro
On a side note, typeof
is widely implemented among alternative C compilers like TinyCC and cproc, kefir, chibicc, and is standardized in C23. It could be beneficial to enable typeof
usage through configure
option or probing, instead of hard-coded off on non-gcc
/clang
compilers.
CPython versions tested on:
3.13
Operating systems tested on:
Linux