Native & viper failures with setjmp exception handling · Issue #17415 · micropython/micropython · GitHub
Skip to content

Native & viper failures with setjmp exception handling #17415

@jepler

Description

@jepler

Port, board and/or hardware

unix

MicroPython version

MicroPython v1.26.0-preview.169.g429478dcfc.dirty on 2025-06-02; linux [GCC 12.2.0] version
(modified from v1.26.0-preview-166-gc0111e63b3)

Reproduction

  1. grab my branch at https://github.com/jepler/circuitpython/tree/coverage-setjmp
  2. in ports/unix make VARIANT=coverage_sjlj test

Expected behaviour

Expected all tests to pass

Observed behaviour

The native_gen.py test fails with a segfault. This is the minimized version of the crashing code:

# catching an exception from .throw()
@micropython.native
def gen3():
    try:
        yield 1
    except Exception as er:
        print("caught", repr(er))


g = gen3()
print(g.throw(ValueError(42)))

Additional Information

The branch above has 3 changes:

  • introduce a unix variant that uses setjmp for exception handling
  • fix a build error in mp_native_yield_from
  • turns on N_NLR_SETJMP in emitnative whenever MICROPY_NLR_SETJMP is enabled and N_NLR_SETJMP is not otherwise used (note: this fixes other errors in make test that occur with MICROPY_NLR_SETJMP enabled)

It is vaguely possible that my change in mp_native_yield_from is wrong and I considered whether it might contribute to the crash, but in my reduced testcase a gdb breakpoint on that function isn't hit so I don't think that's it.

Code of Conduct

Yes, I agree

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugpy-coreRelates to py/ directory in source

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions