[3.13] gh-132026: Ensure _MIPS_SIM has defined _ABI identifiers for comparison (GH-133092)

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.
(cherry picked from commit 6985e2e6de)

Co-authored-by: Valters Jansons <sigv@users.noreply.github.com>
This commit is contained in:
Miss Islington (bot) 2025-04-28 19:15:45 +02:00 committed by GitHub
parent 85882ca0e7
commit 507b4fa7a4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 13 additions and 12 deletions

View file

@ -0,0 +1 @@
Fix use of undefined identifiers in platform triplet detection on MIPS Linux platforms.

View file

@ -57,21 +57,21 @@ PLATFORM_TRIPLET=arm-linux-androideabi
# endif
# if defined(_MIPS_SIM)
# if defined(__mips_hard_float)
# if _MIPS_SIM == _ABIO32
# if defined(_ABIO32) && _MIPS_SIM == _ABIO32
# define LIBC_MIPS gnu
# elif _MIPS_SIM == _ABIN32
# elif defined(_ABIN32) && _MIPS_SIM == _ABIN32
# define LIBC_MIPS gnuabin32
# elif _MIPS_SIM == _ABI64
# elif defined(_ABI64) && _MIPS_SIM == _ABI64
# define LIBC_MIPS gnuabi64
# else
# error unknown mips sim value
# endif
# else
# if _MIPS_SIM == _ABIO32
# if defined(_ABIO32) && _MIPS_SIM == _ABIO32
# define LIBC_MIPS gnusf
# elif _MIPS_SIM == _ABIN32
# elif defined(_ABIN32) && _MIPS_SIM == _ABIN32
# define LIBC_MIPS gnuabin32sf
# elif _MIPS_SIM == _ABI64
# elif defined(_ABI64) && _MIPS_SIM == _ABI64
# define LIBC_MIPS gnuabi64sf
# else
# error unknown mips sim value
@ -107,21 +107,21 @@ PLATFORM_TRIPLET=arm-linux-androideabi
# endif
# if defined(_MIPS_SIM)
# if defined(__mips_hard_float)
# if _MIPS_SIM == _ABIO32
# if defined(_ABIO32) && _MIPS_SIM == _ABIO32
# define LIBC_MIPS musl
# elif _MIPS_SIM == _ABIN32
# elif defined(_ABIN32) && _MIPS_SIM == _ABIN32
# define LIBC_MIPS musln32
# elif _MIPS_SIM == _ABI64
# elif defined(_ABI64) && _MIPS_SIM == _ABI64
# define LIBC_MIPS musl
# else
# error unknown mips sim value
# endif
# else
# if _MIPS_SIM == _ABIO32
# if defined(_ABIO32) && _MIPS_SIM == _ABIO32
# define LIBC_MIPS muslsf
# elif _MIPS_SIM == _ABIN32
# elif defined(_ABIN32) && _MIPS_SIM == _ABIN32
# define LIBC_MIPS musln32sf
# elif _MIPS_SIM == _ABI64
# elif defined(_ABI64) && _MIPS_SIM == _ABI64
# define LIBC_MIPS muslsf
# else
# error unknown mips sim value