Skip to content

Main segfaults importing _pyrepl with low value for JUMP_BACKWARD_INITIAL_VALUE#137218

@devdanzin

Description

@devdanzin

Crash report

What happened?

Edit: I'm seeing this crash even without patching JUMP_BACKWARD_INITIAL_VALUE. Will try to figure out a MRE for unpatched crash.

If we #define JUMP_BACKWARD_INITIAL_VALUE 702 (or lower) in Include/internal/pycore_backoff.h, a debug JIT build will segfault when trying to run to the new REPL. Can also be triggered by:

python -m _pyrepl 

Using some other modules like random or http.server doesn't crash.

An even lower value like 344 will segfault earlier, during the build process.

This happens since #136307 landed in 377b787.

The diff below, which is part of that commit, is enough to cause the segfault together with defining JUMP_BACKWARD_INITIAL_VALUE to 702 or lower:

diff --git a/Include/internal/pycore_global_objects_fini_generated.h b/Include/internal/pycore_global_objects_fini_generated.h index 493377b4c25..5e7dda3a371 100644 --- a/Include/internal/pycore_global_objects_fini_generated.h+++ b/Include/internal/pycore_global_objects_fini_generated.h@@ -1005,6 +1005,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp){_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(imag)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(importlib)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(in_fd)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(include_aliases)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(incoming)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(index)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(indexgroup)); diff --git a/Include/internal/pycore_global_strings.h b/Include/internal/pycore_global_strings.h index 5dfea2f479d..6908cbf78f3 100644 --- a/Include/internal/pycore_global_strings.h+++ b/Include/internal/pycore_global_strings.h@@ -496,6 +496,7 @@ struct _Py_global_strings{STRUCT_FOR_ID(imag) STRUCT_FOR_ID(importlib) STRUCT_FOR_ID(in_fd) + STRUCT_FOR_ID(include_aliases) STRUCT_FOR_ID(incoming) STRUCT_FOR_ID(index) STRUCT_FOR_ID(indexgroup) diff --git a/Include/internal/pycore_runtime_init_generated.h b/Include/internal/pycore_runtime_init_generated.h index 85ced09d29d..da2ed7422c9 100644 --- a/Include/internal/pycore_runtime_init_generated.h+++ b/Include/internal/pycore_runtime_init_generated.h@@ -1003,6 +1003,7 @@ extern "C"{INIT_ID(imag), \ INIT_ID(importlib), \ INIT_ID(in_fd), \ + INIT_ID(include_aliases), \ INIT_ID(incoming), \ INIT_ID(index), \ INIT_ID(indexgroup), \ diff --git a/Include/internal/pycore_unicodeobject_generated.h b/Include/internal/pycore_unicodeobject_generated.h index 6018d98d156..b1f411945e7 100644 --- a/Include/internal/pycore_unicodeobject_generated.h+++ b/Include/internal/pycore_unicodeobject_generated.h@@ -1772,6 +1772,10 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp){_PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(include_aliases);+ _PyUnicode_InternStatic(interp, &string);+ assert(_PyUnicode_CheckConsistency(string, 1));+ assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(incoming); _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1));

Backtrace:

Program received signal SIGSEGV, Segmentation fault. _PyUnicode_Equal (str1=0x555555c88c18 <_PyRuntime+96088>, str2=0x555555c88c50 <_PyRuntime+96144>) at ./Include/object.h:815 815 return ((flags & feature) != 0); #0 _PyUnicode_Equal (str1=0x555555c88c18 <_PyRuntime+96088>, str2=0x555555c88c50 <_PyRuntime+96144>) at ./Include/object.h:815 #1 0x00007ffff731df15 in ?? () #2 0x00007ffff764a751 in ?? () #3 0x0000555555cc2230 in _PyRuntime () #4 0x00007fffffffbfc0 in ?? () #5 0x00007ffff7317017 in ?? () #6 0x0000555556053f60 in ?? () #7 0x00007ffff7e2a9c8 in ?? () #8 0x00007ffff7317000 in ?? () #9 0x00007ffff7e2a910 in ?? () #10 0x0000555555cc2230 in _PyRuntime () #11 0x00005555557cdcf9 in _PyEval_EvalFrameDefault (tstate=<optimized out>, frame=0x58, throwflag=1291845632) at Python/generated_cases.c.h:7796 Backtrace stopped: previous frame inner to this frame (corrupt stack?) 

Here's the output from running PYTHON_LLTRACE=4 ./python -m _pyrepl:
lltrace_crash.txt
And here for PYTHON_OPT_DEBUG=4 ./python -m _pyrepl:
opt_debug_crash.txt

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Output from running 'python -VV' on the command line:

Python 3.15.0a0 (heads/main-dirty:d7e12a362a2, Jul 29 2025, 18:24:07) [GCC 13.3.0]

Linked PRs

Metadata

Metadata

Labels

buildThe build process and cross-buildinterpreter-core(Objects, Python, Grammar, and Parser dirs)topic-JITtype-crashA hard crash of the interpreter, possibly with a core dump

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions