diff options
author | Mark Shannon <mark@hotpy.org> | 2024-01-15 11:41:06 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-15 11:41:06 (GMT) |
commit | ac10947ba79a15bfdaa3ca92c6864214648ab364 (patch) | |
tree | 1853aea09cbd74fdaf1d4d3b999ba250f43ff6ae /Python/executor_cases.c.h | |
parent | 2010d45327128594aed332befa687c8aead010bc (diff) | |
download | cpython-ac10947ba79a15bfdaa3ca92c6864214648ab364.zip cpython-ac10947ba79a15bfdaa3ca92c6864214648ab364.tar.gz cpython-ac10947ba79a15bfdaa3ca92c6864214648ab364.tar.bz2 |
GH-112354: `_GUARD_IS_TRUE_POP` side-exits to target the next instruction, not themselves. (GH-114078)
Diffstat (limited to 'Python/executor_cases.c.h')
-rw-r--r-- | Python/executor_cases.c.h | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 6060beb..2b4399b 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -3318,35 +3318,38 @@ case _GUARD_IS_TRUE_POP: { PyObject *flag; flag = stack_pointer[-1]; - if (Py_IsFalse(flag)) goto deoptimize; - assert(Py_IsTrue(flag)); stack_pointer += -1; + if (!Py_IsTrue(flag)) goto deoptimize; + assert(Py_IsTrue(flag)); break; } case _GUARD_IS_FALSE_POP: { PyObject *flag; flag = stack_pointer[-1]; - if (Py_IsTrue(flag)) goto deoptimize; - assert(Py_IsFalse(flag)); stack_pointer += -1; + if (!Py_IsFalse(flag)) goto deoptimize; + assert(Py_IsFalse(flag)); break; } case _GUARD_IS_NONE_POP: { PyObject *val; val = stack_pointer[-1]; - if (!Py_IsNone(val)) goto deoptimize; stack_pointer += -1; + if (!Py_IsNone(val)) { + Py_DECREF(val); + if (1) goto deoptimize; + } break; } case _GUARD_IS_NOT_NONE_POP: { PyObject *val; val = stack_pointer[-1]; + stack_pointer += -1; if (Py_IsNone(val)) goto deoptimize; Py_DECREF(val); - stack_pointer += -1; break; } |