Skip to content

Commit

Permalink
gh-116869: Fix redefinition of the _PyOptimizerObject type (#116963)
Browse files Browse the repository at this point in the history
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;
                                    ^
  • Loading branch information
vstinner authored Mar 18, 2024
1 parent 1d95451 commit f139d84
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions Include/cpython/optimizer.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 {
Expand Down

0 comments on commit f139d84

Please sign in to comment.