summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2023-07-29-22-01-30.gh-issue-104584.tINuoA.rst2
-rw-r--r--Python/optimizer.c3
2 files changed, 4 insertions, 1 deletions
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-07-29-22-01-30.gh-issue-104584.tINuoA.rst b/Misc/NEWS.d/next/Core and Builtins/2023-07-29-22-01-30.gh-issue-104584.tINuoA.rst
new file mode 100644
index 0000000..0595248
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2023-07-29-22-01-30.gh-issue-104584.tINuoA.rst
@@ -0,0 +1,2 @@
+Fix an issue which caused incorrect inline caches to be read when running
+with :envvar:`PYTHONUOPS` or :option:`-X uops <-X>` enabled.
diff --git a/Python/optimizer.c b/Python/optimizer.c
index 09120c3..238ab02 100644
--- a/Python/optimizer.c
+++ b/Python/optimizer.c
@@ -579,7 +579,8 @@ pop_jump_if_bool:
for (int i = 0; i < nuops; i++) {
oparg = orig_oparg;
uint64_t operand = 0;
- int offset = expansion->uops[i].offset;
+ // Add one to account for the actual opcode/oparg pair:
+ int offset = expansion->uops[i].offset + 1;
switch (expansion->uops[i].size) {
case OPARG_FULL:
if (extras && OPCODE_HAS_JUMP(opcode)) {