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