mirror of https://github.com/python/cpython
gh-117180: Complete call sequence when trace stack overflow (GH-117184)
--------- Co-authored-by: Peter Lazorchak <lazorchakp@gmail.com> Co-authored-by: Guido van Rossum <gvanrossum@users.noreply.github.com> Co-authored-by: Guido van Rossum <gvanrossum@gmail.com>
This commit is contained in:
parent
f11d0d8be8
commit
6c83352bfe
|
@ -955,6 +955,32 @@ class TestUopsOptimization(unittest.TestCase):
|
|||
_, ex = self._run_with_optimizer(testfunc, 16)
|
||||
self.assertIsNone(ex)
|
||||
|
||||
def test_many_nested(self):
|
||||
# overflow the trace_stack
|
||||
def dummy_a(x):
|
||||
return x
|
||||
def dummy_b(x):
|
||||
return dummy_a(x)
|
||||
def dummy_c(x):
|
||||
return dummy_b(x)
|
||||
def dummy_d(x):
|
||||
return dummy_c(x)
|
||||
def dummy_e(x):
|
||||
return dummy_d(x)
|
||||
def dummy_f(x):
|
||||
return dummy_e(x)
|
||||
def dummy_g(x):
|
||||
return dummy_f(x)
|
||||
def dummy_h(x):
|
||||
return dummy_g(x)
|
||||
def testfunc(n):
|
||||
a = 0
|
||||
for _ in range(n):
|
||||
a += dummy_h(n)
|
||||
return a
|
||||
|
||||
self._run_with_optimizer(testfunc, 32)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -476,6 +476,7 @@ BRANCH_TO_GUARD[4][2] = {
|
|||
if (trace_stack_depth >= TRACE_STACK_SIZE) { \
|
||||
DPRINTF(2, "Trace stack overflow\n"); \
|
||||
OPT_STAT_INC(trace_stack_overflow); \
|
||||
ADD_TO_TRACE(uop, oparg, operand, target); \
|
||||
ADD_TO_TRACE(_EXIT_TRACE, 0, 0, 0); \
|
||||
goto done; \
|
||||
} \
|
||||
|
|
Loading…
Reference in New Issue