From: Victor Stinner Date: Fri, 13 Feb 2026 07:30:22 +0000 (+0100) Subject: [3.14] gh-135906: Test more internal headers in test_cext/test_cppext (#144758) X-Git-Tag: v3.14.4~289 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c11e70a7123fc9024141b6c15538633ef176f4f9;p=thirdparty%2FPython%2Fcpython.git [3.14] gh-135906: Test more internal headers in test_cext/test_cppext (#144758) * gh-141563: Enable test_cppext internal C API tests on macOS (#144711) Build the C API in C++11 mode on macOS. (cherry picked from commit c6e418d1744aed95a6f25d22565204649dde29c7) * gh-135906: Test more internal headers in test_cext/test_cppext (#144751) (cherry picked from commit b488f338cf058f46cbf0255023ca1c1669b0eb44) --- diff --git a/Lib/test/test_cext/extension.c b/Lib/test/test_cext/extension.c index 8a0f40d56b1e..56f40b354c69 100644 --- a/Lib/test/test_cext/extension.c +++ b/Lib/test/test_cext/extension.c @@ -15,9 +15,11 @@ #ifdef TEST_INTERNAL_C_API // gh-135906: Check for compiler warnings in the internal C API. - // - Cython uses pycore_frame.h. + // - Cython uses pycore_critical_section.h, pycore_frame.h and + // pycore_template.h. // - greenlet uses pycore_frame.h, pycore_interpframe_structs.h and // pycore_interpframe.h. +# include "internal/pycore_critical_section.h" # include "internal/pycore_frame.h" # include "internal/pycore_gc.h" # include "internal/pycore_interp.h" @@ -25,6 +27,7 @@ # include "internal/pycore_interpframe_structs.h" # include "internal/pycore_object.h" # include "internal/pycore_pystate.h" +# include "internal/pycore_template.h" #endif #ifndef MODULE_NAME diff --git a/Lib/test/test_cppext/__init__.py b/Lib/test/test_cppext/__init__.py index 9013503995bd..1fd01702f640 100644 --- a/Lib/test/test_cppext/__init__.py +++ b/Lib/test/test_cppext/__init__.py @@ -4,6 +4,7 @@ import os.path import shlex import shutil import subprocess +import sys import unittest from test import support @@ -27,9 +28,6 @@ SETUP = os.path.join(os.path.dirname(__file__), 'setup.py') class BaseTests: TEST_INTERNAL_C_API = False - def test_build(self): - self.check_build('_testcppext') - def check_build(self, extension_name, std=None, limited=False): venv_dir = 'env' with support.setup_venv_with_pip_setuptools(venv_dir) as python_exe: @@ -91,6 +89,9 @@ class BaseTests: class TestPublicCAPI(BaseTests, unittest.TestCase): + def test_build(self): + self.check_build('_testcppext') + @support.requires_gil_enabled('incompatible with Free Threading') def test_build_limited_cpp03(self): self.check_build('_test_limited_cpp03ext', std='c++03', limited=True) @@ -119,6 +120,13 @@ class TestPublicCAPI(BaseTests, unittest.TestCase): class TestInteralCAPI(BaseTests, unittest.TestCase): TEST_INTERNAL_C_API = True + def test_build(self): + kwargs = {} + if sys.platform == 'darwin': + # Old Apple clang++ default C++ std is gnu++98 + kwargs['std'] = 'c++11' + self.check_build('_testcppext_internal', **kwargs) + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_cppext/extension.cpp b/Lib/test/test_cppext/extension.cpp index 811374c0361e..4db63df94f52 100644 --- a/Lib/test/test_cppext/extension.cpp +++ b/Lib/test/test_cppext/extension.cpp @@ -15,14 +15,20 @@ #ifdef TEST_INTERNAL_C_API // gh-135906: Check for compiler warnings in the internal C API + // - Cython uses pycore_critical_section.h, pycore_frame.h and + // pycore_template.h. + // - greenlet uses pycore_frame.h, pycore_interpframe_structs.h and + // pycore_interpframe.h. # include "internal/pycore_frame.h" - // mimalloc emits many compiler warnings when Python is built in debug - // mode (when MI_DEBUG is not zero). - // mimalloc emits compiler warnings when Python is built on Windows - // and macOS. -# if !defined(Py_DEBUG) && !defined(MS_WINDOWS) && !defined(__APPLE__) +# include "internal/pycore_interpframe_structs.h" +# include "internal/pycore_template.h" + + // mimalloc emits compiler warnings on Windows. +# if !defined(MS_WINDOWS) # include "internal/pycore_backoff.h" # include "internal/pycore_cell.h" +# include "internal/pycore_critical_section.h" +# include "internal/pycore_interpframe.h" # endif #endif diff --git a/Lib/test/test_cppext/setup.py b/Lib/test/test_cppext/setup.py index a3eec1c67e15..2d9052a6b879 100644 --- a/Lib/test/test_cppext/setup.py +++ b/Lib/test/test_cppext/setup.py @@ -59,7 +59,7 @@ def main(): else: cppflags.append(f'-std={std}') - if limited or (std != 'c++03'): + if limited or (std != 'c++03') and not internal: # See CPPFLAGS_PEDANTIC docstring cppflags.extend(CPPFLAGS_PEDANTIC)