blob: cb7b12cd5a4d69cb1ccfb9788cca582407275a16 [file] [edit]
# RUN: %PYTHON %s
# Regression test: entering a Context (or Location/InsertionPoint) without
# exiting before interpreter shutdown used to segfault. The thread-local
# context stack holds nb::object references; if not cleared before
# Py_Finalize(), the thread_local destructor calls Py_DECREF through the
# dead runtime.
from mlir.ir import *
# Case 1: Single context entered, not exited.
ctx = Context()
ctx.__enter__()
ctx.enable_multithreading(False)
with Location.unknown():
m = Module.parse("func.func @f() { return }")
# Case 2: Multiple contexts entered, not exited.
ctx2 = Context()
ctx2.__enter__()
# Case 3: Location entered, not exited (also uses the same thread-local stack).
loc = Location.unknown()
loc.__enter__()
# Interpreter shutdown proceeds with contexts/locations still on the
# thread-local stack. Before the fix, this would segfault (exit code 139).