| OLD | NEW |
| 1 ; RUN: not pnacl-abicheck < %s | FileCheck %s | 1 ; RUN: not pnacl-abicheck < %s | FileCheck %s |
| 2 | 2 |
| 3 ; Most arithmetic operations are not very useful on i1, so use of i1 | 3 ; Most arithmetic operations are not very useful on i1, so use of i1 |
| 4 ; is restricted to a subset of operations. | 4 ; is restricted to a subset of operations. |
| 5 | 5 |
| 6 | 6 |
| 7 ; i1 is allowed on these bitwise operations because: | 7 ; i1 is allowed on these bitwise operations because: |
| 8 ; * These operations never overflow. | 8 ; * These operations never overflow. |
| 9 ; * They do get generated in practice for combining conditions. | 9 ; * They do get generated in practice for combining conditions. |
| 10 define internal void @allowed_cases() { | 10 define internal void @allowed_cases() { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 ; CHECK-NOT: disallowed | 28 ; CHECK-NOT: disallowed |
| 29 | 29 |
| 30 | 30 |
| 31 define internal void @rejected_cases(i32 %ptr) { | 31 define internal void @rejected_cases(i32 %ptr) { |
| 32 ; Loads and stores of i1 are disallowed. This is done by rejecting | 32 ; Loads and stores of i1 are disallowed. This is done by rejecting |
| 33 ; i1* as a pointer type. | 33 ; i1* as a pointer type. |
| 34 %ptr.p = inttoptr i32 %ptr to i1* | 34 %ptr.p = inttoptr i32 %ptr to i1* |
| 35 ; CHECK: disallowed: bad result type: i1* %ptr.p = inttoptr | 35 ; CHECK: disallowed: bad result type: i1* %ptr.p = inttoptr |
| 36 %vptr.p = inttoptr i32 %ptr to <4 x i1>* | 36 %vptr.p = inttoptr i32 %ptr to <4 x i1>* |
| 37 ; CHECK: disallowed: bad result type: <4 x i1>* %vptr.p = inttoptr | 37 ; CHECK: disallowed: bad result type: <4 x i1>* %vptr.p = inttoptr |
| 38 load i1* %ptr.p, align 1 | 38 load i1, i1* %ptr.p, align 1 |
| 39 ; CHECK-NEXT: disallowed: bad pointer: {{.*}} load i1* | 39 ; CHECK-NEXT: disallowed: bad pointer: {{.*}} load i1, i1* |
| 40 load <4 x i1>* %vptr.p, align 4 | 40 load <4 x i1>, <4 x i1>* %vptr.p, align 4 |
| 41 ; CHECK-NEXT: disallowed: bad pointer: {{.*}} load <4 x i1>* | 41 ; CHECK-NEXT: disallowed: bad pointer: {{.*}} load <4 x i1>, <4 x i1>* |
| 42 | 42 |
| 43 ; Check that we don't allow weird sizes. | 43 ; Check that we don't allow weird sizes. |
| 44 add i31 0, 0 | 44 add i31 0, 0 |
| 45 ; CHECK-NEXT: disallowed: Invalid integer arithmetic type: {{.*}} add i31 | 45 ; CHECK-NEXT: disallowed: Invalid integer arithmetic type: {{.*}} add i31 |
| 46 | 46 |
| 47 ; i1 arithmetic is of dubious usefulness, so it is rejected. | 47 ; i1 arithmetic is of dubious usefulness, so it is rejected. |
| 48 add i1 0, 0 | 48 add i1 0, 0 |
| 49 ; CHECK-NEXT: disallowed: Invalid integer arithmetic type: {{.*}} add i1 | 49 ; CHECK-NEXT: disallowed: Invalid integer arithmetic type: {{.*}} add i1 |
| 50 sub i1 0, 0 | 50 sub i1 0, 0 |
| 51 ; CHECK-NEXT: disallowed: Invalid integer arithmetic type: {{.*}} sub i1 | 51 ; CHECK-NEXT: disallowed: Invalid integer arithmetic type: {{.*}} sub i1 |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 | 155 |
| 156 ret void | 156 ret void |
| 157 } | 157 } |
| 158 ; CHECK-NOT: disallowed | 158 ; CHECK-NOT: disallowed |
| 159 | 159 |
| 160 | 160 |
| 161 ; This stops the verifier from complaining about the lack of an entry point. | 161 ; This stops the verifier from complaining about the lack of an entry point. |
| 162 define void @_start(i32 %arg) { | 162 define void @_start(i32 %arg) { |
| 163 ret void | 163 ret void |
| 164 } | 164 } |
| OLD | NEW |