<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/60216>60216</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [mlir] `mlir::outlineSingleBlockRegion` crashes with segmentation fault.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Colloportus0
      </td>
    </tr>
</table>

<pre>
    MLIR built at commit https://github.com/llvm/llvm-project/commit/a0dab4950
Reproduced with: 
`mlir-opt --test-scf-if-utils temp.mlir`

temp.mlir:
``` milr 
func.func @func(
  %arg0: index,
  %arg1: index,
  %arg2: index,
  %arg3: memref<2xf32>) -> memref<2xf32> {
  %0 = memref.alloc() : memref<2xf32>
  %1 = scf.for %i = %arg0 to %arg1 step %arg2
 iter_args(%arg4 = %arg3) -> memref<2xf32> {
    %2 = arith.cmpi eq, %i, %arg1 : index
    %3 = scf.if %2 -> (memref<2xf32>) { 
      scf.yield %0 : memref<2xf32>
    } else {
      scf.yield %0 : memref<2xf32>
 }
    scf.yield %0 : memref<2xf32>
  }
  return %1 : memref<2xf32>
}
  
```
 
trace:
```console  
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: mlir-opt --test-scf-if-utils temp.mlir
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  mlir-opt 0x00000001041b86b8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  mlir-opt                 0x00000001041b7720 llvm::sys::RunSignalHandlers() + 112
2  mlir-opt 0x00000001041b8d50 SignalHandler(int) + 344
3  libsystem_platform.dylib 0x00000001aad414c4 _sigtramp + 56
4  mlir-opt 0x0000000104d025fc mlir::outlineSingleBlockRegion(mlir::RewriterBase&, mlir::Location, mlir::Region&, llvm::StringRef, mlir::func::CallOp*) + 256
5  mlir-opt                 0x0000000104d03330 mlir::outlineIfOp(mlir::RewriterBase&, mlir::scf::IfOp, mlir::func::FuncOp*, llvm::StringRef, mlir::func::FuncOp*, llvm::StringRef) + 160
6  mlir-opt 0x000000010558a830 mlir::WalkResult llvm::function_ref<mlir::WalkResult (mlir::Operation*)>::callback_fn<std::__1::enable_if<!llvm::is_one_of<mlir::scf::IfOp, mlir::Operation*, mlir::Region*, mlir::Block*>::value && std::is_same<mlir::WalkResult, mlir::WalkResult>::value, mlir::WalkResult>::type mlir::detail::walk<(mlir::WalkOrder)1, (anonymous namespace)::TestSCFIfUtilsPass::runOnOperation()::'lambda'(mlir::scf::IfOp), mlir::scf::IfOp, mlir::WalkResult>(mlir::Operation*, (anonymous namespace)::TestSCFIfUtilsPass::runOnOperation()::'lambda'(mlir::scf::IfOp)&&)::'lambda'(mlir::Operation*)>(long, mlir::Operation*) + 404
7  mlir-opt                 0x0000000105959838 mlir::detail::walk(mlir::Operation*, llvm::function_ref<mlir::WalkResult (mlir::Operation*)>, mlir::WalkOrder) + 160
8  mlir-opt 0x0000000105959838 mlir::detail::walk(mlir::Operation*, llvm::function_ref<mlir::WalkResult (mlir::Operation*)>, mlir::WalkOrder) + 160
9  mlir-opt                 0x0000000105959838 mlir::detail::walk(mlir::Operation*, llvm::function_ref<mlir::WalkResult (mlir::Operation*)>, mlir::WalkOrder) + 160
10 mlir-opt 0x000000010558a53c (anonymous namespace)::TestSCFIfUtilsPass::runOnOperation() + 112
11 mlir-opt 0x0000000105834428 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) + 428
12 mlir-opt                 0x0000000105834958 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) + 320
13 mlir-opt                 0x00000001058362d4 mlir::PassManager::run(mlir::Operation*) + 1148
14 mlir-opt 0x000000010582f698 performActions(llvm::raw_ostream&, bool, bool, std::__1::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) + 504
15 mlir-opt                 0x000000010582f268 mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0>(long, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) + 704
16 mlir-opt                 0x0000000105899f5c mlir::splitAndProcessBuffer(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) + 656
17 mlir-opt 0x000000010582d690 mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool) + 216
18 mlir-opt                 0x000000010582db84 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) + 1208
19 mlir-opt 0x000000010405aae4 main + 108
20 dyld 0x000000010918d088 start + 516

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWV9v4yoW_zT0BTXC-E_shzykaatbqVWrdnZXuy8RNthhB4Mv4JnJfvoVOE7sJO6kV5V29upGUWzBOYfz98eBEGN4JRlbgPgGxLdXpLUbpRcrJYRqlLatQVe5otvF0-PDK8xbLiwkFhaqrrmFG2sbA8IlwPcA31fcbtp8Vqga4HshvvWP60arf7PCAnzf8QF8TxAleZTFCKBbgJavrNGKtgWj8Du3GxAuYTcBElQLrq9VY-H1tWXGXpuivObldWu5MNCyupk5CpDsRHW_h_FwuZfUfWHNhd6JL1tZzNwPBBFyT4DTbgZCgGOiK-R04ZKyHwCvxlPB9BSengrdVM1qzUoQrvCPMsQgvAM4g9cgvDudgWB-M5CAIAhvd1QzIoTyKuMMnhd7YAw8oynKWam0G-B-YGcltKq3ChrLmr0dnQBumV4TXRm_mJuJBtzhZdp7NbDnI5rbzayoGw7Z7wCvvD67p9fh4L8hc7i3gZedML8qwOlZh4L5DTzwQ8-45UzQ3pHveAxCML-FTBg2NuFDUsD89sD5kdUHjJrZVss-gpM8A46jfO916epCk4Kd1kShpFGC9bwvj3fLtzto2txVOYF5W0HNHB64PPlw1XNjWmYAvodEUshlIVrKoN0wWGhiNjAnxVev2Kxb_s2S4iukbd3sNUUzgLIXrSpNakh01dZMWuP9cRk8HAn2MKNaC822zpWAktTMuERi0rSawa1q4YZ8Y9Cb0hHx_zANuXRzGr4sv_wGlYaGWW8Jk9-4VtKpBb8RDUGCHh___rR---fTzfPjw7_uXteOxeGPVbBRXHpfOjDMDlbCgznoB-o-AYqCPE3y1OviaMOl2Zru5UVzab1ZX3xkcXog0uT7WhmrGakBTlx1cWl9XeAbGCfdksFgyePPWIX5HKNzKry28o1XkojfiKSCadMDEr6BQbBDEDxtGY0RHAkAOB0oGkZRJyKEUPDcbI1l9boRxJZK1zO6FTwfiCSERkFURHBteGU1qZuRudGEHhThuCxgv2OES9VawSV747IS7Eao4usrq7iSDmv2RK_su3bQeEMM27n4MPmoCmI9x3C0l-KJD958s5rL6pWVY2q_Jfm3FRHiuQF42fsF9ybFF0aQojAM0amJD6WTe6lVpii7l47tvLL3rSx2yn7IyJ_z7dKqR7XkfDjjOCXpyNZ_EPH1lZlW2IFct7CL0LoD1LPUI888N0zvYrr0dXvXjRdECAdi61KCcGUs7YbX66B7YZLkgq25WwXg4KABN2sl2VqNl3_Hx2MNziXW0bBPXTfa6_qNiJZBH9cE7lXlZm1IzSa8MBY5GB8J_SmV3TZsQEGZJVx079-J-Oqdk44lPGvqACELuuYgJVLJba1a0yF24zEv6-i_MGPfVvcP5d8c9r8QswMo3cpnOXBcuucAeC5InVMC8Hy09FEEsotrYGz1dO78b41J_PdnfGeyHadCyeq9lOwKNEI70J5fBk5xFmdpmL6XHO_58nNL-iSgfRKOsSedwJ7_Q1OyP2-UAjS5Q8Rh8ZlVOG54guD8umkYRXjKhc_NF_XcuGWWlDRW6f1qI294PY6BfnpnWEoitoabJyJJ5Vy0grlSwj1b6Y__dNgZRv0ROMCXZUUaRln8cZNeeMNc_3EUaEe61zT5dBuHTG6pB2ms9qcJpU-kjgm6lbuJne4vRDNpH2SpoDtC2QEEhrjPwPBSNyaYRker9_aczYNzyBsEUR--aCIDcZlkKWyYdg300hei-cnBofdl_zxtccyGaEbXjdUgXA1aN9Xqgj1V2p3Tdy46CurT48PrSknLftjLgeJRVbwg4hxWHCdQjxZjG3anoH6fCuILg4RLnKRwSpE_ovmpL1vJf2_ZiS-fWK309qYtyy7BTxkpK0kr7JoywSybZnYN2d3Y08cxn2puB3ETXD839olw-ZPs-TUs_MxcOlDcciJYYV33bazeTtTLZc99Qxat0bjb-jU8eJIjvobm-xpKLqyhLCvj4VnbNILbpaQvWhXMmF77X6Qy_hSV_C7FeWxM9ldE86mNhCbZ8JD9FyJ8OiJ0Vz1BH4n00l2K5mk0GZldI1RsSNfyXHZN855du94Do773yM5fs6GYEBbBmnDZcfQMGEG6FXRInAUpRWkKjSXadrt174ej2-srughpFmbkii2CZB5FaB6G2dVmEZUIsThDOYvnZU5IHpAUM5qgjNCQ0vCKLzDCIQowDuYojbNZnpG4QDlN4jBJkyAEEWI14WLm3DNTurryl9mLBOEguRIkZ8L0_53phb8sztvKgAgJbqw5sFluhf-XzTs0voW7f7Y6307eNiaouyNnxt9YQ8OqfSsKfeLPrlotFn_8Tt5b8t8AAAD__6ydSrQ">