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

    <tr>
        <th>Summary</th>
        <td>
            [Flang][OpenMP][OpenACC] Another unstructured code interaction issue
        </td>
    </tr>

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

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

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

<pre>
    In a special case where there is an OpenMP construct in the `if` case and unstructured code in the `else` case, an incorrect branch is generated from the `if` code to the `else` code.
```
subroutine simple(y)
 implicit none
  logical, intent(in) :: y
  integer :: i

  if (y) then
    !$omp parallel
      i = 1
    !$omp end parallel
 else
     stop 1
  end if
end subroutine simple
```

In the following HLFIR code that is generated, there is an incorrect branch `cf.br ^bb2`.

```
    cf.cond_br %4, ^bb1, ^bb2
  ^bb1:  // pred: ^bb0
    omp.parallel {
      %c1_i32_1 = arith.constant 1 : i32
 hlfir.assign %c1_i32_1 to %1#0 : i32, !fir.ref<i32>
 omp.terminator
    }
    cf.br ^bb2
  ^bb2:  // 2 preds: ^bb0, ^bb1
    %c1_i32 = arith.constant 1 : i32
    %false = arith.constant false
    %false_0 = arith.constant false
    %5 = fir.call @_FortranAStopStatement(%c1_i32, %false, %false_0) fastmath<contract> : (i32, i1, i1) -> none
    fir.unreachable
    ```

The correct branch should be generated for this case in https://github.com/llvm/llvm-project/blob/e3938f4d71493673033f6190454e7e19d5411ea7/flang/lib/Lower/Bridge.cpp#L4547. But this code is not entered since the lexical successor of the OpenMP construct evaluation is the first evaluation inside the OpenMP construct. Comparing with similar code like the `block` construct, there is an `end Block` evaluation that has the successor marked correctly.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVc2O4zYMfhrlQqxhy3YcH3LIzwYdYIoW3d4DWaJjdWTJkOSdztsXku2JZyaHLRA4EsmP-khKJHNO3jTinpRHUp43bPSdsfsXaZnmHdPCst50TG8aI972TxoYuAG5ZAo4cwivHVoEH7_SAdPwx4D69z-BG-28HbkHqYMeyDaVLdmmE45pAeNsMVoUwI3AlSkqh4sxoafgWGpurEXuoYnkwnk31GiZRwGtNf2nc4JHb754NAITkp5JeiDbdP7FrRsba0YvNYKT_aCQ0N0bofWkhSCSXHrQRuMsA2VukjMVKErtUXtCd1ITWgPJDyQ_wNtiGdQ3tItczhQWbQvzaYGvXsQAhGaEFqYfYGCWKYXqrgOQQPIzZI_MUYvPkJiCO9p5M9yxwV620y6sv2bjUc6m79NUt9YoZV6lvsFvz5env-YKdMx_KFXI1frCfKkr2aa8TRoLpPzeNJRs02R92CcGIRLeJtxocQ0YWhbhhIjN3ld0MZ7leVjSC6EXGCyKsI-alVPTD8mSQCDVcZ13QkueXWVOr1msALPSd0m880x7CMIDyHw5tVOttMn01j5gvQnbjNA8fYcEyjQLAIstyU9Bln-fPQVSHm0vNfPGrupenT-k4569ddx0HTeNkbtV6Pe0re7TTPZXwpzsW6YcPjKPiq-m1_TXjMtoFvLCmVJAivR6MdZbpg8_vBl-eOaxn17gO-spmdM56_U1DS-tZc73zHckP3GjvWXck_x7DCo84wkus-Vbw7egXj9_iHxGbZHxjjVqzfjRQ_m7Q_h0211nRiWgwXUzMxZ8J93UK6WGzvshVGoq3U36bmwSbnpCL0r9XP6-Ddb8g9wTemmUaQi9YF7nu7YQVVbU-bbK0zxvt1mdFmWBFWa1KIssQ1YRemkV07fgSAbgs3lFS-jlaKW4YcKHgdD8uSiLKoHj6Gd2sWc70MYDao-hjzupeRwIoPDf0BrBjZyjc8aCaaPiy4TAn0yNzEujg7fYSaR1H-XaSYEP4QmcTD8wG_rOq_RdaFdSMTvRU_IFlxHQKMNfphkwYz_3ojAntIDjYrhiEPtYxyZ-95h6Zl_i-IpFVW_JRuxzUec12-A-q7Iyq6tdVWy6fd0WlDaZSCnWVUrbYldWdSGwqLcpY6LZyD1NaZGW6S6ryywrku2uqERGmyJn1bbMK1Kk2DOpklDsxNjbRjo34r7OSrrdKNagcnGQUzpXk4aZbvfxcjTjzZEiVdJ5d_fgpVdx-l8iojyT8jhl-L4-nE6kPMNBm5Crh3PbY3g9UwXdiJvRqv3_vrQR6gi9xID-CwAA__-kepuY">