blob: 3547c518f511b55bb662a39fbe079e72413e314a [file] [edit]
// RUN: cir-opt %s -verify-diagnostics -split-input-file
!u8i = !cir.int<u, 8>
!u32i = !cir.int<u, 32>
!rec_S = !cir.struct<"S" {!u8i, !u32i}>
module {
cir.func @struct_extract_member_invalid_element_type() {
%0 = cir.const #cir.const_record<{#cir.int<1> : !u8i, #cir.int<3> : !u32i}> : !rec_S
// expected-error @below {{member type mismatch}}
%1 = cir.extract_member %0[1] : !rec_S -> !u8i
cir.return
}
}
// -----
!u8i = !cir.int<u, 8>
!u32i = !cir.int<u, 32>
!rec_S = !cir.struct<"S" {!u8i, !u32i}>
module {
cir.func @struct_extract_member_invalid_index_value() {
%0 = cir.const #cir.const_record<{#cir.int<1> : !u8i, #cir.int<3> : !u32i}> : !rec_S
// expected-error @below {{member index out of bounds}}
%1 = cir.extract_member %0[2] : !rec_S -> !u8i
cir.return
}
}
// -----
!u32i = !cir.int<u, 32>
!rec_U = !cir.union<"U" {!u32i}>
module {
cir.func @extract_member_invalid_for_union() {
%0 = cir.const #cir.const_record<{#cir.int<1> : !u32i}> : !rec_U
// expected-error @below {{cir.extract_member currently does not support unions}}
%1 = cir.extract_member %0[2] : !rec_U -> !u32i
cir.return
}
}
// -----
!u8i = !cir.int<u, 8>
!u32i = !cir.int<u, 32>
!rec_S = !cir.struct<"S" {!u8i, !u32i}>
module {
cir.func @struct_insert_member_invalid_element_type() {
%0 = cir.const #cir.const_record<{#cir.int<1> : !u8i, #cir.int<3> : !u32i}> : !rec_S
%1 = cir.const #cir.int<3> : !u8i
// expected-error @below {{member type mismatch}}
%2 = cir.insert_member %0[1], %1 : !rec_S, !u8i
cir.return
}
}
// -----
!u8i = !cir.int<u, 8>
!u32i = !cir.int<u, 32>
!rec_S = !cir.struct<"S" {!u8i, !u32i}>
module {
cir.func @struct_extract_member_invalid_index_value() {
%0 = cir.const #cir.const_record<{#cir.int<1> : !u8i, #cir.int<3> : !u32i}> : !rec_S
%1 = cir.const #cir.int<3> : !u8i
// expected-error @below {{member index out of bounds}}
%2 = cir.insert_member %0[2], %1 : !rec_S, !u8i
cir.return
}
}
// -----
!u32i = !cir.int<u, 32>
!rec_U = !cir.union<"U" {!u32i}>
module {
cir.func @extract_member_invalid_for_union() {
%0 = cir.const #cir.const_record<{#cir.int<1> : !u32i}> : !rec_U
%1 = cir.const #cir.int<3> : !u32i
// expected-error @below {{cir.insert_member currently does not support unions}}
%2 = cir.insert_member %0[1], %1 : !rec_U, !u32i
cir.return
}
}