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

    <tr>
        <th>Summary</th>
        <td>
            [Flang][IR] type mismatch for bb argument #0 of successor #1
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            flang:ir
      </td>
    </tr>

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

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

<pre>
    The following snippet, reduced from a large Fortran codebase

```mlir
module {
  func.func @_QPcheck(%m : i1, %args2 : !fir.boxproc<() -> ()>) {
    cf.cond_br %m, ^bb2, ^bb3(%args2: !fir.boxproc<() -> ()>)
  ^bb2:
    return
  ^bb3(%t2 : !fir.boxproc<() -> ()>):
    %t3 = fir.box_addr %t2 : (!fir.boxproc<() -> ()>) -> (() -> ())
    fir.call %t3() : () -> ()
    return
  }
}
```

generates wrong IR after `boxed-procedure` pass has run.

```
$ ./bin/fir-opt --boxed-procedure  test.fir
test.fir:3:5: error: type mismatch for bb argument #0 of successor #1
    cf.cond_br %m, ^bb2, ^bb3(%args2: !fir.boxproc<() -> ()>)
    ^
test.fir:3:5: note: see current operation: "cf.cond_br"(%arg0, %arg1)[^bb1, ^bb2] {operand_segment_sizes = array<i32: 1, 0, 1>} : (i1, () -> ()) -> ()
```

Looks like `flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp` is not updating all the block arguments. From a quick read it does that only for the entry block of a function.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9VU2PnDgQ_TVwKTUC09D0gUPPdHoVaaVko72PjCnAOwazttmk99dv2fTHTDKRkhxW6jZ24apXr_xcNLo9138OCJ1WSn-WUw92kvOMLmKPYLBdBLbQGT0CB8VNj3DSxhk-gdAtNtxilB6j9HAZy3T9jUqa1TTqdlEI0e5hXQN0yyQSP0C0TZ_--CgGFM8RqyJWjBDlB5CZB6cl4VkWTBHLOmmSRn-ZjRZR_hj272ET5e9gndPMW14AAYguEXpqnxrjw40hbPGuadhtlq_AAemngK4gl3j54Y5q0C1merXhAuN-ks2rsN4_J_8jXJyfeNsGYrew1Y_X6W75ZsOdHAQowZVa0S-bb2Cv_b5XgN3xoo7b5CqTl9rpcULDHVr4bDTp8P0n4J1DIlimxAfbjadEijRIFpi5tTBwC2aZkjc1eFmyLSQROzVyopHobPTsYLP5KiQAIbuku8r2tsoPOf0LTxmN0d4A7jwjjNKO3ImBro6BpgGS0DLi5KgaeQq6A7sIgdZqf0R59r-KMqju-0Qm7dA_LSKIxRiftZ599aWeVkB2z5IWt3zS-83MPF7xEBLOXpAojv4OhnDkbrH3RXmy8l86WS9ebgw_EweZB27BNYTNPIfd8aquaxd4Q57fqu5NRf2u9bMFJZ_Ra6hTfOpJAko2NH6YnRwpJ2J3eqRO9ht6eTx4UXy8aiIR8-ylJq2vGCxzSwUiZfrr4KhnNkqL59u52wROa5_8e5FkN8hbkA5aTcTdwKnEkzoHtXhn8jDnSwgSCw9t0dc_ibHOynLLqortyrit83af73nspFNYU8VPgUhxpOn7T77cvyLHeDGqHpybre8x7ES_XrphaejUR18l9c_14S_JXyjoi3CS1i5oaVJUKcvioRZpVVT7XcU6zNk-Z1vBxW67zUSbVdsmL2LFG1TWp00yWo8gP8igqeIYy5qljKV7tsu22a4oE8ZFU-K-EuW-yEpe0RcCRy5V4hNJtOljU4ecmqW39FJJS4W_vaSeIPsJQ5l8fL64QZvaaLoARo5xyL8Oyf8HPUj44A">