From a6b113fd37ad15aae49757388edd50c2f11cb64b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 11 Aug 2026 16:36:40 +0200 Subject: [PATCH 1/4] gh-155561: Build most _testlimitedcapi files with Py_TARGET_ABI3T The following files are not build with Py_TARGET_ABI3T: * Modules/_testlimitedcapi.c * Modules/_testlimitedcapi/heaptype_relative.c * Modules/_testlimitedcapi/vectorcall_limited.c --- Modules/_testlimitedcapi.c | 9 +++++++++ Modules/_testlimitedcapi/capsule.c | 3 +++ Modules/_testlimitedcapi/codec.c | 7 ++++--- Modules/_testlimitedcapi/file.c | 4 +++- Modules/_testlimitedcapi/heaptype_relative.c | 6 ++++-- Modules/_testlimitedcapi/import.c | 6 ++++-- Modules/_testlimitedcapi/list.c | 6 ++++-- Modules/_testlimitedcapi/long.c | 4 +++- Modules/_testlimitedcapi/object.c | 6 ++++-- Modules/_testlimitedcapi/parts.h | 6 ++++-- Modules/_testlimitedcapi/slots.c | 8 +++++++- Modules/_testlimitedcapi/sys.c | 6 ++++-- Modules/_testlimitedcapi/unicode.c | 4 +++- Modules/_testlimitedcapi/vectorcall_limited.c | 6 ++++-- Modules/_testlimitedcapi/version.c | 7 +++++-- Modules/_testlimitedcapi/weakref.c | 4 +++- 16 files changed, 68 insertions(+), 24 deletions(-) diff --git a/Modules/_testlimitedcapi.c b/Modules/_testlimitedcapi.c index 0a562ea9c03110..1f06903590b938 100644 --- a/Modules/_testlimitedcapi.c +++ b/Modules/_testlimitedcapi.c @@ -5,6 +5,15 @@ * standard Python regression test, via Lib/test/test_capi.py. */ +#include "pyconfig.h" // Py_GIL_DISABLED + +#ifdef Py_GIL_DISABLED + // FIXME: use the Py_TARGET_ABI3T +#else + // Need limited C API version 3.13 for Py_MOD_GIL_NOT_USED +# define Py_LIMITED_API 0x030d0000 +#endif + #include "_testlimitedcapi/parts.h" static PyMethodDef TestMethods[] = { diff --git a/Modules/_testlimitedcapi/capsule.c b/Modules/_testlimitedcapi/capsule.c index 07b85823f399ba..8dd870034023a3 100644 --- a/Modules/_testlimitedcapi/capsule.c +++ b/Modules/_testlimitedcapi/capsule.c @@ -1,5 +1,8 @@ #include "parts.h" +#include // free() + + static void capsule_destructor(PyObject *op) { diff --git a/Modules/_testlimitedcapi/codec.c b/Modules/_testlimitedcapi/codec.c index fdc18eedc2d288..44eecf99f678bb 100644 --- a/Modules/_testlimitedcapi/codec.c +++ b/Modules/_testlimitedcapi/codec.c @@ -1,7 +1,8 @@ #include "pyconfig.h" // Py_GIL_DISABLED - -// Need limited C API version 3.5 for PyCodec_NameReplaceErrors() -#if !defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API) +#ifdef Py_GIL_DISABLED +# define Py_TARGET_ABI3T 0x030f0000 +#else + // Need limited C API version 3.5 for PyCodec_NameReplaceErrors() # define Py_LIMITED_API 0x03050000 #endif diff --git a/Modules/_testlimitedcapi/file.c b/Modules/_testlimitedcapi/file.c index e082e3c6700ee7..c627c6ceaa201e 100644 --- a/Modules/_testlimitedcapi/file.c +++ b/Modules/_testlimitedcapi/file.c @@ -1,5 +1,7 @@ #include "pyconfig.h" // Py_GIL_DISABLED -#ifndef Py_GIL_DISABLED +#ifdef Py_GIL_DISABLED +# define Py_TARGET_ABI3T 0x030f0000 +#else // Need limited C API 3.13 for PyLong_AsInt() # define Py_LIMITED_API 0x030d0000 #endif diff --git a/Modules/_testlimitedcapi/heaptype_relative.c b/Modules/_testlimitedcapi/heaptype_relative.c index c02a52368b5324..5c4779cbda76ca 100644 --- a/Modules/_testlimitedcapi/heaptype_relative.c +++ b/Modules/_testlimitedcapi/heaptype_relative.c @@ -1,6 +1,8 @@ -// Need limited C API version 3.15 for _DuringGC functions #include "pyconfig.h" // Py_GIL_DISABLED -#if !defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API) +#ifdef Py_GIL_DISABLED + // FIXME: use the Py_TARGET_ABI3T +#else + // Need limited C API version 3.15 for _DuringGC functions # define Py_LIMITED_API 0x030f0000 #endif diff --git a/Modules/_testlimitedcapi/import.c b/Modules/_testlimitedcapi/import.c index f572212ba88b76..48c477bf3ccc48 100644 --- a/Modules/_testlimitedcapi/import.c +++ b/Modules/_testlimitedcapi/import.c @@ -1,6 +1,8 @@ -// Need limited C API version 3.13 for PyImport_AddModuleRef() #include "pyconfig.h" // Py_GIL_DISABLED -#if !defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API) +#ifdef Py_GIL_DISABLED +# define Py_TARGET_ABI3T 0x030f0000 +#else + // Need limited C API version 3.13 for PyImport_AddModuleRef() # define Py_LIMITED_API 0x030d0000 #endif diff --git a/Modules/_testlimitedcapi/list.c b/Modules/_testlimitedcapi/list.c index ed492c3e719727..91c8ad60e3b990 100644 --- a/Modules/_testlimitedcapi/list.c +++ b/Modules/_testlimitedcapi/list.c @@ -1,6 +1,8 @@ -// Need limited C API version 3.13 for PyList_GetItemRef() #include "pyconfig.h" // Py_GIL_DISABLED -#if !defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API) +#ifdef Py_GIL_DISABLED +# define Py_TARGET_ABI3T 0x030f0000 +#else + // Need limited C API version 3.13 for PyList_GetItemRef() # define Py_LIMITED_API 0x030d0000 #endif diff --git a/Modules/_testlimitedcapi/long.c b/Modules/_testlimitedcapi/long.c index 99b9e96760d50d..7c6928dd234e32 100644 --- a/Modules/_testlimitedcapi/long.c +++ b/Modules/_testlimitedcapi/long.c @@ -1,5 +1,7 @@ #include "pyconfig.h" // Py_GIL_DISABLED -#ifndef Py_GIL_DISABLED +#ifdef Py_GIL_DISABLED +# define Py_TARGET_ABI3T 0x030f0000 +#else // Need limited C API 3.14 to test PyLong_AsInt64() # define Py_LIMITED_API 0x030e0000 #endif diff --git a/Modules/_testlimitedcapi/object.c b/Modules/_testlimitedcapi/object.c index da6fe3e4efa34c..594ba60f9abf20 100644 --- a/Modules/_testlimitedcapi/object.c +++ b/Modules/_testlimitedcapi/object.c @@ -1,6 +1,8 @@ -// Need limited C API version 3.13 for Py_GetConstant() #include "pyconfig.h" // Py_GIL_DISABLED -#if !defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API) +#ifdef Py_GIL_DISABLED +# define Py_TARGET_ABI3T 0x030f0000 +#else + // Need limited C API version 3.13 for Py_GetConstant() # define Py_LIMITED_API 0x030d0000 #endif diff --git a/Modules/_testlimitedcapi/parts.h b/Modules/_testlimitedcapi/parts.h index 32c1bbc1b71c97..c79464f11b7a6f 100644 --- a/Modules/_testlimitedcapi/parts.h +++ b/Modules/_testlimitedcapi/parts.h @@ -7,8 +7,10 @@ #include "pyconfig.h" // Py_GIL_DISABLED // Use the limited C API -#if !defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API) - // need limited C API version 3.5 for PyModule_AddFunctions() +#ifdef Py_GIL_DISABLED + // FIXME: use the Py_TARGET_ABI3T +#elif !defined(Py_LIMITED_API) + // Need limited C API version 3.5 for PyModule_AddFunctions() # define Py_LIMITED_API 0x03050000 #endif diff --git a/Modules/_testlimitedcapi/slots.c b/Modules/_testlimitedcapi/slots.c index 9abe53d2115464..07e8f163e07cbd 100644 --- a/Modules/_testlimitedcapi/slots.c +++ b/Modules/_testlimitedcapi/slots.c @@ -1,4 +1,10 @@ -#define Py_LIMITED_API 0x030f0000 +#include "pyconfig.h" // Py_GIL_DISABLED +#ifdef Py_GIL_DISABLED +# define Py_TARGET_ABI3T 0x030f0000 +#else + // Need limited C API version 3.15 for PyType_FromSlots() +# define Py_LIMITED_API 0x030f0000 +#endif #include "parts.h" diff --git a/Modules/_testlimitedcapi/sys.c b/Modules/_testlimitedcapi/sys.c index cec7f8ab612019..5c46da26fc5f8f 100644 --- a/Modules/_testlimitedcapi/sys.c +++ b/Modules/_testlimitedcapi/sys.c @@ -1,6 +1,8 @@ #include "pyconfig.h" // Py_GIL_DISABLED -// Need limited C API version 3.15 for PySys_GetAttr() etc -#if !defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API) +#ifdef Py_GIL_DISABLED +# define Py_TARGET_ABI3T 0x030f0000 +#else + // Need limited C API version 3.15 for PySys_GetAttr() etc # define Py_LIMITED_API 0x030f0000 #endif #include "parts.h" diff --git a/Modules/_testlimitedcapi/unicode.c b/Modules/_testlimitedcapi/unicode.c index c7a23d5d1cbd71..980b192fdc3cbb 100644 --- a/Modules/_testlimitedcapi/unicode.c +++ b/Modules/_testlimitedcapi/unicode.c @@ -1,5 +1,7 @@ #include "pyconfig.h" // Py_GIL_DISABLED -#ifndef Py_GIL_DISABLED +#ifdef Py_GIL_DISABLED +# define Py_TARGET_ABI3T 0x030f0000 +#else // Need limited C API 3.14 to test PyUnicode_Equal() # define Py_LIMITED_API 0x030e0000 #endif diff --git a/Modules/_testlimitedcapi/vectorcall_limited.c b/Modules/_testlimitedcapi/vectorcall_limited.c index 84362d523f4963..019829e8ff4831 100644 --- a/Modules/_testlimitedcapi/vectorcall_limited.c +++ b/Modules/_testlimitedcapi/vectorcall_limited.c @@ -1,8 +1,10 @@ /* Test Vectorcall in the limited API */ -// Need limited C API version 3.12 for PyObject_Vectorcall() #include "pyconfig.h" // Py_GIL_DISABLED -#if !defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API) +#ifdef Py_GIL_DISABLED + // FIXME: use the Py_TARGET_ABI3T +#else + // Need limited C API version 3.12 for PyObject_Vectorcall() # define Py_LIMITED_API 0x030c0000 #endif diff --git a/Modules/_testlimitedcapi/version.c b/Modules/_testlimitedcapi/version.c index 57cd6e4e928ea3..d0a6c5bdf0599c 100644 --- a/Modules/_testlimitedcapi/version.c +++ b/Modules/_testlimitedcapi/version.c @@ -1,8 +1,11 @@ /* Test version macros in the limited API */ #include "pyconfig.h" // Py_GIL_DISABLED -#ifndef Py_GIL_DISABLED -# define Py_LIMITED_API 0x030e0000 // Added in 3.14 +#ifdef Py_GIL_DISABLED +# define Py_TARGET_ABI3T 0x030f0000 +#else + // API added in 3.14 +# define Py_LIMITED_API 0x030e0000 #endif #include "parts.h" diff --git a/Modules/_testlimitedcapi/weakref.c b/Modules/_testlimitedcapi/weakref.c index e7f9d54d1a0d59..a25e39e21af374 100644 --- a/Modules/_testlimitedcapi/weakref.c +++ b/Modules/_testlimitedcapi/weakref.c @@ -1,5 +1,7 @@ #include "pyconfig.h" // Py_GIL_DISABLED -#ifndef Py_GIL_DISABLED +#ifdef Py_GIL_DISABLED +# define Py_TARGET_ABI3T 0x030f0000 +#else // Need limited C API 3.5 for PyModule_AddFunctions() # define Py_LIMITED_API 0x03050000 #endif From cc111314676fdf47c1e0a52c329db5bf2c0f07db Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 11 Aug 2026 21:39:18 +0200 Subject: [PATCH 2/4] Address Nathan's review --- Modules/_testlimitedcapi.c | 4 ++-- Modules/_testlimitedcapi/version.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Modules/_testlimitedcapi.c b/Modules/_testlimitedcapi.c index 1f06903590b938..dbb46770635247 100644 --- a/Modules/_testlimitedcapi.c +++ b/Modules/_testlimitedcapi.c @@ -10,8 +10,8 @@ #ifdef Py_GIL_DISABLED // FIXME: use the Py_TARGET_ABI3T #else - // Need limited C API version 3.13 for Py_MOD_GIL_NOT_USED -# define Py_LIMITED_API 0x030d0000 + // Use the oldest limited C API version +# define Py_LIMITED_API 0x03020000 #endif #include "_testlimitedcapi/parts.h" diff --git a/Modules/_testlimitedcapi/version.c b/Modules/_testlimitedcapi/version.c index d0a6c5bdf0599c..d2a4551159165c 100644 --- a/Modules/_testlimitedcapi/version.c +++ b/Modules/_testlimitedcapi/version.c @@ -4,7 +4,7 @@ #ifdef Py_GIL_DISABLED # define Py_TARGET_ABI3T 0x030f0000 #else - // API added in 3.14 + // Need limited C API version 3.14 for Py_PACK_VERSION() # define Py_LIMITED_API 0x030e0000 #endif From 4a008bd5ce1e9229031ccfaa5686c47f28367b0a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 12 Aug 2026 21:13:04 +0200 Subject: [PATCH 3/4] Address Petr's review --- Modules/_testlimitedcapi.c | 2 +- Modules/_testlimitedcapi/heaptype_relative.c | 2 +- Modules/_testlimitedcapi/parts.h | 2 +- Modules/_testlimitedcapi/slots.c | 9 ++------- Modules/_testlimitedcapi/vectorcall_limited.c | 2 +- 5 files changed, 6 insertions(+), 11 deletions(-) diff --git a/Modules/_testlimitedcapi.c b/Modules/_testlimitedcapi.c index dbb46770635247..9d2c395db037ca 100644 --- a/Modules/_testlimitedcapi.c +++ b/Modules/_testlimitedcapi.c @@ -8,7 +8,7 @@ #include "pyconfig.h" // Py_GIL_DISABLED #ifdef Py_GIL_DISABLED - // FIXME: use the Py_TARGET_ABI3T + // Cannot test the limited C API #else // Use the oldest limited C API version # define Py_LIMITED_API 0x03020000 diff --git a/Modules/_testlimitedcapi/heaptype_relative.c b/Modules/_testlimitedcapi/heaptype_relative.c index 5c4779cbda76ca..a5e15026f028ca 100644 --- a/Modules/_testlimitedcapi/heaptype_relative.c +++ b/Modules/_testlimitedcapi/heaptype_relative.c @@ -1,6 +1,6 @@ #include "pyconfig.h" // Py_GIL_DISABLED #ifdef Py_GIL_DISABLED - // FIXME: use the Py_TARGET_ABI3T + // Cannot test the limited C API #else // Need limited C API version 3.15 for _DuringGC functions # define Py_LIMITED_API 0x030f0000 diff --git a/Modules/_testlimitedcapi/parts.h b/Modules/_testlimitedcapi/parts.h index c79464f11b7a6f..5636b72c4d3187 100644 --- a/Modules/_testlimitedcapi/parts.h +++ b/Modules/_testlimitedcapi/parts.h @@ -8,7 +8,7 @@ // Use the limited C API #ifdef Py_GIL_DISABLED - // FIXME: use the Py_TARGET_ABI3T + // Cannot test the limited C API #elif !defined(Py_LIMITED_API) // Need limited C API version 3.5 for PyModule_AddFunctions() # define Py_LIMITED_API 0x03050000 diff --git a/Modules/_testlimitedcapi/slots.c b/Modules/_testlimitedcapi/slots.c index 07e8f163e07cbd..2a887cd49f4c4b 100644 --- a/Modules/_testlimitedcapi/slots.c +++ b/Modules/_testlimitedcapi/slots.c @@ -1,10 +1,5 @@ -#include "pyconfig.h" // Py_GIL_DISABLED -#ifdef Py_GIL_DISABLED -# define Py_TARGET_ABI3T 0x030f0000 -#else - // Need limited C API version 3.15 for PyType_FromSlots() -# define Py_LIMITED_API 0x030f0000 -#endif +// Need limited C API version 3.15 for PyType_FromSlots() +#define Py_LIMITED_API 0x030f0000 #include "parts.h" diff --git a/Modules/_testlimitedcapi/vectorcall_limited.c b/Modules/_testlimitedcapi/vectorcall_limited.c index 019829e8ff4831..443c4aca28e3ae 100644 --- a/Modules/_testlimitedcapi/vectorcall_limited.c +++ b/Modules/_testlimitedcapi/vectorcall_limited.c @@ -2,7 +2,7 @@ #include "pyconfig.h" // Py_GIL_DISABLED #ifdef Py_GIL_DISABLED - // FIXME: use the Py_TARGET_ABI3T + // Cannot test the limited C API #else // Need limited C API version 3.12 for PyObject_Vectorcall() # define Py_LIMITED_API 0x030c0000 From 128c4acda7ca058fce3c8d876efc7904c31d18f0 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 12 Aug 2026 21:14:47 +0200 Subject: [PATCH 4/4] Update also Modules/_testlimitedcapi/sys.c --- Modules/_testlimitedcapi/sys.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Modules/_testlimitedcapi/sys.c b/Modules/_testlimitedcapi/sys.c index 5c46da26fc5f8f..618f4847c7ac6e 100644 --- a/Modules/_testlimitedcapi/sys.c +++ b/Modules/_testlimitedcapi/sys.c @@ -1,10 +1,6 @@ -#include "pyconfig.h" // Py_GIL_DISABLED -#ifdef Py_GIL_DISABLED -# define Py_TARGET_ABI3T 0x030f0000 -#else - // Need limited C API version 3.15 for PySys_GetAttr() etc -# define Py_LIMITED_API 0x030f0000 -#endif +// Need limited C API version 3.15 for PySys_GetAttr() etc +#define Py_LIMITED_API 0x030f0000 + #include "parts.h" #include "util.h"