Bug report
Bug description:
There's a segmentation fault in Python 3.14.1 and 3.13.10 which doesn't happen in the previous point releases.
I'm sorry about the messy reproducer, the issue was noticed in a much larger program and this is what I ended up with after removing all the cruft.
seg_fault_issue_import.py:
import asyncio import atexit class OtherClass: __slots__ = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' def __init__(self): pass def register_async_client_cleanup(): def cleanup_wrapper(): loop = asyncio.new_event_loop() loop.close() atexit.register(cleanup_wrapper) register_async_client_cleanup()
seg_fault_debug.py:
from enum import StrEnum from seg_fault_issue_import import OtherClass class MyClass: def __init__(self): self.attr = OtherClass() class MyEnum(StrEnum): ATTR = "attr" mydata = MyClass() setattr(mydata, MyEnum.ATTR, None)
Running seg_fault_debug.py causes a segmentation fault with Python 3.13.10 and 3.14.1:
$ python3 seg_fault_debug.py
Segmentation fault (core dumped)
seg_fault_issue_import.py:
import asyncio import atexit from dataclasses import dataclass @dataclass(slots=True) class CPU: """CPU.""" count: int | None = None frequency: float | None = None load_average: float | None = None per_cpu: list[float] | None = None power: float | None = None stats: float | None = None temperature: float | None = None times: float | None = None times_percent: float | None = None def register_async_client_cleanup(): def cleanup_wrapper(): loop = asyncio.new_event_loop() loop.close() atexit.register(cleanup_wrapper) register_async_client_cleanup()
seg_fault_debug.py:
from dataclasses import dataclass, field from enum import StrEnum from seg_fault_issue_import import CPU @dataclass class MyDataclass: attr: None = field(default_factory=CPU) class MyEnum(StrEnum): ATTR = "attr" mydata = MyDataclass() setattr(mydata, MyEnum.ATTR, None)
CPython versions tested on:
3.14
Operating systems tested on:
Linux