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 |