Originally discovered at https:/ /bugs.gentoo. org/917562
Modern C compilers are becoming stricter with a variety of changes over
the last year or so. In particular, GCC 14 and clang 17 will error out
by default.
You can reproduce using an older gcc 13.2.1 and the following CFLAGS to
emulate those changed defaults:
CFLAGS= "-Werror= incompatible- pointer- types"
Tested against libxml2 2.11.5
The failure is in etree.c:
```
2023-12-01 14:26:59,852 root INFO x86_64- pc-linux- gnu-gcc -Wsign-compare
-DNDEBUG -march=native -fstack- protector- all -O2 -pipe
-fdiagnostics- color=always -frecord- gcc-switches
-Werror= incompatible- pointer- types -DNDEBUG -fPIC
-DCYTHON_ CLINE_IN_ TRACEBACK= 0 -Isrc/lxml -Isrc/lxml/includes
-I/usr/ include/ libxml2 -Isrc -I/usr/ include/ python3. 11 -c
src/lxml/etree.c -o
/var/tmp/ portage/ dev-python/ lxml-4. 9.3-r2/ work/lxml- lxml-4. 9.3-python3_ 11/build/ temp.linux- x86_64- cpython- 311/src/ lxml/etree. o
src/lxml/etree.c: In function
‘__pyx_ f_4lxml_ 5etree_ 11_BaseParser_ _registerHtmlEr rorHandler’ :
src/lxml/ etree.c: 134305: 5: warning: ‘__htmlDefaultS AXHandler’ is
deprecated [-Wdeprecated- declarations]
134305 | __pyx_t_2 = (((xmlSAXHandlerV1 *)__pyx_v_sax) ==
(&htmlDefaultSA XHandler) );
| ^~~~~~~~~
In file included from /usr/include/ libxml2/ libxml/ threads. h:35,
from /usr/include/ libxml2/ libxml/ xmlmemory. h:222,
from /usr/include/ libxml2/ libxml/ tree.h: 1310,
from src/lxml/ includes/ etree_defs. h:189,
from src/lxml/ etree.c: 1301:
/usr/include/ libxml2/ libxml/ globals. h:259:29: note: declared here
259 | XMLPUBFUN xmlSAXHandlerV1 * __htmlDefaultSA XHandler( void);
| ^~~~~~~ ~~~~~~~ ~~~~~~~ ~~
src/lxml/ etree.c: 134352: 7: warning: ‘__htmlDefaultS AXHandler’ is
deprecated [-Wdeprecated- declarations]
134352 | (void)( memcpy( __pyx_v_ sax, (&htmlDefaultSA XHandler) ,
(sizeof( htmlDefaultSAXH andler) )));
| ^
/usr/include/ libxml2/ libxml/ globals. h:259:29: note: declared here
259 | XMLPUBFUN xmlSAXHandlerV1 * __htmlDefaultSA XHandler( void);
| ^~~~~~~ ~~~~~~~ ~~~~~~~ ~~
src/lxml/ etree.c: 134352: 7: warning: ‘__htmlDefaultS AXHandler’ is
deprecated [-Wdeprecated- declarations]
134352 | (void)( memcpy( __pyx_v_ sax, (&htmlDefaultSA XHandler) ,
(sizeof( htmlDefaultSAXH andler) )));
| ^
/usr/include/ libxml2/ libxml/ globals. h:259:29: note: declared here
259 | XMLPUBFUN xmlSAXHandlerV1 * __htmlDefaultSA XHandler( void);
| ^~~~~~~ ~~~~~~~ ~~~~~~~ ~~
src/lxml/etree.c: In function ‘__pyx_ pf_4lxml_ 5etree_ 11TreeBuilder_ 4data’:
src/lxml/ etree.c: 155053: 66: error: passing argument 1 of
‘__pyx_ f_4lxml_ 5etree_ 11TreeBuilder_ _handleSaxData’ from incompatible
pointer type [-Werror= incompatible- pointer- types]
155053 | __pyx_t_1 =
__pyx_f_ 4lxml_5etree_ 11TreeBuilder_ _handleSaxData( ((struct
__pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *)__pyx_v_self), __pyx_v_data);
if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 832, __pyx_L1_error)
|
~^~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~
| |
|
struct __pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *
src/lxml/ etree.c: 154330: 105: note: expected ‘struct
__pyx_obj_ 4lxml_5etree_ TreeBuilder *’ but argument is of type ‘struct
__pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *’
154330 | static int
__pyx_f_ 4lxml_5etree_ 11TreeBuilder_ _handleSaxData( struct
__pyx_obj_ 4lxml_5etree_ TreeBuilder *__pyx_v_self, PyObject *__pyx_v_data) {
|
~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~^~~~~~ ~~~~~~
src/lxml/etree.c: In function ‘__pyx_ pf_4lxml_ 5etree_ 11TreeBuilder_ 6start’ :
src/lxml/ etree.c: 155259: 67: error: passing argument 1 of
‘__pyx_ f_4lxml_ 5etree_ 11TreeBuilder_ _handleSaxStart ’ from incompatible
pointer type [-Werror= incompatible- pointer- types]
155259 | __pyx_t_2 =
__pyx_f_ 4lxml_5etree_ 11TreeBuilder_ _handleSaxStart (((struct
__pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *)__pyx_v_self), __pyx_v_tag,
__pyx_v_attrs, __pyx_v_nsmap); if (unlikely( !__pyx_ t_2)) __PYX_ERR(3,
841, __pyx_L1_error)
|
~^~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~
| |
|
struct __pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *
src/lxml/ etree.c: 153949: 112: note: expected ‘struct
__pyx_obj_ 4lxml_5etree_ TreeBuilder *’ but argument is of type ‘struct
__pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *’
153949 | static PyObject
*__pyx_ f_4lxml_ 5etree_ 11TreeBuilder_ _handleSaxStart (struct
__pyx_obj_ 4lxml_5etree_ TreeBuilder *__pyx_v_self, PyObject *__pyx_v_tag,
PyObject *__pyx_v_attrib, PyObject *__pyx_v_nsmap) {
|
~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~^~ ~~~~~~~ ~~~
src/lxml/etree.c: In function ‘__pyx_ pf_4lxml_ 5etree_ 11TreeBuilder_ 8end’:
src/lxml/ etree.c: 155412: 65: error: passing argument 1 of
‘__pyx_ f_4lxml_ 5etree_ 11TreeBuilder_ _handleSaxEnd’ from incompatible
pointer type [-Werror= incompatible- pointer- types]
155412 | __pyx_t_1 =
__pyx_f_ 4lxml_5etree_ 11TreeBuilder_ _handleSaxEnd( ((struct
__pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *)__pyx_v_self), __pyx_v_tag);
if (unlikely( !__pyx_ t_1)) __PYX_ERR(3, 848, __pyx_L1_error)
|
~^~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~
| |
|
struct __pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *
src/lxml/ etree.c: 154222: 110: note: expected ‘struct
__pyx_obj_ 4lxml_5etree_ TreeBuilder *’ but argument is of type ‘struct
__pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *’
154222 | static PyObject
*__pyx_ f_4lxml_ 5etree_ 11TreeBuilder_ _handleSaxEnd( struct
__pyx_obj_ 4lxml_5etree_ TreeBuilder *__pyx_v_self, CYTHON_UNUSED PyObject
*__pyx_v_tag) {
|
~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~^~~~ ~~~~~~~ ~
src/lxml/etree.c: In function ‘__pyx_ pf_4lxml_ 5etree_ 11TreeBuilder_ 10pi’:
src/lxml/ etree.c: 155658: 64: error: passing argument 1 of
‘__pyx_ f_4lxml_ 5etree_ 11TreeBuilder_ _handleSaxPi’ from incompatible
pointer type [-Werror= incompatible- pointer- types]
155658 | __pyx_t_1 =
__pyx_f_ 4lxml_5etree_ 11TreeBuilder_ _handleSaxPi( ((struct
__pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *)__pyx_v_self), __pyx_v_target,
__pyx_v_data); if (unlikely( !__pyx_ t_1)) __PYX_ERR(3, 859, __pyx_L1_error)
|
~^~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~
| |
|
struct __pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *
src/lxml/ etree.c: 154376: 109: note: expected ‘struct
__pyx_obj_ 4lxml_5etree_ TreeBuilder *’ but argument is of type ‘struct
__pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *’
154376 | static PyObject
*__pyx_ f_4lxml_ 5etree_ 11TreeBuilder_ _handleSaxPi( struct
__pyx_obj_ 4lxml_5etree_ TreeBuilder *__pyx_v_self, PyObject
*__pyx_v_target, PyObject *__pyx_v_data) {
|
~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~^~~~~ ~~~~~~~
src/lxml/etree.c: In function
‘__pyx_ pf_4lxml_ 5etree_ 11TreeBuilder_ 12comment’ :
src/lxml/ etree.c: 155803: 69: error: passing argument 1 of
‘__pyx_ f_4lxml_ 5etree_ 11TreeBuilder_ _handleSaxComme nt’ from incompatible
pointer type [-Werror= incompatible- pointer- types]
155803 | __pyx_t_1 =
__pyx_f_ 4lxml_5etree_ 11TreeBuilder_ _handleSaxComme nt(((struct
__pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *)__pyx_v_self),
__pyx_v_comment); if (unlikely( !__pyx_ t_1)) __PYX_ERR(3, 867,
__pyx_L1_error)
|
~^~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~
|
|
|
struct __pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *
src/lxml/ etree.c: 154556: 114: note: expected ‘struct
__pyx_obj_ 4lxml_5etree_ TreeBuilder *’ but argument is of type ‘struct
__pyx_obj_ 4lxml_5etree_ _SaxParserTarge t *’
154556 | static PyObject
*__pyx_ f_4lxml_ 5etree_ 11TreeBuilder_ _handleSaxComme nt(struct
__pyx_obj_ 4lxml_5etree_ TreeBuilder *__pyx_v_self, PyObject
*__pyx_v_comment) {
|
~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ^~~~~~~ ~~~~~
src/lxml/etree.c: In function ‘__pyx_ pf_4lxml_ 5etree_ 4XSLT_18_ _call__ ’:
src/lxml/ etree.c: 225871: 73: error: passing argument 1 of
‘__pyx_ f_4lxml_ 5etree_ 12_XSLTContext_ _copy’ from incompatible pointer
type [-Werror= incompatible- pointer- types]
225871 | __pyx_t_2 = ((PyObject
*)__pyx_ f_4lxml_ 5etree_ 12_XSLTContext_ _copy(( (struct
__pyx_obj_ 4lxml_5etree_ _BaseContext *)__pyx_ v_self- >_context) )); if
(unlikely( !__pyx_ t_2)) __PYX_ERR(4, 550, __pyx_L9_error)
|
~^~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~
|
|
|
struct __pyx_obj_ 4lxml_5etree_ _BaseContext *
src/lxml/ etree.c: 223147: 138: note: expected ‘struct
__pyx_obj_ 4lxml_5etree_ _XSLTContext *’ but argument is of type ‘struct
__pyx_obj_ 4lxml_5etree_ _BaseContext *’
223147 | static struct __pyx_obj_ 4lxml_5etree_ _BaseContext
*__pyx_ f_4lxml_ 5etree_ 12_XSLTContext_ _copy(struct
__pyx_obj_ 4lxml_5etree_ _XSLTContext *__pyx_v_self) {
|
~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~^~~~~ ~~~~~~~
src/lxml/etree.c: In function ‘__pyx_ f_4lxml_ 5etree_ _copyXSLT’ :
src/lxml/ etree.c: 227688: 71: error: passing argument 1 of
‘__pyx_ f_4lxml_ 5etree_ 12_XSLTContext_ _copy’ from incompatible pointer
type [-Werror= incompatible- pointer- types]
227688 | __pyx_t_2 = ((PyObject
*)__pyx_ f_4lxml_ 5etree_ 12_XSLTContext_ _copy(( (struct
__pyx_obj_ 4lxml_5etree_ _BaseContext *)__pyx_ v_stylesheet- >_context) ));
if (unlikely( !__pyx_ t_2)) __PYX_ERR(4, 691, __pyx_L1_error)
|
~^~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~
|
|
|
struct __pyx_obj_ 4lxml_5etree_ _BaseContext *
src/lxml/ etree.c: 223147: 138: note: expected ‘struct
__pyx_obj_ 4lxml_5etree_ _XSLTContext *’ but argument is of type ‘struct
__pyx_obj_ 4lxml_5etree_ _BaseContext *’
223147 | static struct __pyx_obj_ 4lxml_5etree_ _BaseContext
*__pyx_ f_4lxml_ 5etree_ 12_XSLTContext_ _copy(struct
__pyx_obj_ 4lxml_5etree_ _XSLTContext *__pyx_v_self) {
|
~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~^~~~~ ~~~~~~~
src/lxml/etree.c: In function ‘__pyx_ pymod_exec_ etree’:
src/lxml/ etree.c: 287466: 3: warning: ‘xmlThrDefLineN umbersDefaultVa lue’
is deprecated [-Wdeprecated- declarations]
287466 | (void)( xmlThrDefLineNu mbersDefaultVal ue(1));
| ^
/usr/include/ libxml2/ libxml/ globals. h:426:15: note: declared here
426 | XMLPUBFUN int xmlThrDefLineNu mbersDefaultVal ue(int v);
| ^~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~
```
affects lxml