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

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

module {

// expected-error @below {{type of the real part does not match the complex type}}
cir.global external @ci2 = #cir.const_complex<#cir.int<1> : !s64i, #cir.int<2> : !s32i> : !cir.complex<!s32i>

}

// -----

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

module {

// expected-error @below {{type of the imaginary part does not match the complex type}}
cir.global external @ci2 = #cir.const_complex<#cir.int<1> : !s32i, #cir.int<2> : !s64i> : !cir.complex<!s32i>

}

// -----

module {
  cir.func @complex_real_invalid_result_type() -> !cir.double {
    %0 = cir.alloca !cir.complex<!cir.double>, !cir.ptr<!cir.complex<!cir.double>>, ["c"]
    %2 = cir.load align(8) %0 : !cir.ptr<!cir.complex<!cir.double>>, !cir.complex<!cir.double>
    // expected-error @below {{result type does not match operand type}}
    %3 = cir.complex.real %2 : !cir.complex<!cir.double> -> !cir.float
    cir.return
  }
}

// -----

module {
  cir.func @complex_imag_invalid_result_type() -> !cir.double {
    %0 = cir.alloca !cir.complex<!cir.double>, !cir.ptr<!cir.complex<!cir.double>>, ["c"]
    %2 = cir.load align(8) %0 : !cir.ptr<!cir.complex<!cir.double>>, !cir.complex<!cir.double>
    // expected-error @below {{result type does not match operand type}}
    %3 = cir.complex.imag %2 : !cir.complex<!cir.double> -> !cir.float
    cir.return
  }
}


// -----

module {
  cir.func @complex_real_ptr_invalid_result_type() -> !cir.double {
    %0 = cir.alloca !cir.complex<!cir.double>, !cir.ptr<!cir.complex<!cir.double>>, ["c"]
    // expected-error @below {{result type does not match operand type}}
    %1 = cir.complex.real_ptr %0 : !cir.ptr<!cir.complex<!cir.double>> -> !cir.ptr<!cir.float>
    cir.return
  }
}
