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

    <tr>
        <th>Summary</th>
        <td>
            [flang] SimplifyIntrinsics pass segfaults in findShape
        </td>
    </tr>

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

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

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

<pre>
    FIR produced from this Fortran code:
```
subroutine s(a,b,n)
  integer a(:)
  integer n
  n = sum(a)
end subroutine s
```

FIR to reproduce the issue:
```
module attributes {fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", llvm.target_triple = "x86_64-unknown-linux-gnu"} {
  func.func @_QPs(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"}, %arg1: !fir.ref<f32> {fir.bindc_name = "b"}, %arg2: !fir.ref<i32> {fir.bindc_name = "n"}) {
    %0 = fir.absent !fir.box<i1>
    %c0 = arith.constant 0 : index
    %1 = fir.address_of(@_QQcl.2E2F696930302E66393000) : !fir.ref<!fir.char<1,11>>
    %c4_i32 = arith.constant 4 : i32
    %2 = fir.convert %arg0 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
    %3 = fir.convert %1 : (!fir.ref<!fir.char<1,11>>) -> !fir.ref<i8>
    %4 = fir.convert %c0 : (index) -> i32
    %5 = fir.convert %0 : (!fir.box<i1>) -> !fir.box<none>
    %6 = fir.call @_FortranASumInteger4(%2, %3, %c4_i32, %4, %5) : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
    fir.store %6 to %arg2 : !fir.ref<i32>
    return
  }
  func.func private @_FortranASumInteger4(!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32 attributes {fir.runtime}
  fir.global linkonce @_QQcl.2E2F696930302E66393000 constant : !fir.char<1,11> {
    %0 = fir.string_lit "./repro.f90\00"(11) : !fir.char<1,11>
    fir.has_value %0 : !fir.char<1,11>
  }
}
```

`fir-opt --simplify-intrinsics repro.fir`:
```
 #0 0x00000000035e378a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /local/home/szakharin/llvm-project-mirror/llvm/lib/Support/Unix/Signals.inc:569:11
 #1 0x00000000035e395b PrintStackTraceSignalHandler(void*) /local/home/szakharin/llvm-project-mirror/llvm/lib/Support/Unix/Signals.inc:636:1                            #2 0x00000000035e1ecb llvm::sys::RunSignalHandlers() /local/home/szakharin/llvm-project-mirror/llvm/lib/Support/Signals.cpp:102:5                                      #3 0x00000000035e40d1 SignalHandler(int) /local/home/szakharin/llvm-project-mirror/llvm/lib/Support/Unix/Signals.inc:407:1
 #4 0x000014c66c15fc20 __restore_rt sigaction.c:0:0                                                                                                                     #5 0x00000000015143dc mlir::Operation::getName() /local/home/szakharin/llvm-project-mirror/llvm/../mlir/include/mlir/IR/Operation.h:50:36
 #6 0x00000000015142c5 mlir::Operation::getRegisteredInfo() /local/home/szakharin/llvm-project-mirror/llvm/../mlir/include/mlir/IR/Operation.h:55:12                    #7 0x0000000001555a18 mlir::Op<fir::EmboxOp, mlir::OpTrait::ZeroRegions, mlir::OpTrait::OneResult, mlir::OpTrait::OneTypedResult<fir::BoxType>::Impl, mlir::OpTrait::Z
eroSuccessors, mlir::OpTrait::AtLeastNOperands<1u>::Impl, mlir::OpTrait::AttrSizedOperandSegments, mlir::OpTrait::OpInvariants, mlir::MemoryEffectOpInterface::Trait>::
classof(mlir::Operation*) /local/home/szakharin/llvm-project-mirror/llvm/../mlir/include/mlir/IR/OpDefinition.h:1640:25
 #8 0x00000000015559f5 llvm::CastInfo<fir::EmboxOp, mlir::Operation*, void>::isPossible(mlir::Operation*) /local/home/szakharin/llvm-project-mirror/llvm/../mlir/includ
e/mlir/IR/Operation.h:817:51
 #9 0x000000000164ba25 llvm::DefaultDoCastIfPossible<fir::EmboxOp, mlir::Operation*, llvm::CastInfo<fir::EmboxOp, mlir::Operation*, void>>::doCastIfPossible(mlir::Oper
ation*) /local/home/szakharin/llvm-project-mirror/llvm/include/llvm/Support/Casting.h:312:9
#10 0x000000000163a0a5 decltype(auto) llvm::dyn_cast<fir::EmboxOp, mlir::Operation>(mlir::Operation*) /local/home/szakharin/llvm-project-mirror/llvm/include/llvm/Suppo
rt/Casting.h:608:10
#11 0x000000000174b93b findShape(mlir::Value) /local/home/szakharin/llvm-project-mirror/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp:335:13
```

`op->getOperand(0).getDefiningOp()` is NULL in this case.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzFWNty4jgQ_RrzooLyHfPAQyYJtamanUuyuw_7QsmyDNrYkkuSM8l8_XbbAoxhmMzOZVMEkN1unXPU6m6Rq-Jlubq7J41WRct4QUqtamK3wpCV0lZTSZgquBddef6N5195qe9e3dC0uVatFZIT44UZ9cLrHP6lFy56A0KEtHzDNYF7Gbo5vSN3FyTxohti2rp35Qy5LMjRPOeA9O_IxCqiuaMDRDgRxrRfJFCDXcUJtVaLvLXcEG_-phR6VvCStpV9FDA7ovLCkAYsLjIRV7GOYQg8CVqiSU2bnZW7U1VP9cxSveF2Db4bmMQZPGfpOo2nrXyU6pOcVkK2z9ONbPHB-Q3Ov9OjbCWb4RvxYn_98QNK7IUJOPWBD_gKcP5cPXvRtRtQrekLDqPVs4hCL7qF145TDkjZWtJ6j4X2kyLg3nEwcKx5CZ7KzsuXXeRjF-GJC_EVF3LnYjFkT9Cf39l0zHLDpT0mLQIkOLRn_QNUC7udMSWNpfAQXryCeCv485F1cPBeFJobs1Ylaoxqf2TVLLwNV-kiXUR-5Ie3aRrBN9_vcI45ugHbUg2jAOQIgl79Y3zxGtQ4hzHuMYJUQ_twjxAMn7i2TmTfIcheHQSIetotw_AJqSQfY4zOzRmMJvwq69F0LhKy8WTxucnYnl6_ZjtfY3WScw-fl6YPlVdrkB4806rq9p_Lh1cPbX3XZ66434-hi_3IffZr7Aax-0wOUZOdnb0zO5EKrjpfe5fnnj2nD5oZqzTv-UBedPvzNHhdkOwf1dy2ep-WcWueZKRGiydq-UVlfh7LMwlbt9KKmg_BwtVNpXJaEUiyj0qyHu6FrU3223Gg0Ti6LyQpA6jkZl0JjMRw5oWrrhbNyoXvJdeYOoBeBl6OU8jJ_jlaxC016ydatXwY3Ref24tw-HKuXMIQvExVY8l0akTdVKJ8mUJZBhJGMEMceKHxwS9UUMAS-cR_9nd_UcKjeUa7CogPRVfmxfRfPoBj-2Ape_xDU8ZBioORpp_WCvTjFMp_2sWCtJ1O4apSsAvhc6tggcOV-UwfgbmQeAscTAHlP5zZaS20VtpdxQ8B1Wn10DYNRCh8-1OKZ7wgNpJWZiYkg4mTdAHvoN-eTjCms0hyMsLe-_iNyqLiMGP2pEThhVe_AnAapQiYXPgDEuGIRMBZfm5N7lt5xKVvMn4oix181jQI3McOIbkE_4hINCIS-0VAxvL_oliJ_TkyOIRK7MAFMUtTFiQlC32yXkMvgZl3DRXJiA1lVig5Qwe4jfzXUf_BfwA2GSoZJEEcFYzUFWzvLhLeN1xTRNoPoXN9R1HD7w2HGebBbppwBTJWbcEPF-7u4W0_82yLoYEiQYzvRU7HuEOWXMR9zzfCWK55cSdL9T8wSDBKwi8sw_yYTpLQIDuig133bnRbQxGES5APhyaQg4TtB39zrZAwVK4LVu8lv-cGTjSXbf54aXjhDAco3qhnvNO1dji-g1pxCZI7uWn10DIGfbXSl7Bd2becGvuuE1EWBkta-9q5rqATeBCfeeGefuCbGg4KF7Vo7uQTrDs9Mfud10q_3JYlRAFaQQyVWKi6m86Dg9VTZBUFdnhoOBeP310PXhN4N7wUUuxjL0hj3D9hctg_2TjgFmUyKAXXoH23T74edkNi16SreTs9hPmgjBF5xX-dGC7MLu7FLMCUnQxy9uJIjjTOaTiU46Y_-d-oTpdyz-pb1fmRAjuNizGmsdI9yR-k9yHg3IVDcUQY0Oh2AkcB1nP3Yw12T_6xvhH1aUIKziqLKSTMaGsVQjsIVLzINQOX3yAQngd-Tpidp93TOyGf-lnX0hzYHzWPwTzOF1EObTwkpi1tjlfsL2zq_yvasqJys-9b3jdw-IEsiHcgT0lTKl2brn_p2_q7fVfv2rAo6opUdPl8oBo8ckFJddkV8OPvHzO40ucducE1wgIL1kQY8u7Pt2-hde9_Q4RF5bMJXwZp6s_T-TxLJsUyKhbRgk6ssBVfesmbnklyQ06xkgbSKzF8021Jg373Uk5aXS231jZdIxuu4LURdtvmM6bqQV83UA9XF38NRGGSeegHk-0ySApIADGlvEyjOCujzC_SBcvLki0ymvJJRXNeGQQKp7ceK2Q7jUe55GYilqEfhj5kGfiEI-RsnibMT4pFHi2Cwi8TOHHymopq1v0iqPRmopcdprzdGLhZQadiDjeBL3ScnLv53nLYcZRBpdoK1ho3KeygrdLLJxckk47UsmP0L32JVKs">