// RUN: cir-opt %s -verify-diagnostics -split-input-file

!u32i = !cir.int<u, 32>

cir.func @f1() {
  // expected-error @below {{'f' does not reference a valid function}}
  cir.call @f() : () -> ()
  cir.return
}

// -----

!u32i = !cir.int<u, 32>

cir.func private @f2()
cir.func @f3() {
  // expected-error @below {{callee returns void but call has results}}
  %0 = cir.call @f2() : () -> !u32i
  cir.return
}

// -----

!u32i = !cir.int<u, 32>

cir.func private @f4() -> !u32i
cir.func @f5() {
  // expected-error @below {{incorrect number of results for callee}}
  cir.call @f4() : () -> ()
  cir.return
}

// -----

!s32i = !cir.int<s, 32>
!u32i = !cir.int<u, 32>

cir.func private @f6() -> !u32i
cir.func @f7() {
  // expected-error @below {{result type mismatch}}
  %0 = cir.call @f6() : () -> !s32i
  cir.return
}

// -----

!s32i = !cir.int<s, 32>
!u32i = !cir.int<u, 32>

cir.func private @f8(!s32i, !s32i)
cir.func @f9() {
  %0 = cir.const #cir.int<1> : !s32i
  // expected-error @below {{incorrect number of operands for callee}}
  cir.call @f8(%0) : (!s32i) -> ()
  cir.return
}

// -----

!s32i = !cir.int<s, 32>
!u32i = !cir.int<u, 32>

cir.func private @f10(!s32i, !s32i)
cir.func @f11() {
  %0 = cir.const #cir.int<1> : !s32i
  %1 = cir.const #cir.int<2> : !u32i
  // expected-error @below {{operand type mismatch: expected operand type '!cir.int<s, 32>', but provided '!cir.int<u, 32>' for operand number 1}}
  cir.call @f10(%0, %1) : (!s32i, !u32i) -> ()
  cir.return
}

// -----

!s32i = !cir.int<s, 32>

cir.func private @f12(!s32i, !s32i, ...)
cir.func @f13() {
  %0 = cir.const #cir.int<1> : !s32i
  // expected-error @below {{too few operands for callee}}
  cir.call @f12(%0) : (!s32i) -> ()
  cir.return
}
