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

    <tr>
        <th>Summary</th>
        <td>
            Verifier regression for caller/callee after enabling opaque pointers
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          joker-eph
      </td>
    </tr>
</table>

<pre>
    I've been tracking a simple case like:

```
declare void @foo(double %0)
define void @caller(i32 %i) {
  call void @foo(i32 %i)
  ret void
}
```

We expect the verifier to complain:

```
bad.ll:3:13: error: '@foo' defined with type 'void (double)*' but expected 'void (i32)*'
```

And it was until LLVM 15, I bisected to 41d5033eb162cb92b684855166cabfa3983b74c6 which enabled opaque pointer.



</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8k89uozwUxZ_GbK4awTUYWLBIvypSpX7bztp_LsGNgxnbJNO3H0HCtB2NKqGLkX-Yc44OMkZ7HIk6Vj0yxNGerGaIrHrK5JwGH7o3f6LwQNOQKW_eu2eG9YVAEY2QgtQnOx5BQrTnyRFoGQmcPRHje5Y_sXybIr9f66Mh7WQguHhrgJV57z3DxvhZOQKGVc6w3cjejh-gls5RYNhYjgtoGbbA6scbDLDs_3XqJ3KjAqUVumurn_4p8jZ_ENCviXSCNBBcKNjeUoDkQfvz5KQdv7eqpNk5x_ieM74vlgEUgg_LgmG9yazh5tTA1aYB0vu0BFHfrGzRLBZwv8BqTndZZD5zluMf6BtT-9GATXCVEeYxWQcvL6__Q1Ex_A-eQdl4Ozh5KAtT5ZyTKgRq1aISTdlUVSGElqqXvG24qkst4DpYPQCNUjky4Cf5cyaYvB0Thd2XfNaZmY6blrcyo64QTV2JomrbbOhag33LG5SmMY0pEUUpi7ItmqbHUvY6sx3myHOBfJm83bUil6XipRFYixoLVuZ0ltbtnLucdz4cMxvjTJ3gZVNmTipycas7XWHdvFc-dMs7D2o-RlbmzsYUP05JNjnqXrcGBDoGitH6EXofYGvmYV0QyD5RuOWx_CFfA4nZHFw3pDTFpT14YHg42jTMaqf9meFh-ej99jAF_0Y6MTysUiPDw2rldwAAAP__IWYaMQ">