// RUN: cir-opt %s -verify-diagnostics -split-input-file // ----- !u16i = !cir.int !u32i = !cir.int !struct1 = !cir.struct<"Struct1" {!u16i, !u32i}> // expected-error@+1 {{member type of a #cir.data_member attribute must match the attribute type}} #invalid_member_ty = #cir.data_member<0> : !cir.data_member // ----- !u16i = !cir.int !incomplete_struct = !cir.struct<"Incomplete" incomplete> // expected-error@+1 {{incomplete 'cir.record' cannot be used to build a non-null data member pointer}} #incomplete_cls_member = #cir.data_member<0> : !cir.data_member // ----- !u16i = !cir.int !u32i = !cir.int !struct1 = !cir.struct<"Struct1" {!u16i, !u32i}> // expected-error@+1 {{member index of a #cir.data_member attribute is out of range}} #invalid_member_ty = #cir.data_member<2> : !cir.data_member // ----- !u16i = !cir.int !u32i = !cir.int !struct1 = !cir.struct<"Struct1" {!u16i, !u32i}> !struct2 = !cir.struct<"Struct2" {!u16i, !u32i}> module { cir.func @invalid_base_type(%arg0 : !cir.data_member) { %0 = cir.alloca !struct2, !cir.ptr, ["tmp"] {alignment = 4 : i64} // expected-error@+1 {{record type does not match the member pointer type}} %1 = cir.get_runtime_member %0[%arg0 : !cir.data_member] : !cir.ptr -> !cir.ptr cir.return } } // ----- !u16i = !cir.int !u32i = !cir.int !struct1 = !cir.struct<"Struct1" {!u16i, !u32i}> module { cir.func @invalid_base_type(%arg0 : !cir.data_member) { %0 = cir.alloca !struct1, !cir.ptr, ["tmp"] {alignment = 4 : i64} // expected-error@+1 {{result type does not match the member pointer type}} %1 = cir.get_runtime_member %0[%arg0 : !cir.data_member] : !cir.ptr -> !cir.ptr cir.return } }