Title: JIT: Assertion `next_instr->op.code == STORE_FAST` failed in `_PyEval_EvalFrameDefault` · Issue #143820 · python/cpython · GitHub
Open Graph Title: JIT: Assertion `next_instr->op.code == STORE_FAST` failed in `_PyEval_EvalFrameDefault` · Issue #143820 · python/cpython
X Title: JIT: Assertion `next_instr->op.code == STORE_FAST` failed in `_PyEval_EvalFrameDefault` · Issue #143820 · python/cpython
Description: Crash report What happened? It's possible to cause an abort in a patched JIT build by running the code below. Necessary patch: diff --git a/Include/internal/pycore_backoff.h b/Include/internal/pycore_backoff.h index fadd11f04ec..3e779a14...
Open Graph Description: Crash report What happened? It's possible to cause an abort in a patched JIT build by running the code below. Necessary patch: diff --git a/Include/internal/pycore_backoff.h b/Include/internal/pyco...
X Description: Crash report What happened? It's possible to cause an abort in a patched JIT build by running the code below. Necessary patch: diff --git a/Include/internal/pycore_backoff.h b/Include/internal/...
Opengraph URL: https://github.com/python/cpython/issues/143820
X: @github
Domain: redirect.github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"JIT: Assertion `next_instr-\u003eop.code == STORE_FAST` failed in `_PyEval_EvalFrameDefault`","articleBody":"# Crash report\n\n### What happened?\n\nIt's possible to cause an abort in a patched JIT build by running the code below.\n\nNecessary patch:\n```diff\ndiff --git a/Include/internal/pycore_backoff.h b/Include/internal/pycore_backoff.h\nindex fadd11f04ec..3e779a141af 100644\n--- a/Include/internal/pycore_backoff.h\n+++ b/Include/internal/pycore_backoff.h\n@@ -125,7 +125,7 @@ trigger_backoff_counter(void)\n // For example, 4095 does not work for the nqueens benchmark on pyperformance\n // as we always end up tracing the loop iteration's\n // exhaustion iteration. Which aborts our current tracer.\n-#define JUMP_BACKWARD_INITIAL_VALUE 4000\n+#define JUMP_BACKWARD_INITIAL_VALUE 63\n #define JUMP_BACKWARD_INITIAL_BACKOFF 6\n static inline _Py_BackoffCounter\n initial_jump_backoff_counter(_PyPolicy *policy)\n@@ -139,7 +139,7 @@ initial_jump_backoff_counter(_PyPolicy *policy)\n * Must be larger than ADAPTIVE_COOLDOWN_VALUE,\n * otherwise when a side exit warms up we may construct\n * a new trace before the Tier 1 code has properly re-specialized. */\n-#define SIDE_EXIT_INITIAL_VALUE 4000\n+#define SIDE_EXIT_INITIAL_VALUE 63\n #define SIDE_EXIT_INITIAL_BACKOFF 6\n\n static inline _Py_BackoffCounter\n```\n\n\u003cdetails\u003e\u003csummary\u003eMRE\u003c/summary\u003e\n\u003cp\u003e\n\n```python\nimport sys\nimport random\n\nint_v1 = 981679\nint_v2 = -3791744241805517\nany_v3 = 939.217\n\ndef f1(): int_v1 ^ int_v1\n\nfor i_f1 in range(300):\n f1()\n\ndef f2():\n class Int(int):\n def __index__(self):...\n\n inf = float('inf')\n nzero = -0\n zero = 0.0\n dummy = 0\n print('', file=sys.stderr)\n\n def f_0_dc_6103(p): return p + 1\n def f_1_dc_6103(p): return f_0_dc_6103(p) + 1\n def f_2_dc_6103(p): return f_1_dc_6103(p) + 1\n def f_3_dc_6103(p): return f_2_dc_6103(p) + 1\n def f_4_dc_6103(p): return f_3_dc_6103(p) + 1\n def f_5_dc_6103(p): return f_4_dc_6103(p) + 1\n def f_6_dc_6103(p): return f_5_dc_6103(p) + 1\n def f_7_dc_6103(p): return f_6_dc_6103(p) + 1\n def f_8_dc_6103(p): return f_7_dc_6103(p) + 1\n def f_9_dc_6103(p): return f_8_dc_6103(p) + 1\n\n if inf == inf: dummy += 1\n s = ''\n try:\n for _ in range(10):\n s += ''\n s += 'y'\n except Exception: pass\n int_v1 ^ int_v1\n int_v1 ^ int_v1\n int_v1 ^ int_v1\n int_v2 - int_v1\n int_v2 - int_v1\n int_v2 - int_v1\n int_v2 - int_v1\n int_v2 - int_v1\n not any_v3\n not any_v3\n not any_v3\n\nfor i_f2 in range(300):\n f2()\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\u003csummary\u003eBacktrace\u003c/summary\u003e\n\u003cp\u003e\n\n```\npython: Python/generated_cases.c.h:416: PyObject *_PyEval_EvalFrameDefault(PyThreadState *, _PyInterpreterFrame *, int): Assertion `next_instr-\u003eop.code == STORE_FAST' failed.\n\nProgram received signal SIGABRT, Aborted.\n\n#0 __pthread_kill_implementation (threadid=\u003coptimized out\u003e, signo=6, no_tid=0) at ./nptl/pthread_kill.c:44\n#1 __pthread_kill_internal (threadid=\u003coptimized out\u003e, signo=6) at ./nptl/pthread_kill.c:89\n#2 __GI___pthread_kill (threadid=\u003coptimized out\u003e, signo=signo@entry=6) at ./nptl/pthread_kill.c:100\n#3 0x00007ffff7c45e2e in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26\n#4 0x00007ffff7c28888 in __GI_abort () at ./stdlib/abort.c:77\n#5 0x00007ffff7c287f0 in __assert_fail_base (fmt=\u003coptimized out\u003e, assertion=\u003coptimized out\u003e, file=\u003coptimized out\u003e, line=\u003coptimized out\u003e, function=\u003coptimized out\u003e) at ./assert/assert.c:118\n#6 0x00007ffff7c3c19f in __assert_fail (assertion=\u003coptimized out\u003e, file=\u003coptimized out\u003e, line=\u003coptimized out\u003e, function=\u003coptimized out\u003e) at ./assert/assert.c:127\n#7 0x0000555555ec01ec in _PyEval_EvalFrameDefault (tstate=\u003coptimized out\u003e, frame=\u003coptimized out\u003e, throwflag=\u003coptimized out\u003e) at Python/generated_cases.c.h:416\n#8 0x0000555555e72e68 in _PyEval_EvalFrame (tstate=0x555556ed3030 \u003c_PyRuntime+359408\u003e, frame=0x7e8ff6de5220, throwflag=0) at ./Include/internal/pycore_ceval.h:118\n#9 _PyEval_Vector (tstate=\u003coptimized out\u003e, func=\u003coptimized out\u003e, locals=\u003coptimized out\u003e, args=\u003coptimized out\u003e, argcount=\u003coptimized out\u003e, kwnames=0x0) at Python/ceval.c:2541\n#10 0x0000555555e72885 in PyEval_EvalCode (co=\u003coptimized out\u003e, globals=\u003coptimized out\u003e, locals=0x7c7ff6e863c0) at Python/ceval.c:1005\n#11 0x000055555649d01f in run_eval_code_obj (tstate=tstate@entry=0x555556ed3030 \u003c_PyRuntime+359408\u003e, co=co@entry=0x7d2ff6dffa10, globals=globals@entry=0x7c7ff6e863c0,\n locals=locals@entry=0x7c7ff6e863c0) at Python/pythonrun.c:1366\n#12 0x000055555649c1ec in run_mod (mod=\u003coptimized out\u003e, filename=\u003coptimized out\u003e, globals=\u003coptimized out\u003e, locals=\u003coptimized out\u003e, flags=\u003coptimized out\u003e, arena=\u003coptimized out\u003e,\n interactive_src=\u003coptimized out\u003e, generate_new_source=\u003coptimized out\u003e) at Python/pythonrun.c:1469\n#13 0x00005555564967ed in pyrun_file (fp=fp@entry=0x7d4ff6defa80, filename=filename@entry=0x7cdff6defc50, start=start@entry=257, globals=globals@entry=0x7c7ff6e863c0,\n locals=locals@entry=0x7c7ff6e863c0, closeit=closeit@entry=1, flags=0x7bfff5c1e910) at Python/pythonrun.c:1294\n#14 0x000055555649434d in _PyRun_SimpleFileObject (fp=\u003coptimized out\u003e, filename=\u003coptimized out\u003e, closeit=\u003coptimized out\u003e, flags=\u003coptimized out\u003e) at Python/pythonrun.c:518\n#15 0x00005555564936be in _PyRun_AnyFileObject (fp=fp@entry=0x7d4ff6defa80, filename=filename@entry=0x7cdff6defc50, closeit=closeit@entry=1, flags=flags@entry=0x7bfff5c1e910)\n at Python/pythonrun.c:81\n#16 0x000055555650ff2b in pymain_run_file_obj (program_name=0x7caff6e230d0, filename=0x7cdff6defc50, skip_source_first_line=0) at Modules/main.c:410\n#17 pymain_run_file (config=0x555556e9e0f8 \u003c_PyRuntime+142520\u003e) at Modules/main.c:429\n#18 0x000055555650dff4 in pymain_run_python (exitcode=0x7bfff5c1e500) at Modules/main.c:691\n#19 Py_RunMain () at Modules/main.c:772\n#20 0x000055555650eef7 in pymain_main (args=\u003coptimized out\u003e) at Modules/main.c:802\n#21 0x000055555650f068 in Py_BytesMain (argc=\u003coptimized out\u003e, argv=0x7fffffffdb78) at Modules/main.c:826\n#22 0x00007ffff7c2a575 in __libc_start_call_main (main=main@entry=0x55555591ec40 \u003cmain\u003e, argc=argc@entry=2, argv=argv@entry=0x7fffffffdb78) at ../sysdeps/nptl/libc_start_call_main.h:58\n#23 0x00007ffff7c2a628 in __libc_start_main_impl (main=0x55555591ec40 \u003cmain\u003e, argc=2, argv=0x7fffffffdb78, init=\u003coptimized out\u003e, fini=\u003coptimized out\u003e, rtld_fini=\u003coptimized out\u003e,\n stack_end=0x7fffffffdb68) at ../csu/libc-start.c:360\n#24 0x00005555558354f5 in _start ()\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\nOutput from running with `PYTHON_LLTRACE=4 PYTHON_OPT_DEBUG=4`:\n[next_instr_abort_lltrace_opt_debug.txt](https://github.com/user-attachments/files/24602506/next_instr_abort_lltrace_opt_debug.txt)\n\nFound using [lafleur](https://github.com/devdanzin/lafleur/).\n\n\n### CPython versions tested on:\n\nCPython main branch\n\n### Operating systems tested on:\n\nLinux\n\n### Output from running 'python -VV' on the command line:\n\nPython 3.15.0a3+ (heads/main-dirty:fca7fec88ce, Jan 13 2026, 21:37:22) [Clang 21.1.2 (2ubuntu6)]\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-143894\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/devdanzin","@type":"Person","name":"devdanzin"},"datePublished":"2026-01-14T00:48:02.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/143820/cpython/issues/143820"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:6b9f31db-9ec1-3968-a047-15111754bf97 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B222:80349:F07268:1410DAF:6969A38A |
| html-safe-nonce | 51a4d0dc8fe51027bb15b4dc64b9a4c2d5fd447c24149d6cfc3af9db4fa1e418 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCMjIyOjgwMzQ5OkYwNzI2ODoxNDEwREFGOjY5NjlBMzhBIiwidmlzaXRvcl9pZCI6IjcwNzA5MTkxNzM1OTEzNzY3NzgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 92db44af18dbefc5766f82fb38292c1dfc9fc0020b3cc1423078aaea8c2a79ce |
| hovercard-subject-tag | issue:3811087137 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/143820/issue_layout |
| twitter:image | https://opengraph.githubassets.com/5c9d678a8ff88a28c31bc3ef9b9747483002b6b6a598da1d5b9643c704dc83c9/python/cpython/issues/143820 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/5c9d678a8ff88a28c31bc3ef9b9747483002b6b6a598da1d5b9643c704dc83c9/python/cpython/issues/143820 |
| og:image:alt | Crash report What happened? It's possible to cause an abort in a patched JIT build by running the code below. Necessary patch: diff --git a/Include/internal/pycore_backoff.h b/Include/internal/pyco... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | devdanzin |
| hostname | github.com |
| expected-hostname | github.com |
| None | 24c4c97a2d520cb286b35e1a4c22d7a4df3c26a2fa28dd7cdf0e65db327b4de7 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 124667f43168afb6c9c03b7c02eb5b1d2e1be3d9 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width