uops = get_opnames(ex)
self.assertIn(self.guard_is_false, uops)
+ def test_branch_coincident_targets(self):
+ # test for gh-144681: https://github.com/python/cpython/issues/144681
+ def testfunc(n):
+ for _ in range(n):
+ r = [x for x in range(10) if [].append(x) or True]
+ return r
+
+ res = testfunc(TIER2_THRESHOLD)
+ ex = get_first_executor(testfunc)
+
+ self.assertEqual(res, list(range(10)))
+ self.assertIsNotNone(ex)
+
def test_for_iter_tier_two(self):
class MyIter:
def __init__(self, n):
_Py_CODEUNIT *computed_next_instr = computed_next_instr_without_modifiers + (computed_next_instr_without_modifiers->op.code == NOT_TAKEN);
_Py_CODEUNIT *computed_jump_instr = computed_next_instr_without_modifiers + oparg;
assert(next_instr == computed_next_instr || next_instr == computed_jump_instr);
- int jump_happened = computed_jump_instr == next_instr;
- assert(jump_happened == (target_instr[1].cache & 1));
+ int jump_happened = target_instr[1].cache & 1;
+ assert(jump_happened ? (next_instr == computed_jump_instr) : (next_instr == computed_next_instr));
uint32_t uopcode = BRANCH_TO_GUARD[opcode - POP_JUMP_IF_FALSE][jump_happened];
ADD_TO_TRACE(uopcode, 0, 0, INSTR_IP(jump_happened ? computed_next_instr : computed_jump_instr, old_code));
break;