When running dialect conversion with --no-implicit-module, the root op
is
parsed without a wrapping module and then detached from its temporary
parsing
block (block == nullptr). If a conversion pattern replaces this detached
root
op, ReplaceOperationRewrite::commit() would crash with a null pointer
dereference when calling op->getBlock()->getOperations().remove(op).
Fix this with two complementary changes:
1. In ReplaceOperationRewrite::commit(), add a guard that calls
reportFatalInternalError when op->getBlock() is null. This turns the
opaque null-pointer crash into a clear diagnostic pointing at the API
misuse.
2. Make --convert-func-to-spirv explicitly reject detached top-level ops
at
pass startup with a clear diagnostic rather than letting the conversion
framework abort with a fatal error.
Add a regression test in mlir/test/Conversion/ConvertToSPIRV/ that
verifies
the diagnostic is emitted instead of crashing.
Fixes#60491
Assisted-by: Claude Code