1// RUN: mlir-opt %s -verify-diagnostics -split-input-file 2 3// Testing invalid IRDL IRs 4 5irdl.dialect @testd { 6 irdl.type @type { 7 %0 = irdl.any 8 // expected-error@+1 {{expected valid keyword}} 9 irdl.parameters(%0) 10 } 11} 12 13// ----- 14 15irdl.dialect @testd { 16 irdl.type @type { 17 %0 = irdl.any 18 // expected-error@+1 {{expected valid keyword}} 19 irdl.parameters(123: %0) 20 } 21} 22 23// ----- 24 25irdl.dialect @testd { 26 irdl.type @type { 27 %0 = irdl.any 28 // expected-error@+1 {{name of parameter #0 must contain only letters, digits and underscores}} 29 irdl.parameters(test$test: %0) 30 } 31} 32 33// ----- 34 35irdl.dialect @testd { 36 irdl.operation @op { 37 %0 = irdl.any 38 // expected-error@+1 {{name of result #0 must contain only letters, digits and underscores}} 39 irdl.results(test$test: %0) 40 } 41} 42 43// ----- 44 45irdl.dialect @testd { 46 irdl.operation @op { 47 %0 = irdl.any 48 // expected-error@+1 {{name of operand #0 must contain only letters, digits and underscores}} 49 irdl.operands(test$test: %0) 50 } 51} 52 53// ----- 54 55irdl.dialect @testd { 56 irdl.type @type { 57 %0 = irdl.any 58 // expected-error@+1 {{name of parameter #2 is a duplicate of the name of parameter #0}} 59 irdl.parameters(foo: %0, bar: %0, foo: %0) 60 } 61} 62 63// ----- 64 65irdl.dialect @testd { 66 irdl.operation @op { 67 %0 = irdl.any 68 // expected-error@+1 {{name of result #2 is a duplicate of the name of result #0}} 69 irdl.results(foo: %0, bar: %0, foo: %0) 70 } 71} 72 73// ----- 74 75irdl.dialect @testd { 76 irdl.operation @op { 77 %0 = irdl.any 78 // expected-error@+1 {{name of operand #2 is a duplicate of the name of operand #0}} 79 irdl.operands(foo: %0, bar: %0, foo: %0) 80 } 81} 82 83// ----- 84 85irdl.dialect @testd { 86 // expected-error@+1 {{contains a value named 'foo' for both its operands and results}} 87 irdl.operation @op { 88 %0 = irdl.any 89 irdl.operands(foo: %0) 90 irdl.results(foo: %0) 91 } 92} 93 94// ----- 95 96irdl.dialect @testd { 97 // expected-error@+1 {{contains a value named 'bar' for both its regions and results}} 98 irdl.operation @op { 99 %0 = irdl.any 100 %1 = irdl.region 101 irdl.regions(bar: %1) 102 irdl.results(bar: %0) 103 } 104} 105 106// ----- 107 108irdl.dialect @testd { 109 // expected-error@+1 {{contains a value named 'baz' for both its regions and operands}} 110 irdl.operation @op { 111 %0 = irdl.any 112 %1 = irdl.region 113 irdl.regions(baz: %1) 114 irdl.operands(baz: %0) 115 } 116} 117 118// ----- 119 120irdl.dialect @testd { 121 // expected-error@+1 {{contains a value named 'baz' for both its regions and results}} 122 irdl.operation @op { 123 %0 = irdl.any 124 %1 = irdl.region 125 irdl.regions(baz: %1) 126 irdl.operands(qux: %0) 127 irdl.results(baz: %0) 128 } 129} 130 131// ----- 132 133irdl.dialect @testd { 134 irdl.type @type { 135 // expected-error@+1 {{symbol '@foo' not found}} 136 %0 = irdl.base @foo 137 irdl.parameters(foo: %0) 138 } 139} 140 141// ----- 142 143irdl.dialect @testd { 144 irdl.type @type { 145 // expected-error@+1 {{the base type or attribute name should start with '!' or '#'}} 146 %0 = irdl.base "builtin.integer" 147 irdl.parameters(foo: %0) 148 } 149} 150 151// ----- 152 153irdl.dialect @testd { 154 irdl.type @type { 155 // expected-error@+1 {{the base type or attribute name should start with '!' or '#'}} 156 %0 = irdl.base "" 157 irdl.parameters(foo: %0) 158 } 159} 160 161// ----- 162 163irdl.dialect @testd { 164 irdl.type @type { 165 // expected-error@+1 {{the base type or attribute should be specified by either a name}} 166 %0 = irdl.base 167 irdl.parameters(foo: %0) 168 } 169} 170 171// ----- 172 173func.func private @not_a_type_or_attr() 174 175irdl.dialect @invalid_parametric { 176 irdl.operation @foo { 177 // expected-error@+1 {{symbol '@not_a_type_or_attr' does not refer to a type or attribute definition}} 178 %param = irdl.parametric @not_a_type_or_attr<> 179 irdl.results(foo: %param) 180 } 181} 182