From 237f518f899c96584666aeaf8bcc53878100e393 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Tue, 16 Dec 2025 16:07:59 +0100 Subject: [PATCH 1/3] Add PyABIInfo_VAR to to _testcapimodule & _testinternalcapi --- Modules/_testcapimodule.c | 3 +++ Modules/_testinternalcapi.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index c14f925b4e7632..209f59f8d77545 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3523,7 +3523,10 @@ _testcapi_exec(PyObject *m) return 0; } +PyABIInfo_VAR(abi_info); + static PyModuleDef_Slot _testcapi_slots[] = { + {Py_mod_abi, abi_info}, {Py_mod_exec, _testcapi_exec}, {Py_mod_gil, Py_MOD_GIL_NOT_USED}, {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED}, diff --git a/Modules/_testinternalcapi.c b/Modules/_testinternalcapi.c index 4140cd23ded95e..0598935a364d05 100644 --- a/Modules/_testinternalcapi.c +++ b/Modules/_testinternalcapi.c @@ -2696,7 +2696,10 @@ module_exec(PyObject *module) return 0; } +PyABIInfo_VAR(abi_info); + static struct PyModuleDef_Slot module_slots[] = { + {Py_mod_abi, abi_info}, {Py_mod_exec, module_exec}, {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED}, {Py_mod_gil, Py_MOD_GIL_NOT_USED}, From 35fa3f0eca6f990f0897883c007397bd2a1c1c79 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Tue, 16 Dec 2025 16:23:16 +0100 Subject: [PATCH 2/3] ... *exactly* as documented --- Modules/_testcapimodule.c | 2 +- Modules/_testinternalcapi.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 209f59f8d77545..de6d3cbce54fbe 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3526,7 +3526,7 @@ _testcapi_exec(PyObject *m) PyABIInfo_VAR(abi_info); static PyModuleDef_Slot _testcapi_slots[] = { - {Py_mod_abi, abi_info}, + {Py_mod_abi, &abi_info}, {Py_mod_exec, _testcapi_exec}, {Py_mod_gil, Py_MOD_GIL_NOT_USED}, {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED}, diff --git a/Modules/_testinternalcapi.c b/Modules/_testinternalcapi.c index 0598935a364d05..a7fbb0f87b6e9c 100644 --- a/Modules/_testinternalcapi.c +++ b/Modules/_testinternalcapi.c @@ -2699,7 +2699,7 @@ module_exec(PyObject *module) PyABIInfo_VAR(abi_info); static struct PyModuleDef_Slot module_slots[] = { - {Py_mod_abi, abi_info}, + {Py_mod_abi, &abi_info}, {Py_mod_exec, module_exec}, {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED}, {Py_mod_gil, Py_MOD_GIL_NOT_USED}, From 8e02c8ac769f7e45ca1b5891163fcaf0df8c9b9d Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Tue, 16 Dec 2025 15:37:21 +0100 Subject: [PATCH 3/3] Don't flag static PyABIInfo variables --- Tools/c-analyzer/cpython/_analyzer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/c-analyzer/cpython/_analyzer.py b/Tools/c-analyzer/cpython/_analyzer.py index 6f0f464892845f..43ed552fcf75d9 100644 --- a/Tools/c-analyzer/cpython/_analyzer.py +++ b/Tools/c-analyzer/cpython/_analyzer.py @@ -76,6 +76,7 @@ 'PyBufferProcs', 'PyStructSequence_Field[]', 'PyStructSequence_Desc', + 'PyABIInfo', } # XXX We should normalize all cases to a single name,