| // 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> |