mirror of https://github.com/python/cpython
gh-118414: Fix assertion in YIELD_VALUE when tracing lines or instrs (#118683)
This commit is contained in:
parent
b2cd54a4fb
commit
0d9148823d
|
@ -656,6 +656,17 @@ class LineMonitoringTest(MonitoringTestBase, unittest.TestCase):
|
|||
|
||||
self.check_lines(func2, [1,2,3,4,5,6])
|
||||
|
||||
def test_generator_with_line(self):
|
||||
|
||||
def f():
|
||||
def a():
|
||||
yield
|
||||
def b():
|
||||
yield from a()
|
||||
next(b())
|
||||
|
||||
self.check_lines(f, [1,3,5,4,2,4])
|
||||
|
||||
class TestDisable(MonitoringTestBase, unittest.TestCase):
|
||||
|
||||
def gen(self, cond):
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Add instrumented opcodes to YIELD_VALUE assertion for tracing cases.
|
|
@ -1121,7 +1121,9 @@ dummy_func(
|
|||
/* We don't know which of these is relevant here, so keep them equal */
|
||||
assert(INLINE_CACHE_ENTRIES_SEND == INLINE_CACHE_ENTRIES_FOR_ITER);
|
||||
#if TIER_ONE
|
||||
assert(_PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND ||
|
||||
assert(frame->instr_ptr->op.code == INSTRUMENTED_LINE ||
|
||||
frame->instr_ptr->op.code == INSTRUMENTED_INSTRUCTION ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == FOR_ITER ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == INTERPRETER_EXIT ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == ENTER_EXECUTOR);
|
||||
|
|
|
@ -1137,7 +1137,9 @@
|
|||
/* We don't know which of these is relevant here, so keep them equal */
|
||||
assert(INLINE_CACHE_ENTRIES_SEND == INLINE_CACHE_ENTRIES_FOR_ITER);
|
||||
#if TIER_ONE
|
||||
assert(_PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND ||
|
||||
assert(frame->instr_ptr->op.code == INSTRUMENTED_LINE ||
|
||||
frame->instr_ptr->op.code == INSTRUMENTED_INSTRUCTION ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == FOR_ITER ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == INTERPRETER_EXIT ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == ENTER_EXECUTOR);
|
||||
|
|
|
@ -6223,7 +6223,9 @@
|
|||
/* We don't know which of these is relevant here, so keep them equal */
|
||||
assert(INLINE_CACHE_ENTRIES_SEND == INLINE_CACHE_ENTRIES_FOR_ITER);
|
||||
#if TIER_ONE
|
||||
assert(_PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND ||
|
||||
assert(frame->instr_ptr->op.code == INSTRUMENTED_LINE ||
|
||||
frame->instr_ptr->op.code == INSTRUMENTED_INSTRUCTION ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == SEND ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == FOR_ITER ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == INTERPRETER_EXIT ||
|
||||
_PyOpcode_Deopt[frame->instr_ptr->op.code] == ENTER_EXECUTOR);
|
||||
|
|
Loading…
Reference in New Issue