]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-116869: Fix redefinition of the _PyOptimizerObject type (#116963)
authorVictor Stinner <vstinner@python.org>
Mon, 18 Mar 2024 16:14:42 +0000 (17:14 +0100)
committerGitHub <noreply@github.com>
Mon, 18 Mar 2024 16:14:42 +0000 (16:14 +0000)
Defining a type twice is a C11 feature and so makes the C API
incompatible with C99. Fix the issue by only defining the type once.

Example of warning (treated as an error):

    In file included from Include/Python.h:122:
    Include/cpython/optimizer.h:77:3: error: redefinition of typedef
    '_PyOptimizerObject' is a C11 feature [-Werror,-Wtypedef-redefinition]
    } _PyOptimizerObject;
    ^
    build/Include/cpython/optimizer.h:60:35: note: previous definition is here
    typedef struct _PyOptimizerObject _PyOptimizerObject;
                                    ^

Include/cpython/optimizer.h

index 6d7b8bc3c1433aa9116150bff0099d3de14e98b2..df83e6d16a429db57e9ba916408e8687a36b54f1 100644 (file)
@@ -65,7 +65,7 @@ typedef int (*optimize_func)(
     _Py_CODEUNIT *instr, _PyExecutorObject **exec_ptr,
     int curr_stackentries);
 
-typedef struct _PyOptimizerObject {
+struct _PyOptimizerObject {
     PyObject_HEAD
     optimize_func optimize;
     /* These thresholds are treated as signed so do not exceed INT16_MAX
@@ -74,7 +74,7 @@ typedef struct _PyOptimizerObject {
     uint16_t side_threshold;
     uint16_t backedge_threshold;
     /* Data needed by the optimizer goes here, but is opaque to the VM */
-} _PyOptimizerObject;
+};
 
 /** Test support **/
 typedef struct {