Skip to content

Unrecoverable stack overflow with infinite recursion on macOS #131543

Description

@tomMoral

Crash report

What happened?

Hello,

In the CI of cloudpickle, we encountered a crash of the python interpreter due to a stack overflow with python3.14.0a6.
Reverting to python3.14.0a5 fixes the error.

This might be related to GH-130398, with a bad detection of the limit of the stack?
I could not test it locally as I don't own a mac.

class A:
    def __getattribute__(self, name):
        return getattr(self, name)


a = A()
print("Testing Recursion Limit")
try:
    a.test
except RecursionError:
    print("Recursion Limit ok")

Output with python3.14.0a5:

Testing Recursion Limit
Recursion Limit ok

Output with python3.14.0a6:

Fatal Python error: _Py_CheckRecursiveCall: Unrecoverable stack overflow (used 3923 kB)
Python runtime state: initialized

Current thread 0x00000001f839cf80 (most recent call first):
  File "/Users/runner/work/cloudpickle/cloudpickle/test_recursion_error.py", line 3 in __getattribute__
  File "/Users/runner/work/cloudpickle/cloudpickle/test_recursion_error.py", line 3 in __getattribute__
  File "/Users/runner/work/cloudpickle/cloudpickle/test_recursion_error.py", line 3 in __getattribute__
....

CPython versions tested on:

3.14

Operating systems tested on:

macOS

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

No response

Activity

  1. added
    type-crashA hard crash of the interpreter, possibly with a core dump
    on Mar 21, 2025
  2. StanFromIreland commented on Mar 21, 2025

    @StanFromIreland
    Member

    Unable to reproduce with python3.14.0a6 on Linux.

  3. encukou commented on Mar 21, 2025

    @encukou
    Member

    Hi,
    Are the logs from that cloudpickle CI run public?

  4. tomMoral commented on Mar 21, 2025

    @tomMoral
    ContributorAuthor

    I was unable to reproduce locally with linux either.

    The outputs for both runs with cloudpickle CI are linked in the issue description (sorry it is not super explicit indeed)

  5. changed the title [-]Unrecoverable stack overflow with infinite recursion on OSX[/-] [+]Unrecoverable stack overflow with infinite recursion on macOS[/+] on Mar 21, 2025
  6. ned-deily commented on Mar 22, 2025

    @ned-deily
    Member

    I can reproduce the crash using any of the python.org macOS Python 3.14 alphas, as well as the latest python.org and MacPorts-supplied Python 3.13(.2) and 3.12(.9) - I didn't try any earlier versions of them. It might be an issue with release vs debug builds and there certainly have been many instances in the past of different stack limits on different platforms, especially on macOS.

  7. tomMoral commented on Mar 22, 2025

    @tomMoral
    ContributorAuthor

    Hello,
    In the reported case, it does not happen with 3.14.0a5 on the same platform, so I don't know if it is linked to how it is built (I'm guessing both builds have a similar process).

    The exact build from the logs:
    3.14.0a5 (working): Download from "https://github.com/actions/python-versions/releases/download/3.14.0-alpha.5-13438582588/python-3.14.0-alpha.5-darwin-arm64.tar.gz"
    3.14.0a6 (failing): Download from "https://github.com/actions/python-versions/releases/download/3.14.0-alpha.6-13890321974/python-3.14.0-alpha.6-darwin-arm64.tar.gz"

  8. ned-deily commented on Mar 22, 2025

    @ned-deily
    Member

    My apologies! I somehow totally misread your report. Contrary to what I originally wrote, I cannot reproduce the failure with any of those python.org macOS installers, including 3.14.0a5 and a6. I see that the actions/python-versions repo claims to repackage the python.org installers for macOS but I have no insight into how they might do that or what differences Github CI runners might present that might be a factor here. All I can say is that we have our own Github CI jobs for both Intel and Apple Silicon (ARM). And our python.org release installers are tested on a variety of real machines and VMs of both architectures with various macOS versions but not on a Github runner itself.

  9. ronaldoussoren commented on Mar 23, 2025

    @ronaldoussoren
    Contributor

    FWIW: The reproducer in the initial message crashes for me with Python 3.14a6, but only for arm64 and not x86_64 (e.g. fatal error with arch -arm64 python3.14 repro.py and no issue with arch -x86_64 python3.14 repro.py). This is with the python.org installer.

  10. rokm commented on May 25, 2025

    @rokm
    Contributor

    I can reproduce the issue on my M3 Mac running macOS 15.5 with the script from OP and with python.org installer for 3.14.0b1.

    Contrary to the comment above this one, the crash happens for me with both native arm64 mode and in x86_64 mode.

    Interestingly, though, the crash does not happen with free-threaded version of 3.14.0b1 from python.org installer, nor if I manually compile 3.14.0b1 from source (but I haven't really tried to fully match the build flags, so that might be expected).

    As far as I can tell, the problem is that pthread_getattr_np is not available on macOS, so the stack size is set to hard-coded value of 4 MB:

    cpython/Python/ceval.c

    Lines 467 to 469 in 91b4886

    _tstate->c_stack_top = _Py_SIZE_ROUND_UP(here_addr, 4096);
    _tstate->c_stack_soft_limit = _tstate->c_stack_top - Py_C_STACK_SIZE;
    _tstate->c_stack_hard_limit = _tstate->c_stack_top - (Py_C_STACK_SIZE + PYOS_STACK_MARGIN_BYTES);

    cpython/Python/ceval.c

    Lines 355 to 367 in 91b4886

    #if defined(__s390x__)
    # define Py_C_STACK_SIZE 320000
    #elif defined(_WIN32)
    // Don't define Py_C_STACK_SIZE, ask the O/S
    #elif defined(__ANDROID__)
    # define Py_C_STACK_SIZE 1200000
    #elif defined(__sparc__)
    # define Py_C_STACK_SIZE 1600000
    #elif defined(__hppa__) || defined(__powerpc64__)
    # define Py_C_STACK_SIZE 2000000
    #else
    # define Py_C_STACK_SIZE 4000000
    #endif

    This is too conservative for macOS, where the python's build script explicitly increases the stack to 16 MB:

    cpython/configure.ac

    Lines 3597 to 3624 in b092705

    Darwin/*|iOS/*)
    LINKFORSHARED="$extra_undefs -framework CoreFoundation"
    # Issue #18075: the default maximum stack size (8MBytes) is too
    # small for the default recursion limit. Increase the stack size
    # to ensure that tests don't crash
    stack_size="1000000" # 16 MB
    if test "$with_ubsan" = "yes"
    then
    # Undefined behavior sanitizer requires an even deeper stack
    stack_size="4000000" # 64 MB
    fi
    AC_DEFINE_UNQUOTED([THREAD_STACK_SIZE],
    [0x$stack_size],
    [Custom thread stack size depending on chosen sanitizer runtimes.])
    if test $ac_sys_system = "Darwin"; then
    LINKFORSHARED="-Wl,-stack_size,$stack_size $LINKFORSHARED"
    if test "$enable_framework"; then
    LINKFORSHARED="$LINKFORSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
    fi
    LINKFORSHARED="$LINKFORSHARED"
    elif test $ac_sys_system = "iOS"; then
    LINKFORSHARED="-Wl,-stack_size,$stack_size $LINKFORSHARED "'$(PYTHONFRAMEWORKDIR)/$(PYTHONFRAMEWORK)'
    fi
    ;;

    So the hard-coded stack size (Py_C_STACK_SIZE) should be raised for macOS, or even better, the actual stack size should be obtained using the macOS-specific pthread_get_stackaddr_np() and pthread_get_stacksize_np() functions.


    Some additional debugging info...

    For testing, I've extended the OP test script with recursion level counter and a manual stack pointer tracking:

    import ctypes
    import ctypes.util
    
    # Obtain stack address and stack size as reported by non-portable pthread functions:
    libc = ctypes.CDLL(ctypes.util.find_library('c'))
    
    libc.pthread_self.restype = ctypes.c_void_p
    
    libc.pthread_get_stackaddr_np.argtypes = [ctypes.c_void_p]
    libc.pthread_get_stackaddr_np.restype = ctypes.c_void_p
    
    libc.pthread_get_stacksize_np.argtypes = [ctypes.c_void_p]
    libc.pthread_get_stacksize_np.restype = ctypes.c_ulonglong
    
    this_thread = libc.pthread_self()
    
    stack_address = libc.pthread_get_stackaddr_np(this_thread)
    stack_size = libc.pthread_get_stacksize_np(this_thread)
    
    print(f"Stack address: {stack_address} = 0x{stack_address:X}")
    print(f"Stack size: {stack_size} = {stack_size / 1024.0} kB = {stack_size / 1024**2} MB")
    
    # Helper for tracking stack pointer location
    splib = ctypes.CDLL('./stackpointer.dylib')
    splib.get_machine_stack_pointer.restype = ctypes.c_void_p
    stack_pointer = splib.get_machine_stack_pointer()
    print(f"Stack pointer: 0x{stack_pointer:X}, depth: {(stack_address - stack_pointer)/1024:.2f} kB")
    
    # Recursion limit test
    counter = 0
    
    class A:
        def __getattribute__(self, name):
            global counter
            counter += 1
            stack_pointer = splib.get_machine_stack_pointer()
            print(f"Recursion level: {counter}, stack pointer: 0x{stack_pointer:X}, depth: {(stack_address - stack_pointer)/1024:.2f} kB")
            return getattr(self, name)
    
    
    a = A()
    print("Testing Recursion Limit")
    try:
        a.test
    except RecursionError:
        print(f"Recursion Limit ok (reached level {counter})")

    with the corresponding utility shared library to track the stack pointer:

    // stackpointer.c
    //
    // gcc -shared -fpic -o stackpointer.dylib stackpointer.c
    //
    // import ctypes
    // sp = ctypes.CDLL('./stackpointer.dylib')
    // address = sp.get_machine_stack_pointer()
    
    #include <stdint.h>
    
    uintptr_t get_machine_stack_pointer(void)
    {
        return (uintptr_t)__builtin_frame_address(0);
    }

    Running with python.org build of 3.14.0b1:

    Output

    % python3.14 repro.py             
    Stack address: 6163398656 = 0x16F5E0000
    Stack size: 16777216 = 16384.0 kB = 16.0 MB
    Stack pointer: 0x16F5D7B20, depth: 33.22 kB
    Testing Recursion Limit
    Recursion level: 1, stack pointer: 0x16F5D0D60, depth: 60.66 kB
    Recursion level: 2, stack pointer: 0x16F5C9F70, depth: 88.14 kB
    Recursion level: 3, stack pointer: 0x16F5C3180, depth: 115.62 kB
    Recursion level: 4, stack pointer: 0x16F5BC390, depth: 143.11 kB
    Recursion level: 5, stack pointer: 0x16F5B55A0, depth: 170.59 kB
    Recursion level: 6, stack pointer: 0x16F5AE7B0, depth: 198.08 kB
    Recursion level: 7, stack pointer: 0x16F5A79C0, depth: 225.56 kB
    Recursion level: 8, stack pointer: 0x16F5A0BD0, depth: 253.05 kB
    Recursion level: 9, stack pointer: 0x16F599DE0, depth: 280.53 kB
    Recursion level: 10, stack pointer: 0x16F592FF0, depth: 308.02 kB
    Recursion level: 11, stack pointer: 0x16F58C200, depth: 335.50 kB
    Recursion level: 12, stack pointer: 0x16F585410, depth: 362.98 kB
    Recursion level: 13, stack pointer: 0x16F57E620, depth: 390.47 kB
    Recursion level: 14, stack pointer: 0x16F577830, depth: 417.95 kB
    Recursion level: 15, stack pointer: 0x16F570A40, depth: 445.44 kB
    Recursion level: 16, stack pointer: 0x16F569C50, depth: 472.92 kB
    Recursion level: 17, stack pointer: 0x16F562E60, depth: 500.41 kB
    Recursion level: 18, stack pointer: 0x16F55C070, depth: 527.89 kB
    Recursion level: 19, stack pointer: 0x16F555280, depth: 555.38 kB
    Recursion level: 20, stack pointer: 0x16F54E490, depth: 582.86 kB
    Recursion level: 21, stack pointer: 0x16F5476A0, depth: 610.34 kB
    Recursion level: 22, stack pointer: 0x16F5408B0, depth: 637.83 kB
    Recursion level: 23, stack pointer: 0x16F539AC0, depth: 665.31 kB
    Recursion level: 24, stack pointer: 0x16F532CD0, depth: 692.80 kB
    Recursion level: 25, stack pointer: 0x16F52BEE0, depth: 720.28 kB
    Recursion level: 26, stack pointer: 0x16F5250F0, depth: 747.77 kB
    Recursion level: 27, stack pointer: 0x16F51E300, depth: 775.25 kB
    Recursion level: 28, stack pointer: 0x16F517510, depth: 802.73 kB
    Recursion level: 29, stack pointer: 0x16F510720, depth: 830.22 kB
    Recursion level: 30, stack pointer: 0x16F509930, depth: 857.70 kB
    Recursion level: 31, stack pointer: 0x16F502B40, depth: 885.19 kB
    Recursion level: 32, stack pointer: 0x16F4FBD50, depth: 912.67 kB
    Recursion level: 33, stack pointer: 0x16F4F4F60, depth: 940.16 kB
    Recursion level: 34, stack pointer: 0x16F4EE170, depth: 967.64 kB
    Recursion level: 35, stack pointer: 0x16F4E7380, depth: 995.12 kB
    Recursion level: 36, stack pointer: 0x16F4E0590, depth: 1022.61 kB
    Recursion level: 37, stack pointer: 0x16F4D97A0, depth: 1050.09 kB
    Recursion level: 38, stack pointer: 0x16F4D29B0, depth: 1077.58 kB
    Recursion level: 39, stack pointer: 0x16F4CBBC0, depth: 1105.06 kB
    Recursion level: 40, stack pointer: 0x16F4C4DD0, depth: 1132.55 kB
    Recursion level: 41, stack pointer: 0x16F4BDFE0, depth: 1160.03 kB
    Recursion level: 42, stack pointer: 0x16F4B71F0, depth: 1187.52 kB
    Recursion level: 43, stack pointer: 0x16F4B0400, depth: 1215.00 kB
    Recursion level: 44, stack pointer: 0x16F4A9610, depth: 1242.48 kB
    Recursion level: 45, stack pointer: 0x16F4A2820, depth: 1269.97 kB
    Recursion level: 46, stack pointer: 0x16F49BA30, depth: 1297.45 kB
    Recursion level: 47, stack pointer: 0x16F494C40, depth: 1324.94 kB
    Recursion level: 48, stack pointer: 0x16F48DE50, depth: 1352.42 kB
    Recursion level: 49, stack pointer: 0x16F487060, depth: 1379.91 kB
    Recursion level: 50, stack pointer: 0x16F480270, depth: 1407.39 kB
    Recursion level: 51, stack pointer: 0x16F479480, depth: 1434.88 kB
    Recursion level: 52, stack pointer: 0x16F472690, depth: 1462.36 kB
    Recursion level: 53, stack pointer: 0x16F46B8A0, depth: 1489.84 kB
    Recursion level: 54, stack pointer: 0x16F464AB0, depth: 1517.33 kB
    Recursion level: 55, stack pointer: 0x16F45DCC0, depth: 1544.81 kB
    Recursion level: 56, stack pointer: 0x16F456ED0, depth: 1572.30 kB
    Recursion level: 57, stack pointer: 0x16F4500E0, depth: 1599.78 kB
    Recursion level: 58, stack pointer: 0x16F4492F0, depth: 1627.27 kB
    Recursion level: 59, stack pointer: 0x16F442500, depth: 1654.75 kB
    Recursion level: 60, stack pointer: 0x16F43B710, depth: 1682.23 kB
    Recursion level: 61, stack pointer: 0x16F434920, depth: 1709.72 kB
    Recursion level: 62, stack pointer: 0x16F42DB30, depth: 1737.20 kB
    Recursion level: 63, stack pointer: 0x16F426D40, depth: 1764.69 kB
    Recursion level: 64, stack pointer: 0x16F41FF50, depth: 1792.17 kB
    Recursion level: 65, stack pointer: 0x16F419160, depth: 1819.66 kB
    Recursion level: 66, stack pointer: 0x16F412370, depth: 1847.14 kB
    Recursion level: 67, stack pointer: 0x16F40B580, depth: 1874.62 kB
    Recursion level: 68, stack pointer: 0x16F404790, depth: 1902.11 kB
    Recursion level: 69, stack pointer: 0x16F3FD9A0, depth: 1929.59 kB
    Recursion level: 70, stack pointer: 0x16F3F6BB0, depth: 1957.08 kB
    Recursion level: 71, stack pointer: 0x16F3EFDC0, depth: 1984.56 kB
    Recursion level: 72, stack pointer: 0x16F3E8FD0, depth: 2012.05 kB
    Recursion level: 73, stack pointer: 0x16F3E21E0, depth: 2039.53 kB
    Recursion level: 74, stack pointer: 0x16F3DB3F0, depth: 2067.02 kB
    Recursion level: 75, stack pointer: 0x16F3D4600, depth: 2094.50 kB
    Recursion level: 76, stack pointer: 0x16F3CD810, depth: 2121.98 kB
    Recursion level: 77, stack pointer: 0x16F3C6A20, depth: 2149.47 kB
    Recursion level: 78, stack pointer: 0x16F3BFC30, depth: 2176.95 kB
    Recursion level: 79, stack pointer: 0x16F3B8E40, depth: 2204.44 kB
    Recursion level: 80, stack pointer: 0x16F3B2050, depth: 2231.92 kB
    Recursion level: 81, stack pointer: 0x16F3AB260, depth: 2259.41 kB
    Recursion level: 82, stack pointer: 0x16F3A4470, depth: 2286.89 kB
    Recursion level: 83, stack pointer: 0x16F39D680, depth: 2314.38 kB
    Recursion level: 84, stack pointer: 0x16F396890, depth: 2341.86 kB
    Recursion level: 85, stack pointer: 0x16F38FAA0, depth: 2369.34 kB
    Recursion level: 86, stack pointer: 0x16F388CB0, depth: 2396.83 kB
    Recursion level: 87, stack pointer: 0x16F381EC0, depth: 2424.31 kB
    Recursion level: 88, stack pointer: 0x16F37B0D0, depth: 2451.80 kB
    Recursion level: 89, stack pointer: 0x16F3742E0, depth: 2479.28 kB
    Recursion level: 90, stack pointer: 0x16F36D4F0, depth: 2506.77 kB
    Recursion level: 91, stack pointer: 0x16F366700, depth: 2534.25 kB
    Recursion level: 92, stack pointer: 0x16F35F910, depth: 2561.73 kB
    Recursion level: 93, stack pointer: 0x16F358B20, depth: 2589.22 kB
    Recursion level: 94, stack pointer: 0x16F351D30, depth: 2616.70 kB
    Recursion level: 95, stack pointer: 0x16F34AF40, depth: 2644.19 kB
    Recursion level: 96, stack pointer: 0x16F344150, depth: 2671.67 kB
    Recursion level: 97, stack pointer: 0x16F33D360, depth: 2699.16 kB
    Recursion level: 98, stack pointer: 0x16F336570, depth: 2726.64 kB
    Recursion level: 99, stack pointer: 0x16F32F780, depth: 2754.12 kB
    Recursion level: 100, stack pointer: 0x16F328990, depth: 2781.61 kB
    Recursion level: 101, stack pointer: 0x16F321BA0, depth: 2809.09 kB
    Recursion level: 102, stack pointer: 0x16F31ADB0, depth: 2836.58 kB
    Recursion level: 103, stack pointer: 0x16F313FC0, depth: 2864.06 kB
    Recursion level: 104, stack pointer: 0x16F30D1D0, depth: 2891.55 kB
    Recursion level: 105, stack pointer: 0x16F3063E0, depth: 2919.03 kB
    Recursion level: 106, stack pointer: 0x16F2FF5F0, depth: 2946.52 kB
    Recursion level: 107, stack pointer: 0x16F2F8800, depth: 2974.00 kB
    Recursion level: 108, stack pointer: 0x16F2F1A10, depth: 3001.48 kB
    Recursion level: 109, stack pointer: 0x16F2EAC20, depth: 3028.97 kB
    Recursion level: 110, stack pointer: 0x16F2E3E30, depth: 3056.45 kB
    Recursion level: 111, stack pointer: 0x16F2DD040, depth: 3083.94 kB
    Recursion level: 112, stack pointer: 0x16F2D6250, depth: 3111.42 kB
    Recursion level: 113, stack pointer: 0x16F2CF460, depth: 3138.91 kB
    Recursion level: 114, stack pointer: 0x16F2C8670, depth: 3166.39 kB
    Recursion level: 115, stack pointer: 0x16F2C1880, depth: 3193.88 kB
    Recursion level: 116, stack pointer: 0x16F2BAA90, depth: 3221.36 kB
    Recursion level: 117, stack pointer: 0x16F2B3CA0, depth: 3248.84 kB
    Recursion level: 118, stack pointer: 0x16F2ACEB0, depth: 3276.33 kB
    Recursion level: 119, stack pointer: 0x16F2A60C0, depth: 3303.81 kB
    Recursion level: 120, stack pointer: 0x16F29F2D0, depth: 3331.30 kB
    Recursion level: 121, stack pointer: 0x16F2984E0, depth: 3358.78 kB
    Recursion level: 122, stack pointer: 0x16F2916F0, depth: 3386.27 kB
    Recursion level: 123, stack pointer: 0x16F28A900, depth: 3413.75 kB
    Recursion level: 124, stack pointer: 0x16F283B10, depth: 3441.23 kB
    Recursion level: 125, stack pointer: 0x16F27CD20, depth: 3468.72 kB
    Recursion level: 126, stack pointer: 0x16F275F30, depth: 3496.20 kB
    Recursion level: 127, stack pointer: 0x16F26F140, depth: 3523.69 kB
    Recursion level: 128, stack pointer: 0x16F268350, depth: 3551.17 kB
    Recursion level: 129, stack pointer: 0x16F261560, depth: 3578.66 kB
    Recursion level: 130, stack pointer: 0x16F25A770, depth: 3606.14 kB
    Recursion level: 131, stack pointer: 0x16F253980, depth: 3633.62 kB
    Recursion level: 132, stack pointer: 0x16F24CB90, depth: 3661.11 kB
    Recursion level: 133, stack pointer: 0x16F245DA0, depth: 3688.59 kB
    Recursion level: 134, stack pointer: 0x16F23EFB0, depth: 3716.08 kB
    Recursion level: 135, stack pointer: 0x16F2381C0, depth: 3743.56 kB
    Recursion level: 136, stack pointer: 0x16F2313D0, depth: 3771.05 kB
    Recursion level: 137, stack pointer: 0x16F22A5E0, depth: 3798.53 kB
    Recursion level: 138, stack pointer: 0x16F2237F0, depth: 3826.02 kB
    Recursion level: 139, stack pointer: 0x16F21CA00, depth: 3853.50 kB
    Recursion level: 140, stack pointer: 0x16F215C10, depth: 3880.98 kB
    Recursion level: 141, stack pointer: 0x16F20EE20, depth: 3908.47 kB
    Fatal Python error: _Py_CheckRecursiveCall: Unrecoverable stack overflow (used 3931 kB) while calling a Python object
    Python runtime state: initialized
    
    Current thread 0x00000001f3181f00 (most recent call first):
      File "/Users/rok/Development/pyi-python314/repro.py", line 37 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
      File "/Users/rok/Development/pyi-python314/repro.py", line 38 in __getattribute__
    zsh: abort      python3.14 repro.py
    

    The register dump in macOS crash report shows that sp register was 6159368000 (0x16f207f40); compared to
    stack pointer address reported by pthread_get_stackaddr_np, this means 4030656 bytes or 3936 kB in depth, which corroborates the Python's own error message:

    Unrecoverable stack overflow (used 3931 kB) while calling a Python object
    

    So the stack address is likely correctly initialized and stack pointer is correctly tracked, but the hard-coded limit of 4 MB is wrong; as indicated by output of pthread_get_stacksize_np, the actual stack size is 16 MB.

    And for the sake of completeness - why do free-threaded version and custom build seem to pass the test without issues? Looks like the stack cost of each recursion level is (significantly) lower - presumably due to differences in build flags?

    Running with free-threaded python.org build of 3.14.0b1:

    Output

    % python3.14t repro.py 
    Stack address: 6162677760 = 0x16F530000
    Stack size: 16777216 = 16384.0 kB = 16.0 MB
    Stack pointer: 0x16F52DDA0, depth: 8.59 kB
    Testing Recursion Limit
    Recursion level: 1, stack pointer: 0x16F52D1A0, depth: 11.59 kB
    Recursion level: 2, stack pointer: 0x16F52C530, depth: 14.70 kB
    Recursion level: 3, stack pointer: 0x16F52B8C0, depth: 17.81 kB
    Recursion level: 4, stack pointer: 0x16F52AC50, depth: 20.92 kB
    Recursion level: 5, stack pointer: 0x16F529FE0, depth: 24.03 kB
    Recursion level: 6, stack pointer: 0x16F529370, depth: 27.14 kB
    Recursion level: 7, stack pointer: 0x16F528700, depth: 30.25 kB
    Recursion level: 8, stack pointer: 0x16F527A90, depth: 33.36 kB
    Recursion level: 9, stack pointer: 0x16F526E20, depth: 36.47 kB
    Recursion level: 10, stack pointer: 0x16F5261B0, depth: 39.58 kB
    Recursion level: 11, stack pointer: 0x16F525540, depth: 42.69 kB
    Recursion level: 12, stack pointer: 0x16F5248D0, depth: 45.80 kB
    Recursion level: 13, stack pointer: 0x16F523C60, depth: 48.91 kB
    Recursion level: 14, stack pointer: 0x16F522FF0, depth: 52.02 kB
    Recursion level: 15, stack pointer: 0x16F522380, depth: 55.12 kB
    Recursion level: 16, stack pointer: 0x16F521710, depth: 58.23 kB
    Recursion level: 17, stack pointer: 0x16F520AA0, depth: 61.34 kB
    Recursion level: 18, stack pointer: 0x16F51FE30, depth: 64.45 kB
    Recursion level: 19, stack pointer: 0x16F51F1C0, depth: 67.56 kB
    Recursion level: 20, stack pointer: 0x16F51E550, depth: 70.67 kB
    Recursion level: 21, stack pointer: 0x16F51D8E0, depth: 73.78 kB
    Recursion level: 22, stack pointer: 0x16F51CC70, depth: 76.89 kB
    Recursion level: 23, stack pointer: 0x16F51C000, depth: 80.00 kB
    Recursion level: 24, stack pointer: 0x16F51B390, depth: 83.11 kB
    Recursion level: 25, stack pointer: 0x16F51A720, depth: 86.22 kB
    Recursion level: 26, stack pointer: 0x16F519AB0, depth: 89.33 kB
    Recursion level: 27, stack pointer: 0x16F518E40, depth: 92.44 kB
    Recursion level: 28, stack pointer: 0x16F5181D0, depth: 95.55 kB
    Recursion level: 29, stack pointer: 0x16F517560, depth: 98.66 kB
    Recursion level: 30, stack pointer: 0x16F5168F0, depth: 101.77 kB
    Recursion level: 31, stack pointer: 0x16F515C80, depth: 104.88 kB
    Recursion level: 32, stack pointer: 0x16F515010, depth: 107.98 kB
    Recursion level: 33, stack pointer: 0x16F5143A0, depth: 111.09 kB
    Recursion level: 34, stack pointer: 0x16F513730, depth: 114.20 kB
    Recursion level: 35, stack pointer: 0x16F512AC0, depth: 117.31 kB
    Recursion level: 36, stack pointer: 0x16F511E50, depth: 120.42 kB
    Recursion level: 37, stack pointer: 0x16F5111E0, depth: 123.53 kB
    Recursion level: 38, stack pointer: 0x16F510570, depth: 126.64 kB
    Recursion level: 39, stack pointer: 0x16F50F900, depth: 129.75 kB
    Recursion level: 40, stack pointer: 0x16F50EC90, depth: 132.86 kB
    Recursion level: 41, stack pointer: 0x16F50E020, depth: 135.97 kB
    Recursion level: 42, stack pointer: 0x16F50D3B0, depth: 139.08 kB
    Recursion level: 43, stack pointer: 0x16F50C740, depth: 142.19 kB
    Recursion level: 44, stack pointer: 0x16F50BAD0, depth: 145.30 kB
    Recursion level: 45, stack pointer: 0x16F50AE60, depth: 148.41 kB
    Recursion level: 46, stack pointer: 0x16F50A1F0, depth: 151.52 kB
    Recursion level: 47, stack pointer: 0x16F509580, depth: 154.62 kB
    Recursion level: 48, stack pointer: 0x16F508910, depth: 157.73 kB
    Recursion level: 49, stack pointer: 0x16F507CA0, depth: 160.84 kB
    Recursion level: 50, stack pointer: 0x16F507030, depth: 163.95 kB
    Recursion level: 51, stack pointer: 0x16F5063C0, depth: 167.06 kB
    Recursion level: 52, stack pointer: 0x16F505750, depth: 170.17 kB
    Recursion level: 53, stack pointer: 0x16F504AE0, depth: 173.28 kB
    Recursion level: 54, stack pointer: 0x16F503E70, depth: 176.39 kB
    Recursion level: 55, stack pointer: 0x16F503200, depth: 179.50 kB
    Recursion level: 56, stack pointer: 0x16F502590, depth: 182.61 kB
    Recursion level: 57, stack pointer: 0x16F501920, depth: 185.72 kB
    Recursion level: 58, stack pointer: 0x16F500CB0, depth: 188.83 kB
    Recursion level: 59, stack pointer: 0x16F500040, depth: 191.94 kB
    Recursion level: 60, stack pointer: 0x16F4FF3D0, depth: 195.05 kB
    Recursion level: 61, stack pointer: 0x16F4FE760, depth: 198.16 kB
    Recursion level: 62, stack pointer: 0x16F4FDAF0, depth: 201.27 kB
    Recursion level: 63, stack pointer: 0x16F4FCE80, depth: 204.38 kB
    Recursion level: 64, stack pointer: 0x16F4FC210, depth: 207.48 kB
    Recursion level: 65, stack pointer: 0x16F4FB5A0, depth: 210.59 kB
    Recursion level: 66, stack pointer: 0x16F4FA930, depth: 213.70 kB
    Recursion level: 67, stack pointer: 0x16F4F9CC0, depth: 216.81 kB
    Recursion level: 68, stack pointer: 0x16F4F9050, depth: 219.92 kB
    Recursion level: 69, stack pointer: 0x16F4F83E0, depth: 223.03 kB
    Recursion level: 70, stack pointer: 0x16F4F7770, depth: 226.14 kB
    Recursion level: 71, stack pointer: 0x16F4F6B00, depth: 229.25 kB
    Recursion level: 72, stack pointer: 0x16F4F5E90, depth: 232.36 kB
    Recursion level: 73, stack pointer: 0x16F4F5220, depth: 235.47 kB
    Recursion level: 74, stack pointer: 0x16F4F45B0, depth: 238.58 kB
    Recursion level: 75, stack pointer: 0x16F4F3940, depth: 241.69 kB
    Recursion level: 76, stack pointer: 0x16F4F2CD0, depth: 244.80 kB
    Recursion level: 77, stack pointer: 0x16F4F2060, depth: 247.91 kB
    Recursion level: 78, stack pointer: 0x16F4F13F0, depth: 251.02 kB
    Recursion level: 79, stack pointer: 0x16F4F0780, depth: 254.12 kB
    Recursion level: 80, stack pointer: 0x16F4EFB10, depth: 257.23 kB
    Recursion level: 81, stack pointer: 0x16F4EEEA0, depth: 260.34 kB
    Recursion level: 82, stack pointer: 0x16F4EE230, depth: 263.45 kB
    Recursion level: 83, stack pointer: 0x16F4ED5C0, depth: 266.56 kB
    Recursion level: 84, stack pointer: 0x16F4EC950, depth: 269.67 kB
    Recursion level: 85, stack pointer: 0x16F4EBCE0, depth: 272.78 kB
    Recursion level: 86, stack pointer: 0x16F4EB070, depth: 275.89 kB
    Recursion level: 87, stack pointer: 0x16F4EA400, depth: 279.00 kB
    Recursion level: 88, stack pointer: 0x16F4E9790, depth: 282.11 kB
    Recursion level: 89, stack pointer: 0x16F4E8B20, depth: 285.22 kB
    Recursion level: 90, stack pointer: 0x16F4E7EB0, depth: 288.33 kB
    Recursion level: 91, stack pointer: 0x16F4E7240, depth: 291.44 kB
    Recursion level: 92, stack pointer: 0x16F4E65D0, depth: 294.55 kB
    Recursion level: 93, stack pointer: 0x16F4E5960, depth: 297.66 kB
    Recursion level: 94, stack pointer: 0x16F4E4CF0, depth: 300.77 kB
    Recursion level: 95, stack pointer: 0x16F4E4080, depth: 303.88 kB
    Recursion level: 96, stack pointer: 0x16F4E3410, depth: 306.98 kB
    Recursion level: 97, stack pointer: 0x16F4E27A0, depth: 310.09 kB
    Recursion level: 98, stack pointer: 0x16F4E1B30, depth: 313.20 kB
    Recursion level: 99, stack pointer: 0x16F4E0EC0, depth: 316.31 kB
    Recursion level: 100, stack pointer: 0x16F4E0250, depth: 319.42 kB
    Recursion level: 101, stack pointer: 0x16F4DF5E0, depth: 322.53 kB
    Recursion level: 102, stack pointer: 0x16F4DE970, depth: 325.64 kB
    Recursion level: 103, stack pointer: 0x16F4DDD00, depth: 328.75 kB
    Recursion level: 104, stack pointer: 0x16F4DD090, depth: 331.86 kB
    Recursion level: 105, stack pointer: 0x16F4DC420, depth: 334.97 kB
    Recursion level: 106, stack pointer: 0x16F4DB7B0, depth: 338.08 kB
    Recursion level: 107, stack pointer: 0x16F4DAB40, depth: 341.19 kB
    Recursion level: 108, stack pointer: 0x16F4D9ED0, depth: 344.30 kB
    Recursion level: 109, stack pointer: 0x16F4D9260, depth: 347.41 kB
    Recursion level: 110, stack pointer: 0x16F4D85F0, depth: 350.52 kB
    Recursion level: 111, stack pointer: 0x16F4D7980, depth: 353.62 kB
    Recursion level: 112, stack pointer: 0x16F4D6D10, depth: 356.73 kB
    Recursion level: 113, stack pointer: 0x16F4D60A0, depth: 359.84 kB
    Recursion level: 114, stack pointer: 0x16F4D5430, depth: 362.95 kB
    Recursion level: 115, stack pointer: 0x16F4D47C0, depth: 366.06 kB
    Recursion level: 116, stack pointer: 0x16F4D3B50, depth: 369.17 kB
    Recursion level: 117, stack pointer: 0x16F4D2EE0, depth: 372.28 kB
    Recursion level: 118, stack pointer: 0x16F4D2270, depth: 375.39 kB
    Recursion level: 119, stack pointer: 0x16F4D1600, depth: 378.50 kB
    Recursion level: 120, stack pointer: 0x16F4D0990, depth: 381.61 kB
    Recursion level: 121, stack pointer: 0x16F4CFD20, depth: 384.72 kB
    Recursion level: 122, stack pointer: 0x16F4CF0B0, depth: 387.83 kB
    Recursion level: 123, stack pointer: 0x16F4CE440, depth: 390.94 kB
    Recursion level: 124, stack pointer: 0x16F4CD7D0, depth: 394.05 kB
    Recursion level: 125, stack pointer: 0x16F4CCB60, depth: 397.16 kB
    Recursion level: 126, stack pointer: 0x16F4CBEF0, depth: 400.27 kB
    Recursion level: 127, stack pointer: 0x16F4CB280, depth: 403.38 kB
    Recursion level: 128, stack pointer: 0x16F4CA610, depth: 406.48 kB
    Recursion level: 129, stack pointer: 0x16F4C99A0, depth: 409.59 kB
    Recursion level: 130, stack pointer: 0x16F4C8D30, depth: 412.70 kB
    Recursion level: 131, stack pointer: 0x16F4C80C0, depth: 415.81 kB
    Recursion level: 132, stack pointer: 0x16F4C7450, depth: 418.92 kB
    Recursion level: 133, stack pointer: 0x16F4C67E0, depth: 422.03 kB
    Recursion level: 134, stack pointer: 0x16F4C5B70, depth: 425.14 kB
    Recursion level: 135, stack pointer: 0x16F4C4F00, depth: 428.25 kB
    Recursion level: 136, stack pointer: 0x16F4C4290, depth: 431.36 kB
    Recursion level: 137, stack pointer: 0x16F4C3620, depth: 434.47 kB
    Recursion level: 138, stack pointer: 0x16F4C29B0, depth: 437.58 kB
    Recursion level: 139, stack pointer: 0x16F4C1D40, depth: 440.69 kB
    Recursion level: 140, stack pointer: 0x16F4C10D0, depth: 443.80 kB
    Recursion level: 141, stack pointer: 0x16F4C0460, depth: 446.91 kB
    Recursion level: 142, stack pointer: 0x16F4BF7F0, depth: 450.02 kB
    Recursion level: 143, stack pointer: 0x16F4BEB80, depth: 453.12 kB
    Recursion level: 144, stack pointer: 0x16F4BDF10, depth: 456.23 kB
    Recursion level: 145, stack pointer: 0x16F4BD2A0, depth: 459.34 kB
    Recursion level: 146, stack pointer: 0x16F4BC630, depth: 462.45 kB
    Recursion level: 147, stack pointer: 0x16F4BB9C0, depth: 465.56 kB
    Recursion level: 148, stack pointer: 0x16F4BAD50, depth: 468.67 kB
    Recursion level: 149, stack pointer: 0x16F4BA0E0, depth: 471.78 kB
    Recursion level: 150, stack pointer: 0x16F4B9470, depth: 474.89 kB
    [...]
    Recursion level: 950, stack pointer: 0x16F24B670, depth: 2962.39 kB
    Recursion level: 951, stack pointer: 0x16F24AA00, depth: 2965.50 kB
    Recursion level: 952, stack pointer: 0x16F249D90, depth: 2968.61 kB
    Recursion level: 953, stack pointer: 0x16F249120, depth: 2971.72 kB
    Recursion level: 954, stack pointer: 0x16F2484B0, depth: 2974.83 kB
    Recursion level: 955, stack pointer: 0x16F247840, depth: 2977.94 kB
    Recursion level: 956, stack pointer: 0x16F246BD0, depth: 2981.05 kB
    Recursion level: 957, stack pointer: 0x16F245F60, depth: 2984.16 kB
    Recursion level: 958, stack pointer: 0x16F2452F0, depth: 2987.27 kB
    Recursion level: 959, stack pointer: 0x16F244680, depth: 2990.38 kB
    Recursion level: 960, stack pointer: 0x16F243A10, depth: 2993.48 kB
    Recursion level: 961, stack pointer: 0x16F242DA0, depth: 2996.59 kB
    Recursion level: 962, stack pointer: 0x16F242130, depth: 2999.70 kB
    Recursion level: 963, stack pointer: 0x16F2414C0, depth: 3002.81 kB
    Recursion level: 964, stack pointer: 0x16F240850, depth: 3005.92 kB
    Recursion level: 965, stack pointer: 0x16F23FBE0, depth: 3009.03 kB
    Recursion level: 966, stack pointer: 0x16F23EF70, depth: 3012.14 kB
    Recursion level: 967, stack pointer: 0x16F23E300, depth: 3015.25 kB
    Recursion level: 968, stack pointer: 0x16F23D690, depth: 3018.36 kB
    Recursion level: 969, stack pointer: 0x16F23CA20, depth: 3021.47 kB
    Recursion level: 970, stack pointer: 0x16F23BDB0, depth: 3024.58 kB
    Recursion level: 971, stack pointer: 0x16F23B140, depth: 3027.69 kB
    Recursion level: 972, stack pointer: 0x16F23A4D0, depth: 3030.80 kB
    Recursion level: 973, stack pointer: 0x16F239860, depth: 3033.91 kB
    Recursion level: 974, stack pointer: 0x16F238BF0, depth: 3037.02 kB
    Recursion level: 975, stack pointer: 0x16F237F80, depth: 3040.12 kB
    Recursion level: 976, stack pointer: 0x16F237310, depth: 3043.23 kB
    Recursion level: 977, stack pointer: 0x16F2366A0, depth: 3046.34 kB
    Recursion level: 978, stack pointer: 0x16F235A30, depth: 3049.45 kB
    Recursion level: 979, stack pointer: 0x16F234DC0, depth: 3052.56 kB
    Recursion level: 980, stack pointer: 0x16F234150, depth: 3055.67 kB
    Recursion level: 981, stack pointer: 0x16F2334E0, depth: 3058.78 kB
    Recursion level: 982, stack pointer: 0x16F232870, depth: 3061.89 kB
    Recursion level: 983, stack pointer: 0x16F231C00, depth: 3065.00 kB
    Recursion level: 984, stack pointer: 0x16F230F90, depth: 3068.11 kB
    Recursion level: 985, stack pointer: 0x16F230320, depth: 3071.22 kB
    Recursion level: 986, stack pointer: 0x16F22F6B0, depth: 3074.33 kB
    Recursion level: 987, stack pointer: 0x16F22EA40, depth: 3077.44 kB
    Recursion level: 988, stack pointer: 0x16F22DDD0, depth: 3080.55 kB
    Recursion level: 989, stack pointer: 0x16F22D160, depth: 3083.66 kB
    Recursion level: 990, stack pointer: 0x16F22C4F0, depth: 3086.77 kB
    Recursion level: 991, stack pointer: 0x16F22B880, depth: 3089.88 kB
    Recursion level: 992, stack pointer: 0x16F22AC10, depth: 3092.98 kB
    Recursion level: 993, stack pointer: 0x16F229FA0, depth: 3096.09 kB
    Recursion level: 994, stack pointer: 0x16F229330, depth: 3099.20 kB
    Recursion level: 995, stack pointer: 0x16F2286C0, depth: 3102.31 kB
    Recursion level: 996, stack pointer: 0x16F227A50, depth: 3105.42 kB
    Recursion level: 997, stack pointer: 0x16F226DE0, depth: 3108.53 kB
    Recursion level: 998, stack pointer: 0x16F226170, depth: 3111.64 kB
    Recursion level: 999, stack pointer: 0x16F225500, depth: 3114.75 kB
    Recursion Limit ok (reached level 999)
    

    Running with manually built 3.14.0b1:

    Output

    % ./python-bin/bin/python3.14 repro.py 
    Stack address: 6089015296 = 0x16AEF0000
    Stack size: 16777216 = 16384.0 kB = 16.0 MB
    Stack pointer: 0x16AEEE1D0, depth: 7.55 kB
    Testing Recursion Limit
    Recursion level: 1, stack pointer: 0x16AEED910, depth: 9.73 kB
    Recursion level: 2, stack pointer: 0x16AEED050, depth: 11.92 kB
    Recursion level: 3, stack pointer: 0x16AEEC7C0, depth: 14.06 kB
    Recursion level: 4, stack pointer: 0x16AEEBF30, depth: 16.20 kB
    Recursion level: 5, stack pointer: 0x16AEEB6A0, depth: 18.34 kB
    Recursion level: 6, stack pointer: 0x16AEEAE10, depth: 20.48 kB
    Recursion level: 7, stack pointer: 0x16AEEA580, depth: 22.62 kB
    Recursion level: 8, stack pointer: 0x16AEE9CF0, depth: 24.77 kB
    Recursion level: 9, stack pointer: 0x16AEE9460, depth: 26.91 kB
    Recursion level: 10, stack pointer: 0x16AEE8BD0, depth: 29.05 kB
    Recursion level: 11, stack pointer: 0x16AEE8340, depth: 31.19 kB
    Recursion level: 12, stack pointer: 0x16AEE7AB0, depth: 33.33 kB
    Recursion level: 13, stack pointer: 0x16AEE7220, depth: 35.47 kB
    Recursion level: 14, stack pointer: 0x16AEE6990, depth: 37.61 kB
    Recursion level: 15, stack pointer: 0x16AEE6100, depth: 39.75 kB
    Recursion level: 16, stack pointer: 0x16AEE5870, depth: 41.89 kB
    Recursion level: 17, stack pointer: 0x16AEE4FE0, depth: 44.03 kB
    Recursion level: 18, stack pointer: 0x16AEE4750, depth: 46.17 kB
    Recursion level: 19, stack pointer: 0x16AEE3EC0, depth: 48.31 kB
    Recursion level: 20, stack pointer: 0x16AEE3630, depth: 50.45 kB
    Recursion level: 21, stack pointer: 0x16AEE2DA0, depth: 52.59 kB
    Recursion level: 22, stack pointer: 0x16AEE2510, depth: 54.73 kB
    Recursion level: 23, stack pointer: 0x16AEE1C80, depth: 56.88 kB
    Recursion level: 24, stack pointer: 0x16AEE13F0, depth: 59.02 kB
    Recursion level: 25, stack pointer: 0x16AEE0B60, depth: 61.16 kB
    Recursion level: 26, stack pointer: 0x16AEE02D0, depth: 63.30 kB
    Recursion level: 27, stack pointer: 0x16AEDFA40, depth: 65.44 kB
    Recursion level: 28, stack pointer: 0x16AEDF1B0, depth: 67.58 kB
    Recursion level: 29, stack pointer: 0x16AEDE920, depth: 69.72 kB
    Recursion level: 30, stack pointer: 0x16AEDE090, depth: 71.86 kB
    Recursion level: 31, stack pointer: 0x16AEDD800, depth: 74.00 kB
    Recursion level: 32, stack pointer: 0x16AEDCF70, depth: 76.14 kB
    Recursion level: 33, stack pointer: 0x16AEDC6E0, depth: 78.28 kB
    Recursion level: 34, stack pointer: 0x16AEDBE50, depth: 80.42 kB
    Recursion level: 35, stack pointer: 0x16AEDB5C0, depth: 82.56 kB
    Recursion level: 36, stack pointer: 0x16AEDAD30, depth: 84.70 kB
    Recursion level: 37, stack pointer: 0x16AEDA4A0, depth: 86.84 kB
    Recursion level: 38, stack pointer: 0x16AED9C10, depth: 88.98 kB
    Recursion level: 39, stack pointer: 0x16AED9380, depth: 91.12 kB
    Recursion level: 40, stack pointer: 0x16AED8AF0, depth: 93.27 kB
    Recursion level: 41, stack pointer: 0x16AED8260, depth: 95.41 kB
    Recursion level: 42, stack pointer: 0x16AED79D0, depth: 97.55 kB
    Recursion level: 43, stack pointer: 0x16AED7140, depth: 99.69 kB
    Recursion level: 44, stack pointer: 0x16AED68B0, depth: 101.83 kB
    Recursion level: 45, stack pointer: 0x16AED6020, depth: 103.97 kB
    Recursion level: 46, stack pointer: 0x16AED5790, depth: 106.11 kB
    Recursion level: 47, stack pointer: 0x16AED4F00, depth: 108.25 kB
    Recursion level: 48, stack pointer: 0x16AED4670, depth: 110.39 kB
    Recursion level: 49, stack pointer: 0x16AED3DE0, depth: 112.53 kB
    Recursion level: 50, stack pointer: 0x16AED3550, depth: 114.67 kB
    Recursion level: 51, stack pointer: 0x16AED2CC0, depth: 116.81 kB
    Recursion level: 52, stack pointer: 0x16AED2430, depth: 118.95 kB
    Recursion level: 53, stack pointer: 0x16AED1BA0, depth: 121.09 kB
    Recursion level: 54, stack pointer: 0x16AED1310, depth: 123.23 kB
    Recursion level: 55, stack pointer: 0x16AED0A80, depth: 125.38 kB
    Recursion level: 56, stack pointer: 0x16AED01F0, depth: 127.52 kB
    Recursion level: 57, stack pointer: 0x16AECF960, depth: 129.66 kB
    Recursion level: 58, stack pointer: 0x16AECF0D0, depth: 131.80 kB
    Recursion level: 59, stack pointer: 0x16AECE840, depth: 133.94 kB
    Recursion level: 60, stack pointer: 0x16AECDFB0, depth: 136.08 kB
    Recursion level: 61, stack pointer: 0x16AECD720, depth: 138.22 kB
    Recursion level: 62, stack pointer: 0x16AECCE90, depth: 140.36 kB
    Recursion level: 63, stack pointer: 0x16AECC600, depth: 142.50 kB
    Recursion level: 64, stack pointer: 0x16AECBD70, depth: 144.64 kB
    Recursion level: 65, stack pointer: 0x16AECB4E0, depth: 146.78 kB
    Recursion level: 66, stack pointer: 0x16AECAC50, depth: 148.92 kB
    Recursion level: 67, stack pointer: 0x16AECA3C0, depth: 151.06 kB
    Recursion level: 68, stack pointer: 0x16AEC9B30, depth: 153.20 kB
    Recursion level: 69, stack pointer: 0x16AEC92A0, depth: 155.34 kB
    Recursion level: 70, stack pointer: 0x16AEC8A10, depth: 157.48 kB
    Recursion level: 71, stack pointer: 0x16AEC8180, depth: 159.62 kB
    Recursion level: 72, stack pointer: 0x16AEC78F0, depth: 161.77 kB
    Recursion level: 73, stack pointer: 0x16AEC7060, depth: 163.91 kB
    Recursion level: 74, stack pointer: 0x16AEC67D0, depth: 166.05 kB
    Recursion level: 75, stack pointer: 0x16AEC5F40, depth: 168.19 kB
    Recursion level: 76, stack pointer: 0x16AEC56B0, depth: 170.33 kB
    Recursion level: 77, stack pointer: 0x16AEC4E20, depth: 172.47 kB
    Recursion level: 78, stack pointer: 0x16AEC4590, depth: 174.61 kB
    Recursion level: 79, stack pointer: 0x16AEC3D00, depth: 176.75 kB
    Recursion level: 80, stack pointer: 0x16AEC3470, depth: 178.89 kB
    Recursion level: 81, stack pointer: 0x16AEC2BE0, depth: 181.03 kB
    Recursion level: 82, stack pointer: 0x16AEC2350, depth: 183.17 kB
    Recursion level: 83, stack pointer: 0x16AEC1AC0, depth: 185.31 kB
    Recursion level: 84, stack pointer: 0x16AEC1230, depth: 187.45 kB
    Recursion level: 85, stack pointer: 0x16AEC09A0, depth: 189.59 kB
    Recursion level: 86, stack pointer: 0x16AEC0110, depth: 191.73 kB
    Recursion level: 87, stack pointer: 0x16AEBF880, depth: 193.88 kB
    Recursion level: 88, stack pointer: 0x16AEBEFF0, depth: 196.02 kB
    Recursion level: 89, stack pointer: 0x16AEBE760, depth: 198.16 kB
    Recursion level: 90, stack pointer: 0x16AEBDED0, depth: 200.30 kB
    Recursion level: 91, stack pointer: 0x16AEBD640, depth: 202.44 kB
    Recursion level: 92, stack pointer: 0x16AEBCDB0, depth: 204.58 kB
    Recursion level: 93, stack pointer: 0x16AEBC520, depth: 206.72 kB
    Recursion level: 94, stack pointer: 0x16AEBBC90, depth: 208.86 kB
    Recursion level: 95, stack pointer: 0x16AEBB400, depth: 211.00 kB
    Recursion level: 96, stack pointer: 0x16AEBAB70, depth: 213.14 kB
    Recursion level: 97, stack pointer: 0x16AEBA2E0, depth: 215.28 kB
    Recursion level: 98, stack pointer: 0x16AEB9A50, depth: 217.42 kB
    Recursion level: 99, stack pointer: 0x16AEB91C0, depth: 219.56 kB
    Recursion level: 100, stack pointer: 0x16AEB8930, depth: 221.70 kB
    Recursion level: 101, stack pointer: 0x16AEB80A0, depth: 223.84 kB
    Recursion level: 102, stack pointer: 0x16AEB7810, depth: 225.98 kB
    Recursion level: 103, stack pointer: 0x16AEB6F80, depth: 228.12 kB
    Recursion level: 104, stack pointer: 0x16AEB66F0, depth: 230.27 kB
    Recursion level: 105, stack pointer: 0x16AEB5E60, depth: 232.41 kB
    Recursion level: 106, stack pointer: 0x16AEB55D0, depth: 234.55 kB
    Recursion level: 107, stack pointer: 0x16AEB4D40, depth: 236.69 kB
    Recursion level: 108, stack pointer: 0x16AEB44B0, depth: 238.83 kB
    Recursion level: 109, stack pointer: 0x16AEB3C20, depth: 240.97 kB
    Recursion level: 110, stack pointer: 0x16AEB3390, depth: 243.11 kB
    Recursion level: 111, stack pointer: 0x16AEB2B00, depth: 245.25 kB
    Recursion level: 112, stack pointer: 0x16AEB2270, depth: 247.39 kB
    Recursion level: 113, stack pointer: 0x16AEB19E0, depth: 249.53 kB
    Recursion level: 114, stack pointer: 0x16AEB1150, depth: 251.67 kB
    Recursion level: 115, stack pointer: 0x16AEB08C0, depth: 253.81 kB
    Recursion level: 116, stack pointer: 0x16AEB0030, depth: 255.95 kB
    Recursion level: 117, stack pointer: 0x16AEAF7A0, depth: 258.09 kB
    Recursion level: 118, stack pointer: 0x16AEAEF10, depth: 260.23 kB
    Recursion level: 119, stack pointer: 0x16AEAE680, depth: 262.38 kB
    Recursion level: 120, stack pointer: 0x16AEADDF0, depth: 264.52 kB
    Recursion level: 121, stack pointer: 0x16AEAD560, depth: 266.66 kB
    Recursion level: 122, stack pointer: 0x16AEACCD0, depth: 268.80 kB
    Recursion level: 123, stack pointer: 0x16AEAC440, depth: 270.94 kB
    Recursion level: 124, stack pointer: 0x16AEABBB0, depth: 273.08 kB
    Recursion level: 125, stack pointer: 0x16AEAB320, depth: 275.22 kB
    Recursion level: 126, stack pointer: 0x16AEAAA90, depth: 277.36 kB
    Recursion level: 127, stack pointer: 0x16AEAA200, depth: 279.50 kB
    Recursion level: 128, stack pointer: 0x16AEA9970, depth: 281.64 kB
    Recursion level: 129, stack pointer: 0x16AEA90E0, depth: 283.78 kB
    Recursion level: 130, stack pointer: 0x16AEA8850, depth: 285.92 kB
    Recursion level: 131, stack pointer: 0x16AEA7FC0, depth: 288.06 kB
    Recursion level: 132, stack pointer: 0x16AEA7730, depth: 290.20 kB
    Recursion level: 133, stack pointer: 0x16AEA6EA0, depth: 292.34 kB
    Recursion level: 134, stack pointer: 0x16AEA6610, depth: 294.48 kB
    Recursion level: 135, stack pointer: 0x16AEA5D80, depth: 296.62 kB
    Recursion level: 136, stack pointer: 0x16AEA54F0, depth: 298.77 kB
    Recursion level: 137, stack pointer: 0x16AEA4C60, depth: 300.91 kB
    Recursion level: 138, stack pointer: 0x16AEA43D0, depth: 303.05 kB
    Recursion level: 139, stack pointer: 0x16AEA3B40, depth: 305.19 kB
    Recursion level: 140, stack pointer: 0x16AEA32B0, depth: 307.33 kB
    Recursion level: 141, stack pointer: 0x16AEA2A20, depth: 309.47 kB
    Recursion level: 142, stack pointer: 0x16AEA2190, depth: 311.61 kB
    Recursion level: 143, stack pointer: 0x16AEA1900, depth: 313.75 kB
    Recursion level: 144, stack pointer: 0x16AEA1070, depth: 315.89 kB
    Recursion level: 145, stack pointer: 0x16AEA07E0, depth: 318.03 kB
    Recursion level: 146, stack pointer: 0x16AE9FF50, depth: 320.17 kB
    Recursion level: 147, stack pointer: 0x16AE9F6C0, depth: 322.31 kB
    Recursion level: 148, stack pointer: 0x16AE9EE30, depth: 324.45 kB
    Recursion level: 149, stack pointer: 0x16AE9E5A0, depth: 326.59 kB
    Recursion level: 150, stack pointer: 0x16AE9DD10, depth: 328.73 kB
    [...]
    Recursion level: 950, stack pointer: 0x16ACF1B10, depth: 2041.23 kB
    Recursion level: 951, stack pointer: 0x16ACF1280, depth: 2043.38 kB
    Recursion level: 952, stack pointer: 0x16ACF09F0, depth: 2045.52 kB
    Recursion level: 953, stack pointer: 0x16ACF0160, depth: 2047.66 kB
    Recursion level: 954, stack pointer: 0x16ACEF8D0, depth: 2049.80 kB
    Recursion level: 955, stack pointer: 0x16ACEF040, depth: 2051.94 kB
    Recursion level: 956, stack pointer: 0x16ACEE7B0, depth: 2054.08 kB
    Recursion level: 957, stack pointer: 0x16ACEDF20, depth: 2056.22 kB
    Recursion level: 958, stack pointer: 0x16ACED690, depth: 2058.36 kB
    Recursion level: 959, stack pointer: 0x16ACECE00, depth: 2060.50 kB
    Recursion level: 960, stack pointer: 0x16ACEC570, depth: 2062.64 kB
    Recursion level: 961, stack pointer: 0x16ACEBCE0, depth: 2064.78 kB
    Recursion level: 962, stack pointer: 0x16ACEB450, depth: 2066.92 kB
    Recursion level: 963, stack pointer: 0x16ACEABC0, depth: 2069.06 kB
    Recursion level: 964, stack pointer: 0x16ACEA330, depth: 2071.20 kB
    Recursion level: 965, stack pointer: 0x16ACE9AA0, depth: 2073.34 kB
    Recursion level: 966, stack pointer: 0x16ACE9210, depth: 2075.48 kB
    Recursion level: 967, stack pointer: 0x16ACE8980, depth: 2077.62 kB
    Recursion level: 968, stack pointer: 0x16ACE80F0, depth: 2079.77 kB
    Recursion level: 969, stack pointer: 0x16ACE7860, depth: 2081.91 kB
    Recursion level: 970, stack pointer: 0x16ACE6FD0, depth: 2084.05 kB
    Recursion level: 971, stack pointer: 0x16ACE6740, depth: 2086.19 kB
    Recursion level: 972, stack pointer: 0x16ACE5EB0, depth: 2088.33 kB
    Recursion level: 973, stack pointer: 0x16ACE5620, depth: 2090.47 kB
    Recursion level: 974, stack pointer: 0x16ACE4D90, depth: 2092.61 kB
    Recursion level: 975, stack pointer: 0x16ACE4500, depth: 2094.75 kB
    Recursion level: 976, stack pointer: 0x16ACE3C70, depth: 2096.89 kB
    Recursion level: 977, stack pointer: 0x16ACE33E0, depth: 2099.03 kB
    Recursion level: 978, stack pointer: 0x16ACE2B50, depth: 2101.17 kB
    Recursion level: 979, stack pointer: 0x16ACE22C0, depth: 2103.31 kB
    Recursion level: 980, stack pointer: 0x16ACE1A30, depth: 2105.45 kB
    Recursion level: 981, stack pointer: 0x16ACE11A0, depth: 2107.59 kB
    Recursion level: 982, stack pointer: 0x16ACE0910, depth: 2109.73 kB
    Recursion level: 983, stack pointer: 0x16ACE0080, depth: 2111.88 kB
    Recursion level: 984, stack pointer: 0x16ACDF7F0, depth: 2114.02 kB
    Recursion level: 985, stack pointer: 0x16ACDEF60, depth: 2116.16 kB
    Recursion level: 986, stack pointer: 0x16ACDE6D0, depth: 2118.30 kB
    Recursion level: 987, stack pointer: 0x16ACDDE40, depth: 2120.44 kB
    Recursion level: 988, stack pointer: 0x16ACDD5B0, depth: 2122.58 kB
    Recursion level: 989, stack pointer: 0x16ACDCD20, depth: 2124.72 kB
    Recursion level: 990, stack pointer: 0x16ACDC490, depth: 2126.86 kB
    Recursion level: 991, stack pointer: 0x16ACDBC00, depth: 2129.00 kB
    Recursion level: 992, stack pointer: 0x16ACDB370, depth: 2131.14 kB
    Recursion level: 993, stack pointer: 0x16ACDAAE0, depth: 2133.28 kB
    Recursion level: 994, stack pointer: 0x16ACDA250, depth: 2135.42 kB
    Recursion level: 995, stack pointer: 0x16ACD99C0, depth: 2137.56 kB
    Recursion level: 996, stack pointer: 0x16ACD9130, depth: 2139.70 kB
    Recursion level: 997, stack pointer: 0x16ACD88A0, depth: 2141.84 kB
    Recursion level: 998, stack pointer: 0x16ACD8010, depth: 2143.98 kB
    Recursion level: 999, stack pointer: 0x16ACD7780, depth: 2146.12 kB
    Recursion Limit ok (reached level 999
    

  11. inventshah commented on Aug 14, 2025

    @inventshah
    Contributor

    The repro is fixed in 3.14.0rc2 (via #137731). @tomMoral might want to confirm with the cloudpickle CI.

  12. tomMoral commented on Aug 25, 2025

    @tomMoral
    ContributorAuthor

    I can confirm this is fixed, the same test now gives a comprehensive error instead of crashing the interpreter:

    Image

    thanks for the fix!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    OS-macinterpreter-core(Objects, Python, Grammar, and Parser dirs)type-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