<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/97325>97325</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang][ICE] Unexpected interaction between two subroutines
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
pawosm-arm
</td>
</tr>
</table>
<pre>
Hello,
I've found a piece of Fortran code which exposes a puzzling behavior of the flang-new compiler:
```
MODULE minimal
USE, INTRINSIC :: ISO_C_BINDING, ONLY: c_ptr, c_null_ptr, c_size_t
INTERFACE
FUNCTION c_malloc(size) BIND(C, name = 'malloc')
IMPORT :: c_ptr, c_size_t
IMPLICIT NONE
INTEGER(c_size_t), VALUE :: size
TYPE(c_ptr) :: c_malloc
END FUNCTION
END INTERFACE
CONTAINS
SUBROUTINE something1(la, ia)
LOGICAL, INTENT(OUT) :: la(1)
INTEGER, INTENT(IN) :: ia(1)
la = ia
END SUBROUTINE
SUBROUTINE something2()
TYPE(c_ptr) :: ptr
ptr = c_malloc(1)
END SUBROUTINE
END MODULE
```
Trying to compile this results in an ICE:
```
error: loc("minimal.f90":19:5): 'llvm.call' op result type mismatch: '!llvm.ptr' != 'i64'
error: Lowering to LLVM IR failed
flang-new: llvm-project/llvm/lib/IR/Instructions.cpp:2444: void llvm::InsertValueInst::init(llvm::Value*, llvm::Value*, llvm::ArrayRef<unsigned int>, const llvm::Twine&): Assertion `ExtractValueInst::getIndexedType(Agg->getType(), Idxs) == Val->getType() && "Inserted value must match indexed type!"' failed.
```
It is sufficient to either replace the `ptr = c_malloc(1)` line with the `ptr = c_null_ptr` line in the `something2` subroutine or remove the `la = ia` line in the `something1` subroutine to make this problem go away.
I've also tried the explicit bbc -> tco -> opt -> llc path, and the ICE did not occur.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEVltvozwT_jXOzagRmJDDRS5oQvZDypJVSirtVWWMCf5eYyPbJO3--lcGcup2960qEo-fOc8zhBjDj5KxJQqfUbgekdZWSi8bclamfiK6HuWq-Fj-jwmhEF4hb428qH8mCM9ODErVygIINJxRBqqEjdJWEwlUFQzOFacVsPdGGWYcqv31S3B5hJxV5MSVdhq2YlAKIo9Pkp2BqrrhgmkURPfu0NQb_rvj9936sI2h5pLXRNwDAQ4vMcIrSNJsn6QvyQqcqSCC5GX3tnp7TtJ1kn5ziF26_eku6FtjtRPQN9kKcTsZ_ou92UfrSZrF-020igfB5pCusmSXAn2riRCKIjx3eggvwPlCeL5y1iSpGaBgDQjPLsAZwouLXfeXfP-x22eXeOnXgVyh22SVZJDu0vjhIs3ib_Ee4flVDS-clddoe4gvtrsIe63s54-4Q3feFjfvQ5RX23G6vmZ7kTrZp4r0z9UuzaIkfbkAXw7P-90hS9IYjKqZrbg8-gjPBXGxcfJQie3uW7KKtkMX4zRDeL47ZHfRObW5_6B0TfxOKUnvdPijzk1TkK4xnNxndQv4Ef5VIhjh-UMsf6ipO33y3VjdOb-bnvu0vorEyfr5_5Ia_TPTH45nVl0IBbbiBjQzrbAGuAQiIVnFf6cZ01rprt5dZAjjgXHjcuEhjFEQ-QsURKELOYjcbAtxqseUCIHwDFQzeAT70TCouamJpdUARdjv0F2RZoCwP_CDTyfu-jGErTozPeS03b5-h2QPJeGCFT3wukK6eMWpfmq0-j-jFuGNO7oPniO8SfbuIY3VLbVcSTOmTYOCCE8mE6d7UrzoDPRdS6Rh2r4S0TKn1Au55NZN7xXV3SMcufH7L2mkNfnYsxIFq1Z2C7gALi0Kur1FlTT2Dp2duWQIT4cSR8aFw5UENPXid6sJ_RzckdlEFuydFdlHwxCeR8fjEwriI7ODYFgJSfFu-vFcu8q_EvEbDDrPU0AY94VgBZycO6hbY6FrJ_DeW9dk10WMXT_75oz_MqSJBW7AtGXJKWfSutYybiumQbNGEMq6lwOaen-iydQDwSWDM7fV79jrNr_AuLyA7rg79cC0uVatdRDlfNfqdHV92w5_seJ_smIV1OSfgXSNVrlgNRwVkDP5GH_xGiXCKLCauyJWzL0xBafcQp5TcD0BS1X_RTW2_yIEhYbYyjWSyF4vWcVQ8AKksqAobfXga1Qsg2IRLMiILf2Zv5iHoef5o2rpz30vn5UkoDgPwgkuJtNFEHhByBYhLkI64kvs4Yk383x_hhfhfOyXjIV-WOKSknxeztDEYzXhYtxRWenjiBvTsuViFuBwJEjOhOl-XmDcMdQNR7ge6WVH0bw9GjTxBDfW3CxYbkX3m6TXCNcofHa7KlzDQbL3hlHbU4a56XdcyJk9MybBntVdG8yo1WJZWdsYxwy8QXhz5LZq8zFV9d1eeNwWXQIG4U2fw2mJ_w0AAP__gymvQg">