OLD | NEW |
1 ; RUN: not pnacl-abicheck < %s | FileCheck %s | 1 ; RUN: not pnacl-abicheck < %s | FileCheck %s |
2 ; Test instruction opcodes allowed by PNaCl ABI | 2 ; Test instruction opcodes allowed by PNaCl ABI |
3 | 3 |
4 target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64
:64:64-p:32:32:32-v128:32:32" | 4 target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64
:64:64-p:32:32:32-v128:32:32" |
5 target triple = "le32-unknown-nacl" | 5 target triple = "le32-unknown-nacl" |
6 | 6 |
7 define internal void @terminators() { | 7 define internal void @terminators() { |
8 ; CHECK: ERROR: Function terminators | 8 ; CHECK: ERROR: Function terminators |
9 ; Terminator instructions | 9 ; Terminator instructions |
10 terminators: | 10 terminators: |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 ; CHECK-NEXT: disallowed: bad instruction opcode: {{.*}} insertvalue | 138 ; CHECK-NEXT: disallowed: bad instruction opcode: {{.*}} insertvalue |
139 | 139 |
140 ret void | 140 ret void |
141 } | 141 } |
142 | 142 |
143 define internal void @memory() { | 143 define internal void @memory() { |
144 ; CHECK: ERROR: Function memory | 144 ; CHECK: ERROR: Function memory |
145 ; Memory operations | 145 ; Memory operations |
146 %a1 = alloca i8, i32 4 | 146 %a1 = alloca i8, i32 4 |
147 %ptr = inttoptr i32 0 to i32* | 147 %ptr = inttoptr i32 0 to i32* |
148 %a2 = load i32* %ptr, align 1 | 148 %a2 = load i32, i32* %ptr, align 1 |
149 store i32 undef, i32* %ptr, align 1 | 149 store i32 undef, i32* %ptr, align 1 |
150 ; CHECK-NOT: disallowed | 150 ; CHECK-NOT: disallowed |
151 %a4 = getelementptr { i32, i32}* undef ; CHECK-NEXT: disallowed: bad instructi
on opcode: {{.*}} getelementptr | 151 %a4 = getelementptr { i32, i32}, { i32, i32}* undef ; CHECK-NEXT: disallowed:
bad instruction opcode: {{.*}} getelementptr |
152 ret void | 152 ret void |
153 } | 153 } |
154 | 154 |
155 define internal void @vector_memory() { | 155 define internal void @vector_memory() { |
156 ; CHECK: ERROR: Function vector_memory | 156 ; CHECK: ERROR: Function vector_memory |
157 ; Vector memory operations. | 157 ; Vector memory operations. |
158 %ptr16xi8 = inttoptr i32 0 to <16 x i8>* | 158 %ptr16xi8 = inttoptr i32 0 to <16 x i8>* |
159 %ptr8xi16 = inttoptr i32 0 to <8 x i16>* | 159 %ptr8xi16 = inttoptr i32 0 to <8 x i16>* |
160 %ptr4xi32 = inttoptr i32 0 to <4 x i32>* | 160 %ptr4xi32 = inttoptr i32 0 to <4 x i32>* |
161 %ptr4xfloat = inttoptr i32 0 to <4 x float>* | 161 %ptr4xfloat = inttoptr i32 0 to <4 x float>* |
162 | 162 |
163 %l16xi8 = load <16 x i8>* %ptr16xi8, align 1 | 163 %l16xi8 = load <16 x i8>, <16 x i8>* %ptr16xi8, align 1 |
164 %l8xi16 = load <8 x i16>* %ptr8xi16, align 2 | 164 %l8xi16 = load <8 x i16>, <8 x i16>* %ptr8xi16, align 2 |
165 %l4xi32 = load <4 x i32>* %ptr4xi32, align 4 | 165 %l4xi32 = load <4 x i32>, <4 x i32>* %ptr4xi32, align 4 |
166 %l4xfloat = load <4 x float>* %ptr4xfloat, align 4 | 166 %l4xfloat = load <4 x float>, <4 x float>* %ptr4xfloat, align 4 |
167 | 167 |
168 store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 1 | 168 store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 1 |
169 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 2 | 169 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 2 |
170 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 4 | 170 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 4 |
171 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 4 | 171 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 4 |
172 | 172 |
173 ; CHECK-NOT: disallowed | 173 ; CHECK-NOT: disallowed |
174 ; The following vector types are disallowed. | 174 ; The following vector types are disallowed. |
175 %ptr2xi1 = inttoptr i32 0 to <2 x i1>* ; CHECK-NEXT: disallowed: bad r
esult type: <2 x i1>* | 175 %ptr2xi1 = inttoptr i32 0 to <2 x i1>* ; CHECK-NEXT: disallowed: bad r
esult type: <2 x i1>* |
176 %ptr4xi1 = inttoptr i32 0 to <4 x i1>* ; CHECK-NEXT: disallowed: bad r
esult type: <4 x i1>* | 176 %ptr4xi1 = inttoptr i32 0 to <4 x i1>* ; CHECK-NEXT: disallowed: bad r
esult type: <4 x i1>* |
(...skipping 16 matching lines...) Expand all Loading... |
193 %ptr4xi64 = inttoptr i32 0 to <4 x i64>* ; CHECK-NEXT: disallowed: bad r
esult type: <4 x i64>* | 193 %ptr4xi64 = inttoptr i32 0 to <4 x i64>* ; CHECK-NEXT: disallowed: bad r
esult type: <4 x i64>* |
194 %ptr8xi64 = inttoptr i32 0 to <8 x i64>* ; CHECK-NEXT: disallowed: bad r
esult type: <8 x i64>* | 194 %ptr8xi64 = inttoptr i32 0 to <8 x i64>* ; CHECK-NEXT: disallowed: bad r
esult type: <8 x i64>* |
195 %ptr2xfloat = inttoptr i32 0 to <2 x float>* ; CHECK-NEXT: disallowed: bad r
esult type: <2 x float>* | 195 %ptr2xfloat = inttoptr i32 0 to <2 x float>* ; CHECK-NEXT: disallowed: bad r
esult type: <2 x float>* |
196 %ptr8xfloat = inttoptr i32 0 to <8 x float>* ; CHECK-NEXT: disallowed: bad r
esult type: <8 x float>* | 196 %ptr8xfloat = inttoptr i32 0 to <8 x float>* ; CHECK-NEXT: disallowed: bad r
esult type: <8 x float>* |
197 %ptr16xfloat = inttoptr i32 0 to <16 x float>* ; CHECK-NEXT: disallowed: bad r
esult type: <16 x float>* | 197 %ptr16xfloat = inttoptr i32 0 to <16 x float>* ; CHECK-NEXT: disallowed: bad r
esult type: <16 x float>* |
198 %ptr2xdouble = inttoptr i32 0 to <2 x double>* ; CHECK-NEXT: disallowed: bad r
esult type: <2 x double>* | 198 %ptr2xdouble = inttoptr i32 0 to <2 x double>* ; CHECK-NEXT: disallowed: bad r
esult type: <2 x double>* |
199 %ptr4xdouble = inttoptr i32 0 to <4 x double>* ; CHECK-NEXT: disallowed: bad r
esult type: <4 x double>* | 199 %ptr4xdouble = inttoptr i32 0 to <4 x double>* ; CHECK-NEXT: disallowed: bad r
esult type: <4 x double>* |
200 %ptr8xdouble = inttoptr i32 0 to <8 x double>* ; CHECK-NEXT: disallowed: bad r
esult type: <8 x double>* | 200 %ptr8xdouble = inttoptr i32 0 to <8 x double>* ; CHECK-NEXT: disallowed: bad r
esult type: <8 x double>* |
201 | 201 |
202 ; i1 vector pointers are simply disallowed, their alignment is inconsequential
. | 202 ; i1 vector pointers are simply disallowed, their alignment is inconsequential
. |
203 %l4xi1 = load <4 x i1>* %ptr4xi1, align 1 ; CHECK-NEXT: disallowed: bad poi
nter: %l4xi1 = load <4 x i1>* %ptr4xi1, align 1 | 203 %l4xi1 = load <4 x i1>, <4 x i1>* %ptr4xi1, align 1 ; CHECK-NEXT: disallowe
d: bad pointer: %l4xi1 = load <4 x i1>, <4 x i1>* %ptr4xi1, align 1 |
204 %l8xi1 = load <8 x i1>* %ptr8xi1, align 1 ; CHECK-NEXT: disallowed: bad poi
nter: %l8xi1 = load <8 x i1>* %ptr8xi1, align 1 | 204 %l8xi1 = load <8 x i1>, <8 x i1>* %ptr8xi1, align 1 ; CHECK-NEXT: disallowe
d: bad pointer: %l8xi1 = load <8 x i1>, <8 x i1>* %ptr8xi1, align 1 |
205 %l16xi1 = load <16 x i1>* %ptr16xi1, align 1 ; CHECK-NEXT: disallowed: bad poi
nter: %l16xi1 = load <16 x i1>* %ptr16xi1, align 1 | 205 %l16xi1 = load <16 x i1>, <16 x i1>* %ptr16xi1, align 1 ; CHECK-NEXT: disallow
ed: bad pointer: %l16xi1 = load <16 x i1>, <16 x i1>* %ptr16xi1, align 1 |
206 | 206 |
207 store <4 x i1> undef, <4 x i1>* %ptr4xi1, align 1 ; CHECK-NEXT: disallowed:
bad pointer: store <4 x i1> undef, <4 x i1>* %ptr4xi1, align 1 | 207 store <4 x i1> undef, <4 x i1>* %ptr4xi1, align 1 ; CHECK-NEXT: disallowed:
bad pointer: store <4 x i1> undef, <4 x i1>* %ptr4xi1, align 1 |
208 store <8 x i1> undef, <8 x i1>* %ptr8xi1, align 1 ; CHECK-NEXT: disallowed:
bad pointer: store <8 x i1> undef, <8 x i1>* %ptr8xi1, align 1 | 208 store <8 x i1> undef, <8 x i1>* %ptr8xi1, align 1 ; CHECK-NEXT: disallowed:
bad pointer: store <8 x i1> undef, <8 x i1>* %ptr8xi1, align 1 |
209 store <16 x i1> undef, <16 x i1>* %ptr16xi1, align 1 ; CHECK-NEXT: disallowed:
bad pointer: store <16 x i1> undef, <16 x i1>* %ptr16xi1, align 1 | 209 store <16 x i1> undef, <16 x i1>* %ptr16xi1, align 1 ; CHECK-NEXT: disallowed:
bad pointer: store <16 x i1> undef, <16 x i1>* %ptr16xi1, align 1 |
210 | 210 |
211 ; Under- or over-aligned load/store are disallowed. | 211 ; Under- or over-aligned load/store are disallowed. |
212 %a1_8xi16 = load <8 x i16>* %ptr8xi16, align 1 ; CHECK-NEXT: disallowed:
bad alignment: %a1_8xi16 = load <8 x i16>* %ptr8xi16, align 1 | 212 %a1_8xi16 = load <8 x i16>, <8 x i16>* %ptr8xi16, align 1 ; CHECK-NEXT:
disallowed: bad alignment: %a1_8xi16 = load <8 x i16>, <8 x i16>* %ptr8xi16, ali
gn 1 |
213 %a1_4xi32 = load <4 x i32>* %ptr4xi32, align 1 ; CHECK-NEXT: disallowed:
bad alignment:»%a1_4xi32 = load <4 x i32>* %ptr4xi32, align 1 | 213 %a1_4xi32 = load <4 x i32>, <4 x i32>* %ptr4xi32, align 1 ; CHECK-NEXT:
disallowed: bad alignment:» %a1_4xi32 = load <4 x i32>, <4 x i32>* %ptr4xi32
, align 1 |
214 %a1_4xfloat = load <4 x float>* %ptr4xfloat, align 1 ; CHECK-NEXT: disallowed:
bad alignment:»%a1_4xfloat = load <4 x float>* %ptr4xfloat, align 1 | 214 %a1_4xfloat = load <4 x float>, <4 x float>* %ptr4xfloat, align 1 ; CHECK-NEXT
: disallowed: bad alignment:» %a1_4xfloat = load <4 x float>, <4 x float>* %pt
r4xfloat, align 1 |
215 | 215 |
216 %a16_16xi8 = load <16 x i8>* %ptr16xi8, align 16 ; CHECK-NEXT: disallowe
d: bad alignment: %a16_16xi8 = load <16 x i8>* %ptr16xi8, align 16 | 216 %a16_16xi8 = load <16 x i8>, <16 x i8>* %ptr16xi8, align 16 ; CHECK-NEXT
: disallowed: bad alignment: %a16_16xi8 = load <16 x i8>, <16 x i8>* %ptr16xi8,
align 16 |
217 %a16_8xi16 = load <8 x i16>* %ptr8xi16, align 16 ; CHECK-NEXT: disallowe
d: bad alignment: %a16_8xi16 = load <8 x i16>* %ptr8xi16, align 16 | 217 %a16_8xi16 = load <8 x i16>, <8 x i16>* %ptr8xi16, align 16 ; CHECK-NEXT
: disallowed: bad alignment: %a16_8xi16 = load <8 x i16>, <8 x i16>* %ptr8xi16,
align 16 |
218 %a16_4xi32 = load <4 x i32>* %ptr4xi32, align 16 ; CHECK-NEXT: disallowe
d: bad alignment: %a16_4xi32 = load <4 x i32>* %ptr4xi32, align 16 | 218 %a16_4xi32 = load <4 x i32>, <4 x i32>* %ptr4xi32, align 16 ; CHECK-NEXT
: disallowed: bad alignment: %a16_4xi32 = load <4 x i32>, <4 x i32>* %ptr4xi32,
align 16 |
219 %a16_4xfloat = load <4 x float>* %ptr4xfloat, align 16 ; CHECK-NEXT: disallowe
d: bad alignment: %a16_4xfloat = load <4 x float>* %ptr4xfloat, align 16 | 219 %a16_4xfloat = load <4 x float>, <4 x float>* %ptr4xfloat, align 16 ; CHECK-NE
XT: disallowed: bad alignment: %a16_4xfloat = load <4 x float>, <4 x float>* %pt
r4xfloat, align 16 |
220 | 220 |
221 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 1 ; CHECK-NEXT: disal
lowed: bad alignment: store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 1 | 221 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 1 ; CHECK-NEXT: disal
lowed: bad alignment: store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 1 |
222 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 1 ; CHECK-NEXT: disal
lowed: bad alignment: store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 1 | 222 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 1 ; CHECK-NEXT: disal
lowed: bad alignment: store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 1 |
223 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 1 ; CHECK-NEXT: disal
lowed: bad alignment: store <4 x float> undef, <4 x float>* %ptr4xfloat, align 1 | 223 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 1 ; CHECK-NEXT: disal
lowed: bad alignment: store <4 x float> undef, <4 x float>* %ptr4xfloat, align 1 |
224 | 224 |
225 store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 16 ; CHECK-NEXT: disa
llowed: bad alignment: store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 16 | 225 store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 16 ; CHECK-NEXT: disa
llowed: bad alignment: store <16 x i8> undef, <16 x i8>* %ptr16xi8, align 16 |
226 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 16 ; CHECK-NEXT: disa
llowed: bad alignment: store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 16 | 226 store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 16 ; CHECK-NEXT: disa
llowed: bad alignment: store <8 x i16> undef, <8 x i16>* %ptr8xi16, align 16 |
227 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 16 ; CHECK-NEXT: disa
llowed: bad alignment: store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 16 | 227 store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 16 ; CHECK-NEXT: disa
llowed: bad alignment: store <4 x i32> undef, <4 x i32>* %ptr4xi32, align 16 |
228 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 16 ; CHECK-NEXT: disa
llowed: bad alignment: store <4 x float> undef, <4 x float>* %ptr4xfloat, align
16 | 228 store <4 x float> undef, <4 x float>* %ptr4xfloat, align 16 ; CHECK-NEXT: disa
llowed: bad alignment: store <4 x float> undef, <4 x float>* %ptr4xfloat, align
16 |
229 | 229 |
230 ret void | 230 ret void |
231 } | 231 } |
232 | 232 |
233 define internal void @atomic() { | 233 define internal void @atomic() { |
234 ; CHECK: ERROR: Function atomic | 234 ; CHECK: ERROR: Function atomic |
235 %ptr = inttoptr i32 0 to i32* | 235 %ptr = inttoptr i32 0 to i32* |
236 | 236 |
237 ; CHECK-NOT: disallowed | 237 ; CHECK-NOT: disallowed |
238 %la = load atomic i32* %ptr seq_cst, align 4 ; CHECK: dis
allowed: atomic load: {{.*}} load atomic | 238 %la = load atomic i32, i32* %ptr seq_cst, align 4 ; CHECK
: disallowed: atomic load: {{.*}} load atomic |
239 %lv = load volatile i32* %ptr, align 4 ; CHECK: dis
allowed: volatile load: {{.*}} load volatile | 239 %lv = load volatile i32, i32* %ptr, align 4 ; CHECK
: disallowed: volatile load: {{.*}} load volatile |
240 store atomic i32 undef, i32* %ptr seq_cst, align 4 ; CHECK: dis
allowed: atomic store: store atomic | 240 store atomic i32 undef, i32* %ptr seq_cst, align 4 ; CHECK: dis
allowed: atomic store: store atomic |
241 store volatile i32 undef, i32* %ptr, align 4 ; CHECK: dis
allowed: volatile store: store volatile | 241 store volatile i32 undef, i32* %ptr, align 4 ; CHECK: dis
allowed: volatile store: store volatile |
242 fence acq_rel ; CHECK: dis
allowed: bad instruction opcode: fence | 242 fence acq_rel ; CHECK: dis
allowed: bad instruction opcode: fence |
243 %cmpx = cmpxchg i32* %ptr, i32 undef, i32 undef acq_rel monotonic ; CHECK: dis
allowed: bad instruction opcode: {{.*}} cmpxchg | 243 %cmpx = cmpxchg i32* %ptr, i32 undef, i32 undef acq_rel monotonic ; CHECK: dis
allowed: bad instruction opcode: {{.*}} cmpxchg |
244 %crm = atomicrmw add i32* %ptr, i32 1 acquire ; CHECK: dis
allowed: bad instruction opcode: {{.*}} atomicrmw | 244 %crm = atomicrmw add i32* %ptr, i32 1 acquire ; CHECK: dis
allowed: bad instruction opcode: {{.*}} atomicrmw |
245 ret void | 245 ret void |
246 } | 246 } |
247 | 247 |
248 define internal void @atomic_vector() { | 248 define internal void @atomic_vector() { |
249 ; CHECK: ERROR: Function atomic_vector | 249 ; CHECK: ERROR: Function atomic_vector |
250 %ptr = inttoptr i32 0 to <4 x i32>* | 250 %ptr = inttoptr i32 0 to <4 x i32>* |
251 | 251 |
252 ; CHECK-NOT: disallowed | 252 ; CHECK-NOT: disallowed |
253 %la = load atomic <4 x i32>* %ptr seq_cst, align 1 ; CHECK: disall
owed: atomic load: {{.*}} load atomic | 253 %la = load atomic <4 x i32>, <4 x i32>* %ptr seq_cst, align 1 ; CH
ECK: disallowed: atomic load: {{.*}} load atomic |
254 %lv = load volatile <4 x i32>* %ptr, align 1 ; CHECK: disall
owed: volatile load: {{.*}} load volatile | 254 %lv = load volatile <4 x i32>, <4 x i32>* %ptr, align 1 ; CH
ECK: disallowed: volatile load: {{.*}} load volatile |
255 store atomic <4 x i32> undef, <4 x i32>* %ptr seq_cst, align 1 ; CHECK: disall
owed: atomic store: store atomic | 255 store atomic <4 x i32> undef, <4 x i32>* %ptr seq_cst, align 1 ; CHECK: disall
owed: atomic store: store atomic |
256 store volatile <4 x i32> undef, <4 x i32>* %ptr, align 1 ; CHECK: disall
owed: volatile store: store volatile | 256 store volatile <4 x i32> undef, <4 x i32>* %ptr, align 1 ; CHECK: disall
owed: volatile store: store volatile |
257 ret void | 257 ret void |
258 } | 258 } |
259 | 259 |
260 define internal void @conversion() { | 260 define internal void @conversion() { |
261 ; CHECK-NOT: Function conversion | 261 ; CHECK-NOT: Function conversion |
262 ; Conversion operations | 262 ; Conversion operations |
263 %t = trunc i32 undef to i8 | 263 %t = trunc i32 undef to i8 |
264 %z = zext i8 undef to i32 | 264 %z = zext i8 undef to i32 |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 %val = va_arg i8* %va_list, i32 | 406 %val = va_arg i8* %va_list, i32 |
407 ret i32 %val | 407 ret i32 %val |
408 } | 408 } |
409 ; CHECK-NOT: disallowed | 409 ; CHECK-NOT: disallowed |
410 ; CHECK: disallowed: bad instruction opcode: {{.*}} va_arg | 410 ; CHECK: disallowed: bad instruction opcode: {{.*}} va_arg |
411 | 411 |
412 @global_var = internal global [4 x i8] zeroinitializer | 412 @global_var = internal global [4 x i8] zeroinitializer |
413 | 413 |
414 define internal void @constantexpr() { | 414 define internal void @constantexpr() { |
415 ; CHECK: ERROR: Function constantexpr | 415 ; CHECK: ERROR: Function constantexpr |
416 ptrtoint i8* getelementptr ([4 x i8]* @global_var, i32 1, i32 0) to i32 | 416 ptrtoint i8* getelementptr ([4 x i8], [4 x i8]* @global_var, i32 1, i32 0) to
i32 |
417 ret void | 417 ret void |
418 } | 418 } |
419 ; CHECK-NOT: disallowed | 419 ; CHECK-NOT: disallowed |
420 ; CHECK: disallowed: operand not InherentPtr: %1 = ptrtoint i8* getelementptr | 420 ; CHECK: disallowed: operand not InherentPtr: %1 = ptrtoint i8* getelementptr |
421 | 421 |
422 define internal void @inline_asm() { | 422 define internal void @inline_asm() { |
423 ; CHECK: ERROR: Function inline_asm | 423 ; CHECK: ERROR: Function inline_asm |
424 call void asm "foo", ""() | 424 call void asm "foo", ""() |
425 ret void | 425 ret void |
426 } | 426 } |
427 ; CHECK-NOT: disallowed | 427 ; CHECK-NOT: disallowed |
428 ; CHECK: disallowed: inline assembly: call void asm "foo", ""() | 428 ; CHECK: disallowed: inline assembly: call void asm "foo", ""() |
429 | 429 |
430 ; CHECK-NOT: disallowed | 430 ; CHECK-NOT: disallowed |
431 ; If another check is added, there should be a check-not in between each check | 431 ; If another check is added, there should be a check-not in between each check |
OLD | NEW |