1// RUN: mlir-opt -allow-unregistered-dialect %s -split-input-file -verify-diagnostics 2 3func.func @affine_apply_no_map() { 4^bb0: 5 %i = arith.constant 0 : index 6 %x = "affine.apply" (%i) { } : (index) -> (index) // expected-error {{requires attribute 'map'}} 7 return 8} 9 10// ----- 11 12func.func @affine_apply_wrong_operand_count() { 13^bb0: 14 %i = arith.constant 0 : index 15 %x = "affine.apply" (%i) {map = affine_map<(d0, d1) -> ((d0 + 1), (d1 + 2))>} : (index) -> (index) // expected-error {{'affine.apply' op operand count and affine map dimension and symbol count must match}} 16 return 17} 18 19// ----- 20 21func.func @affine_apply_wrong_result_count() { 22^bb0: 23 %i = arith.constant 0 : index 24 %j = arith.constant 1 : index 25 %x = "affine.apply" (%i, %j) {map = affine_map<(d0, d1) -> ((d0 + 1), (d1 + 2))>} : (index,index) -> (index) // expected-error {{'affine.apply' op mapping must produce one value}} 26 return 27} 28 29// ----- 30 31func.func @unknown_custom_op() { 32^bb0: 33 %i = test.crazyThing() {value = 0} : () -> index // expected-error {{custom op 'test.crazyThing' is unknown}} 34 return 35} 36 37// ----- 38 39func.func @unknown_std_op() { 40 // expected-error@+1 {{unregistered operation 'func.foo_bar_op' found in dialect ('func') that does not allow unknown operations}} 41 %0 = "func.foo_bar_op"() : () -> index 42 return 43} 44 45// ----- 46 47func.func @calls(%arg0: i32) { 48 %x = call @calls() : () -> i32 // expected-error {{incorrect number of operands for callee}} 49 return 50} 51 52// ----- 53 54func.func @func_with_ops(i32, i32, i32) { 55^bb0(%cond : i32, %t : i32, %f : i32): 56 // expected-error@+2 {{different type than prior uses}} 57 // expected-note@-2 {{prior use here}} 58 %r = arith.select %cond, %t, %f : i32 59} 60 61// ----- 62 63func.func @func_with_ops(i32, i32, i32) { 64^bb0(%cond : i32, %t : i32, %f : i32): 65 // expected-error@+1 {{op operand #0 must be bool-like}} 66 %r = "arith.select"(%cond, %t, %f) : (i32, i32, i32) -> i32 67} 68 69// ----- 70 71func.func @func_with_ops(i1, i32, i64) { 72^bb0(%cond : i1, %t : i32, %f : i64): 73 // TODO: expand post change in verification order. This is currently only 74 // verifying that the type verification is failing but not the specific error 75 // message. In final state the error should refer to mismatch in true_value and 76 // false_value. 77 // expected-error@+1 {{type}} 78 %r = "arith.select"(%cond, %t, %f) : (i1, i32, i64) -> i32 79} 80 81// ----- 82 83func.func @func_with_ops(vector<12xi1>, vector<42xi32>, vector<42xi32>) { 84^bb0(%cond : vector<12xi1>, %t : vector<42xi32>, %f : vector<42xi32>): 85 // expected-error@+1 {{all non-scalar operands/results must have the same shape and base type}} 86 %r = "arith.select"(%cond, %t, %f) : (vector<12xi1>, vector<42xi32>, vector<42xi32>) -> vector<42xi32> 87} 88 89// ----- 90 91func.func @func_with_ops(tensor<12xi1>, tensor<42xi32>, tensor<42xi32>) { 92^bb0(%cond : tensor<12xi1>, %t : tensor<42xi32>, %f : tensor<42xi32>): 93 // expected-error@+1 {{all non-scalar operands/results must have the same shape and base type}} 94 %r = "arith.select"(%cond, %t, %f) : (tensor<12xi1>, tensor<42xi32>, tensor<42xi32>) -> tensor<42xi32> 95} 96 97// ----- 98 99func.func @return_not_in_function() { 100 "foo.region"() ({ 101 // expected-error@+1 {{'func.return' op expects parent op 'func.func'}} 102 return 103 }): () -> () 104 return 105} 106 107// ----- 108 109func.func @invalid_splat(%v : f32) { // expected-note {{prior use here}} 110 vector.splat %v : vector<8xf64> 111 // expected-error@-1 {{expects different type than prior uses}} 112 return 113} 114 115// ----- 116 117// Case that resulted in leak previously. 118 119// expected-error@+1 {{expected ':' after block name}} 120"g"()({^a:^b }) 121