1// RUN: mlir-opt --allow-unregistered-dialect -split-input-file -verify-diagnostics %s 2 3func.func @array_of_void() { 4 // expected-error @+1 {{invalid array element type}} 5 "some.op"() : () -> !llvm.array<4 x void> 6} 7 8// ----- 9 10func.func @function_returning_function() { 11 // expected-error @+1 {{invalid function result type}} 12 "some.op"() : () -> !llvm.func<func<void ()> ()> 13} 14 15// ----- 16 17func.func @function_taking_function() { 18 // expected-error @+1 {{invalid function argument type}} 19 "some.op"() : () -> !llvm.func<void (func<void ()>)> 20} 21 22// ----- 23 24func.func @void_pointer() { 25 // expected-error @+1 {{invalid pointer element type}} 26 "some.op"() : () -> !llvm.ptr<void> 27} 28 29// ----- 30 31func.func @repeated_struct_name() { 32 "some.op"() : () -> !llvm.struct<"a", (ptr<struct<"a">>)> 33 // expected-error @+1 {{identified type already used with a different body}} 34 "some.op"() : () -> !llvm.struct<"a", (i32)> 35} 36 37// ----- 38 39func.func @repeated_struct_name_packed() { 40 "some.op"() : () -> !llvm.struct<"a", packed (i32)> 41 // expected-error @+1 {{identified type already used with a different body}} 42 "some.op"() : () -> !llvm.struct<"a", (i32)> 43} 44 45// ----- 46 47func.func @repeated_struct_opaque() { 48 "some.op"() : () -> !llvm.struct<"a", opaque> 49 // expected-error @+1 {{identified type already used with a different body}} 50 "some.op"() : () -> !llvm.struct<"a", ()> 51} 52 53// ----- 54 55func.func @repeated_struct_opaque_non_empty() { 56 "some.op"() : () -> !llvm.struct<"a", opaque> 57 // expected-error @+1 {{identified type already used with a different body}} 58 "some.op"() : () -> !llvm.struct<"a", (i32, i32)> 59} 60 61// ----- 62 63func.func @repeated_struct_opaque_redefinition() { 64 "some.op"() : () -> !llvm.struct<"a", ()> 65 // expected-error @+1 {{redeclaring defined struct as opaque}} 66 "some.op"() : () -> !llvm.struct<"a", opaque> 67} 68 69// ----- 70 71func.func @struct_literal_opaque() { 72 // expected-error @+1 {{only identified structs can be opaque}} 73 "some.op"() : () -> !llvm.struct<opaque> 74} 75 76// ----- 77 78func.func @unexpected_type() { 79 // expected-error @+1 {{unexpected type, expected keyword}} 80 "some.op"() : () -> !llvm.tensor<*xf32> 81} 82 83// ----- 84 85func.func @unexpected_type() { 86 // expected-error @+1 {{unknown LLVM type}} 87 "some.op"() : () -> !llvm.ifoo 88} 89 90// ----- 91 92func.func @explicitly_opaque_struct() { 93 "some.op"() : () -> !llvm.struct<"a", opaque> 94 // expected-error @+1 {{identified type already used with a different body}} 95 "some.op"() : () -> !llvm.struct<"a", ()> 96} 97 98// ----- 99 100func.func @literal_struct_with_void() { 101 // expected-error @+1 {{invalid LLVM structure element type}} 102 "some.op"() : () -> !llvm.struct<(void)> 103} 104 105// ----- 106 107func.func @identified_struct_with_void() { 108 // expected-error @+1 {{invalid LLVM structure element type}} 109 "some.op"() : () -> !llvm.struct<"a", (void)> 110} 111 112// ----- 113 114func.func @dynamic_vector() { 115 // expected-error @+1 {{expected '? x <integer> x <type>' or '<integer> x <type>'}} 116 "some.op"() : () -> !llvm.vec<? x ptr<f32>> 117} 118 119// ----- 120 121func.func @dynamic_scalable_vector() { 122 // expected-error @+1 {{expected '? x <integer> x <type>' or '<integer> x <type>'}} 123 "some.op"() : () -> !llvm.vec<?x? x ptr<f32>> 124} 125 126// ----- 127 128func.func @unscalable_vector() { 129 // expected-error @+1 {{expected '? x <integer> x <type>' or '<integer> x <type>'}} 130 "some.op"() : () -> !llvm.vec<4x4 x ptr<i32>> 131} 132 133// ----- 134 135func.func @zero_vector() { 136 // expected-error @+1 {{the number of vector elements must be positive}} 137 "some.op"() : () -> !llvm.vec<0 x ptr<i32>> 138} 139 140// ----- 141 142func.func @nested_vector() { 143 // expected-error @+1 {{invalid vector element type}} 144 "some.op"() : () -> !llvm.vec<2 x vector<2xi32>> 145} 146 147// ----- 148 149func.func @scalable_void_vector() { 150 // expected-error @+1 {{invalid vector element type}} 151 "some.op"() : () -> !llvm.vec<?x4 x void> 152} 153 154// ----- 155 156// expected-error @+1 {{unexpected type, expected keyword}} 157func.func private @unexpected_type() -> !llvm.tensor<*xf32> 158 159// ----- 160 161// expected-error @+1 {{unexpected type, expected keyword}} 162func.func private @unexpected_type() -> !llvm.f32 163 164// ----- 165 166// expected-error @below {{cannot use !llvm.vec for built-in primitives, use 'vector' instead}} 167func.func private @llvm_vector_primitive() -> !llvm.vec<4 x f32> 168