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.
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
--- /dev/null
+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.