From 47d7eba889bc03884744f978f5f8612380363332 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 28 Aug 2023 10:17:00 -0700 Subject: gh-108487: Move assert(self != NULL) down beyond DEOPT_IF() (#108510) --- .../Core and Builtins/2023-08-26-04-31-01.gh-issue-108487.1Gbr9k.rst | 1 + Python/bytecodes.c | 2 +- Python/generated_cases.c.h | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2023-08-26-04-31-01.gh-issue-108487.1Gbr9k.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-08-26-04-31-01.gh-issue-108487.1Gbr9k.rst b/Misc/NEWS.d/next/Core and Builtins/2023-08-26-04-31-01.gh-issue-108487.1Gbr9k.rst new file mode 100644 index 0000000..277b7c0 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-08-26-04-31-01.gh-issue-108487.1Gbr9k.rst @@ -0,0 +1 @@ +Move an assert that would cause a spurious crash in a devious case that should only trigger deoptimization. diff --git a/Python/bytecodes.c b/Python/bytecodes.c index a55460a..93926c0 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -3346,9 +3346,9 @@ dummy_func( inst(CALL_NO_KW_LIST_APPEND, (unused/1, unused/2, callable, self, args[oparg] -- unused)) { ASSERT_KWNAMES_IS_NULL(); assert(oparg == 1); - assert(self != NULL); PyInterpreterState *interp = tstate->interp; DEOPT_IF(callable != interp->callable_cache.list_append, CALL); + assert(self != NULL); DEOPT_IF(!PyList_Check(self), CALL); STAT_INC(CALL, hit); if (_PyList_AppendTakeRef((PyListObject *)self, args[0]) < 0) { diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 3f46f1a..5940c18 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -4412,9 +4412,9 @@ callable = stack_pointer[-2 - oparg]; ASSERT_KWNAMES_IS_NULL(); assert(oparg == 1); - assert(self != NULL); PyInterpreterState *interp = tstate->interp; DEOPT_IF(callable != interp->callable_cache.list_append, CALL); + assert(self != NULL); DEOPT_IF(!PyList_Check(self), CALL); STAT_INC(CALL, hit); if (_PyList_AppendTakeRef((PyListObject *)self, args[0]) < 0) { -- cgit v0.12