diff options
author | Brett Cannon <brett@python.org> | 2023-11-17 23:52:11 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-17 23:52:11 (GMT) |
commit | f489ace9e7aaa29b5a83b0a74a247abc8b032910 (patch) | |
tree | 686e4f0d2bb101e8619222b6e83bca2d889243b3 | |
parent | dabc0d77b21d8cc619a2ffcf859f684b6c1c7020 (diff) | |
download | cpython-f489ace9e7aaa29b5a83b0a74a247abc8b032910.zip cpython-f489ace9e7aaa29b5a83b0a74a247abc8b032910.tar.gz cpython-f489ace9e7aaa29b5a83b0a74a247abc8b032910.tar.bz2 |
GH-111808: Make the default value for `test.support.infinite_recursion()` conditional on compiler optimizations (GH-112223)
Co-authored-by: Victor Stinner <vstinner@python.org>
-rw-r--r-- | Lib/test/support/__init__.py | 12 | ||||
-rw-r--r-- | Lib/test/test_richcmp.py | 2 | ||||
-rw-r--r-- | Lib/test/test_typing.py | 2 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Tests/2023-11-17-15-20-41.gh-issue-111808.jtIayt.rst | 4 |
4 files changed, 16 insertions, 4 deletions
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index d476ba5..bb9f998 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -2120,13 +2120,21 @@ def set_recursion_limit(limit): finally: sys.setrecursionlimit(original_limit) -def infinite_recursion(max_depth=100): +def infinite_recursion(max_depth=None): """Set a lower limit for tests that interact with infinite recursions (e.g test_ast.ASTHelpers_Test.test_recursion_direct) since on some debug windows builds, due to not enough functions being inlined the stack size might not handle the default recursion limit (1000). See bpo-11105 for details.""" - if max_depth < 3: + if max_depth is None: + if not python_is_optimized() or Py_DEBUG: + # Python built without compiler optimizations or in debug mode + # usually consumes more stack memory per function call. + # Unoptimized number based on what works under a WASI debug build. + max_depth = 50 + else: + max_depth = 100 + elif max_depth < 3: raise ValueError("max_depth must be at least 3, got {max_depth}") depth = get_recursion_depth() depth = max(depth - 1, 1) # Ignore infinite_recursion() frame. diff --git a/Lib/test/test_richcmp.py b/Lib/test/test_richcmp.py index 5f449cd..6fb31c8 100644 --- a/Lib/test/test_richcmp.py +++ b/Lib/test/test_richcmp.py @@ -221,7 +221,7 @@ class MiscTest(unittest.TestCase): self.assertRaises(Exc, func, Bad()) @support.no_tracing - @support.infinite_recursion(25) + @support.infinite_recursion() def test_recursion(self): # Check that comparison for recursive objects fails gracefully from collections import UserList diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 8681e7e..2b5f34b 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -5621,7 +5621,7 @@ class ForwardRefTests(BaseTestCase): def cmp(o1, o2): return o1 == o2 - with infinite_recursion(25): # magic number, small but reasonable + with infinite_recursion(): r1 = namespace1() r2 = namespace2() self.assertIsNot(r1, r2) diff --git a/Misc/NEWS.d/next/Tests/2023-11-17-15-20-41.gh-issue-111808.jtIayt.rst b/Misc/NEWS.d/next/Tests/2023-11-17-15-20-41.gh-issue-111808.jtIayt.rst new file mode 100644 index 0000000..36151d4 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-11-17-15-20-41.gh-issue-111808.jtIayt.rst @@ -0,0 +1,4 @@ +Make the default value of ``test.support.infinite_recursion()`` to be +conditional based on whether optimizations were used when compiling the +interpreter. This helps with platforms like WASI whose stack size is greatly +restricted in debug builds. |