diff options
author | Guido van Rossum <guido@python.org> | 2023-08-24 12:10:51 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-24 19:10:51 +0000 |
commit | 88941d665fc6b345f38b9147a7321e40019964d5 (patch) | |
tree | 90c5be62832700767b7183d9b8891f1b8372d20c /Python/generated_cases.c.h | |
parent | c494fb333b57bdf43fc90189fc29a00c293b2987 (diff) | |
download | cpython-88941d665fc6b345f38b9147a7321e40019964d5.tar.gz cpython-88941d665fc6b345f38b9147a7321e40019964d5.zip |
gh-106581: Fix two bugs in the code generator's copy optimization (#108380)
I was comparing the last preceding poke with the *last* peek,
rather than the *first* peek.
Unfortunately this bug obscured another bug:
When the last preceding poke is UNUSED, the first peek disappears,
leaving the variable unassigned. This is how I fixed it:
- Rename CopyEffect to CopyItem.
- Change CopyItem to contain StackItems instead of StackEffects.
- Update those StackItems when adjusting the manager higher or lower.
- Assert that those StackItems' offsets are equivalent.
- Other clever things.
---------
Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
Diffstat (limited to 'Python/generated_cases.c.h')
-rw-r--r-- | Python/generated_cases.c.h | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index f6322df566c..1724d112317 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -3833,7 +3833,6 @@ DEOPT_IF(code->co_argcount != oparg + (self_or_null != NULL), CALL); } // _CHECK_STACK_SPACE - callable = stack_pointer[-2 - oparg]; { PyFunctionObject *func = (PyFunctionObject *)callable; PyCodeObject *code = (PyCodeObject *)func->func_code; @@ -3841,8 +3840,6 @@ } // _INIT_CALL_PY_EXACT_ARGS args = stack_pointer - oparg; - self_or_null = stack_pointer[-1 - oparg]; - callable = stack_pointer[-2 - oparg]; { int argcount = oparg; if (self_or_null != NULL) { |