Skip to content

_MIPS_SIM comparison may contain undefined identifiers for _ABI #132026

Closed
@sigv

Description

@sigv

Bug report

Bug description:

#include <Python.h>

When built on a MIPS architecture, _MIPS_SIM is used to determine architecture specifics. The value is expected to match either _ABIO32, _ABIN32 or _ABI64.

In gcc config/mips/mips.h these values are defined as compiler builtin_define inside of a switch/case. That means, mips64el and mips64 architectures know about _ABI64 but don't know about _ABIO32 and _ABIN32. In turn, when CPython tries to use them in comparison, they may be undefined identifiers.

In default compiler behavior, the undefined identifier will be evaluated as zero, and it will not match _MIPS_SIM. However, the issues pop up when -Wundef (or, even worse, -Werror=undef) compiler flag is enabled. Then suddenly it's visible as a warning or error:

In file included from /usr/include/python3.13/Python.h:14,
                 from example.c:1:
/usr/include/python3.13/pyconfig.h:59:20: error: "_ABIO32" is not defined, evaluates to 0 [-Werror=undef]
   59 | #  if _MIPS_SIM == _ABIO32
      |                    ^~~~~~~
/usr/include/python3.13/pyconfig.h:61:22: error: "_ABIN32" is not defined, evaluates to 0 [-Werror=undef]
   61 | #  elif _MIPS_SIM == _ABIN32
      |                      ^~~~~~~

CPython versions tested on:

3.13

Operating systems tested on:

Linux

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    OS-unsupportedbuildThe build process and cross-buildtype-bugAn unexpected behavior, bug, or error

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions