blob: cfeab15267e0128ab874409642b9b049f24e5dd8 [file] [log] [blame]
// RUN: mlir-opt --allow-unregistered-dialect -split-input-file -verify-diagnostics %s
func @array_of_void() {
// expected-error @+1 {{invalid array element type}}
"some.op"() : () -> !llvm.array<4 x void>
}
// -----
func @function_returning_function() {
// expected-error @+1 {{invalid function result type}}
"some.op"() : () -> !llvm.func<func<void ()> ()>
}
// -----
func @function_taking_function() {
// expected-error @+1 {{invalid function argument type}}
"some.op"() : () -> !llvm.func<void (func<void ()>)>
}
// -----
func @void_pointer() {
// expected-error @+1 {{invalid pointer element type}}
"some.op"() : () -> !llvm.ptr<void>
}
// -----
func @repeated_struct_name() {
"some.op"() : () -> !llvm.struct<"a", (ptr<struct<"a">>)>
// expected-error @+1 {{identified type already used with a different body}}
"some.op"() : () -> !llvm.struct<"a", (i32)>
}
// -----
func @repeated_struct_name_packed() {
"some.op"() : () -> !llvm.struct<"a", packed (i32)>
// expected-error @+1 {{identified type already used with a different body}}
"some.op"() : () -> !llvm.struct<"a", (i32)>
}
// -----
func @repeated_struct_opaque() {
"some.op"() : () -> !llvm.struct<"a", opaque>
// expected-error @+1 {{identified type already used with a different body}}
"some.op"() : () -> !llvm.struct<"a", ()>
}
// -----
func @repeated_struct_opaque_non_empty() {
"some.op"() : () -> !llvm.struct<"a", opaque>
// expected-error @+1 {{identified type already used with a different body}}
"some.op"() : () -> !llvm.struct<"a", (i32, i32)>
}
// -----
func @repeated_struct_opaque_redefinition() {
"some.op"() : () -> !llvm.struct<"a", ()>
// expected-error @+1 {{redeclaring defined struct as opaque}}
"some.op"() : () -> !llvm.struct<"a", opaque>
}
// -----
func @struct_literal_opaque() {
// expected-error @+1 {{only identified structs can be opaque}}
"some.op"() : () -> !llvm.struct<opaque>
}
// -----
func @unexpected_type() {
// expected-error @+1 {{unexpected type, expected keyword}}
"some.op"() : () -> !llvm.tensor<*xf32>
}
// -----
func @unexpected_type() {
// expected-error @+1 {{unknown LLVM type}}
"some.op"() : () -> !llvm.ifoo
}
// -----
func @explicitly_opaque_struct() {
"some.op"() : () -> !llvm.struct<"a", opaque>
// expected-error @+1 {{identified type already used with a different body}}
"some.op"() : () -> !llvm.struct<"a", ()>
}
// -----
func @literal_struct_with_void() {
// expected-error @+1 {{invalid LLVM structure element type}}
"some.op"() : () -> !llvm.struct<(void)>
}
// -----
func @identified_struct_with_void() {
// expected-error @+1 {{invalid LLVM structure element type}}
"some.op"() : () -> !llvm.struct<"a", (void)>
}
// -----
func @dynamic_vector() {
// expected-error @+1 {{expected '? x <integer> x <type>' or '<integer> x <type>'}}
"some.op"() : () -> !llvm.vec<? x ptr<f32>>
}
// -----
func @dynamic_scalable_vector() {
// expected-error @+1 {{expected '? x <integer> x <type>' or '<integer> x <type>'}}
"some.op"() : () -> !llvm.vec<?x? x ptr<f32>>
}
// -----
func @unscalable_vector() {
// expected-error @+1 {{expected '? x <integer> x <type>' or '<integer> x <type>'}}
"some.op"() : () -> !llvm.vec<4x4 x ptr<i32>>
}
// -----
func @zero_vector() {
// expected-error @+1 {{the number of vector elements must be positive}}
"some.op"() : () -> !llvm.vec<0 x ptr<i32>>
}
// -----
func @nested_vector() {
// expected-error @+1 {{invalid vector element type}}
"some.op"() : () -> !llvm.vec<2 x vector<2xi32>>
}
// -----
func @scalable_void_vector() {
// expected-error @+1 {{invalid vector element type}}
"some.op"() : () -> !llvm.vec<?x4 x void>
}
// -----
// expected-error @+1 {{unexpected type, expected keyword}}
func private @unexpected_type() -> !llvm.tensor<*xf32>
// -----
// expected-error @+1 {{unexpected type, expected keyword}}
func private @unexpected_type() -> !llvm.f32
// -----
// expected-error @below {{cannot use !llvm.vec for built-in primitives, use 'vector' instead}}
func private @llvm_vector_primitive() -> !llvm.vec<4 x f32>