8000 Fix: Correct target_bb_id in jump array (#60) · oraluben/cpython@22580dc · GitHub
[go: up one dir, main page]

Skip to content

Commit 22580dc

Browse files
authored
Fix: Correct target_bb_id in jump array (python#60)
* Fix: Correct target_bb_id in jump array * Doc: Updated doc for add_metadata_to_jump_2d_array
1 parent e44bf1c commit 22580dc

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

Python/tier2.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1509,7 +1509,7 @@ IS_BACKWARDS_JUMP_TARGET(PyCodeObject *co, _Py_CODEUNIT *curr)
15091509
* This happens when a BB is a backwards jump target.
15101510
*
15111511
* @param t2_info Tier 2 info of that code object.
1512-
* @param meta The BB metadata to add.
1512+
* @param target_bb_id The target bb's id
15131513
* @param backwards_jump_target Offset (in number of codeunits) from start of code object where
15141514
* the backwards jump target is located.
15151515
*
@@ -1518,7 +1518,7 @@ IS_BACKWARDS_JUMP_TARGET(PyCodeObject *co, _Py_CODEUNIT *curr)
15181518
* @return 1 for error, 0 for success.
15191519
*/
15201520
static inline int
1521-
add_metadata_to_jump_2d_array(_PyTier2Info *t2_info, _PyTier2BBMetadata *meta,
1521+
add_metadata_to_jump_2d_array(_PyTier2Info *t2_info, int target_bb_id,
15221522
int backwards_jump_target, _PyTier2TypeContext *starting_context,
15231523
_Py_CODEUNIT *tier1_start)
15241524
{
@@ -1545,8 +1545,7 @@ add_metadata_to_jump_2d_array(_PyTier2Info *t2_info, _PyTier2BBMetadata *meta,
15451545
#if BB_DEBUG
15461546
fprintf(stderr, "Added jump id %d as jump target\n", meta->id);
15471547
#endif
1548-
t2_info->backward_jump_target_bb_pairs[backward_jump_offset_index][jump_i].id =
1549-
meta->id;
1548+
t2_info->backward_jump_target_bb_pairs[backward_jump_offset_index][jump_i].id = target_bb_id;
15501549
t2_info->backward_jump_target_bb_pairs[backward_jump_offset_index][jump_i].start_type_context = starting_context;
15511550
t2_info->backward_jump_target_bb_pairs[backward_jump_offset_index][jump_i].tier1_start = tier1_start;
15521551
found = true;
@@ -2139,7 +2138,7 @@ _PyTier2_Code_DetectAndEmitBB(
21392138
assert(start_type_context_copy != NULL);
21402139
assert(virtual_tier1_start != NULL);
21412140
assert(metas_size >= 0);
2142-
if (add_metadata_to_jump_2d_array(t2_info, metas[metas_size],
2141+
if (add_metadata_to_jump_2d_array(t2_info, co->_tier2_info->bb_data_curr,
21432142
backwards_jump_target_offset, start_type_context_copy,
21442143
virtual_tier1_start) < 0) {
21452144
_PyTier2TypeContext_Free(starting_type_context);

tier2_test.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,19 @@ def f(a, b):
645645
insts = dis.get_instructions(test_typeprop1, tier2=True)
646646
assert [x.opname for x in insts].count("BINARY_OP_ADD_INT_REST") == 2
647647

648+
with TestInfo("Correct target_bb_id in jump table"):
649+
# See https://github.com/pylbbv/pylbbv/issues/43 for more information
650+
651+
def f(x, l):
652+
for i in l:
653+
if i:
654+
break
655+
x+x
656+
657+
trigger_tier2(f, (1,[False, True],))
658+
659+
# As long as it doesn't crash, everything's good
660+
648661
print("Regression tests...Done!")
649662

650663
print("Tests completed ^-^")

0 commit comments

Comments
 (0)
0