llvm-project
b28ec5ad - [mlir][Func] Fix FuncOp verifier ordering via hasRegionVerifier (#184612)

Commit
84 days ago
[mlir][Func] Fix FuncOp verifier ordering via hasRegionVerifier (#184612) FuncOp::verify() iterated over all blocks and called getMutableSuccessorOperands() on any RegionBranchTerminatorOpInterface terminator to check return types. This ran during the entrance phase of verification — before child ops had been verified — so a malformed terminator whose getMutableSuccessorOperands() assumed invariants established by its own verify() could crash instead of emitting a clean diagnostic. Fix by switching to hasRegionVerifier=1: rename verify() → verifyRegions() so the return-type checks run in the exit phase, after all nested ops have already been verified. To demonstrate the bug and guard against regression, add TestCrashingReturnOp to the test dialect. The op implements RegionBranchTerminatorOpInterface and report_fatal_errors in getMutableSuccessorOperands() when its 'valid' unit-attr is absent, reproducing the class of crash described above. The accompanying lit test confirms a clean diagnostic is emitted rather than a crash.
Author
Parents
Loading