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 41d5033 which enabled opaque pointer.