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

    <tr>
        <th>Summary</th>
        <td>
            Module verifier failed on a call with "clang.arc.attachedcall". 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          kyulee-com
      </td>
    </tr>
</table>

<pre>
    The following  test crashes with:
```
 a call with operand bundle "clang.arc.attachedcall" must call a function returning a pointer or a non-returning function that has a void return type tail call fastcc void @foo1() #4 [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ]
```

`DeadArgumentEliminationPass` deletes the return value which is not needed since `null` value seems constant-propagated. 
The subsequent module verifier failed to assert this. I wonder if we should simply relax this assertion, https://github.com/llvm/llvm-project/blob/7c53fc4fe1308f5b2a7527d14ea41fabb18109b8/llvm/lib/IR/Verifier.cpp#L6014-L6015


```
; RUN: opt -Oz -S %s -o -

@g = local_unnamed_addr global i32 0, align 4

define internal i8* @foo0() minsize noinline {
  store i32 1, i32* @g, align 4
  ret i8* null
}
define internal i8* @foo1() minsize noinline {
  store i32 2, i32* @g, align 4
  ret i8* null
}

define i32 @test(i64 %arg) {
entry:
  %0 = icmp eq i64 %arg, 0
  br i1 %0, label %T, label %F

T:
  %call0 = tail call i8* @foo0() minsize [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue)]
  br label %M
F:
  %call1 = tail call i8* @foo1() minsize  [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue)]
  br label %M

M:
  %1 = phi i8* [%call1, %F], [%call0, %T]
  tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %1)
  %2 = load i32, i32* @g, align 4
  ret i32 %2
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNVtuOpDYQ_Rr6pdQIDPTloR96tjPSSpkkmkz2dVXYBrxrbBab6cx-fcpA33ZHk6wiRZEQjXFdzqk6Lrq04mX31EiorNb2qEwN4KXzwHt0jXRwVL6Jsn2UHKJkH62S-RqXgMBR69EGbCd7NALKwQgtIWKMazR1jD2P0XvkjRTBmjagHUKG4IpQDYZ7ZQ300g-9CQgQOquMlz3YnhbGmuVl82zvG_TQoCOLZ6vE7A_-pZPgUekpQYXOcz5ZRHlSWZtGbBOxLSHMcoiKuzehkq0i6z2cHshzXOaJ1s9tbMtPPKbMqMx-8LaXWqKT4nHE8gH1IMdUxeHVAp5fHiSKfV8PrTT-J61aZTBw_A2do10QFJa6QpTlieZziA3HRvEGlKMaeTBSCinAKcOp_qvEDESBvCdTJ2XrgFvjPBq_7HrbYY1eihgmGEEFbiid_DIQCmitGKiPz7JXlaJWVFRSiu4tECjZewKjXAzv4WiNoH1VwZECNHbQAUPb6RfCqvHP0XB2Ik4ReweN950LqmL3dNUkn6GMuW1pEao6_wSMnyT3tCy1LelnzYus4nkl0yzZVEXJcF2wtUhziXlaYVmmmzTZlpurOCr4vX-k24eZScy7jnr_8ypJ82W4FzfNeLVP2R08_vELISaZe1j--hWWv5MkCgdLC8sbzzypIcoOoC1J6ONgDLZSfEQheqiJBWpQGYMklAG1qg3k1-5CVspIGNVvgu1mVhsJN5mFS-pw6qukniujg3W0vpsPJLigwTFDGjLQw-xff5cQgpTmBKNUJhjrw98jSX8ICfuXSG7xUEAKEmZUOJKrPLQB-3o8ZqfspN_-5Ty1IJgkY1MUbzuQX-Da7x2cxhmUJON0tA6vNZZSh9XTzer-GtXTbZYwNaZMlwn0Vgv_k_Fznj4jwTOPh-nl_fcM0jcYfNv6_wOF6f5wS2Qi0TXqBL-4O9EL7RwbSVHD43knmXeervJdyjB9Q9gmjuNRbdcELvSNtV08OHnFu0gDhQs0Ng8IFNOx-EenI-ieXL89G6dBtRC7TGyzLS688lruHl4f3_TdvP5ov9W4GBZDr3c_PKuVc4N09FDk602xaHairERCozsvkaebLWfFFtdZXmC5lhvkuBj76XZjH5iRRxhDBO0Uh4XasYSxJE9WjLGiWMWbIkNRIuM8Kdk6T6losiV28dSNvl70uxFSOdQuNEk57y6b9CGi4ko5p0P6F4EGP8_ZcPCN7XefX6h4ckk0FyOW3cjlLxtXvGA">