OLD | NEW |
1 ; RUN: not pnacl-abicheck < %s | FileCheck %s | 1 ; RUN: not pnacl-abicheck < %s | FileCheck %s |
2 ; Test types allowed by PNaCl ABI | 2 ; Test types allowed by PNaCl ABI |
3 | 3 |
4 | 4 |
5 ; CHECK: Function badReturn has disallowed type: half* () | 5 ; CHECK: Function badReturn has disallowed type: half* () |
6 define internal half* @badReturn() { | 6 define internal half* @badReturn() { |
7 unreachable | 7 unreachable |
8 } | 8 } |
9 | 9 |
10 ; CHECK: Function badArgType1 has disallowed type: void (half, i32) | 10 ; CHECK: Function badArgType1 has disallowed type: void (half, i32) |
11 define internal void @badArgType1(half %a, i32 %b) { | 11 define internal void @badArgType1(half %a, i32 %b) { |
12 ret void | 12 ret void |
13 } | 13 } |
14 ; CHECK: Function badArgType2 has disallowed type: void (i32, half) | 14 ; CHECK: Function badArgType2 has disallowed type: void (i32, half) |
15 define internal void @badArgType2(i32 %a, half %b) { | 15 define internal void @badArgType2(i32 %a, half %b) { |
16 ret void | 16 ret void |
17 } | 17 } |
18 | 18 |
19 | 19 |
20 define internal void @func() { | 20 define internal void @func() { |
21 entry: | 21 entry: |
22 br label %block | 22 br label %block |
23 block: | 23 block: |
24 | 24 |
25 ; We test for allowed/disallowed types via phi nodes. This gives us | 25 ; We test for allowed/disallowed types via phi nodes. This gives us |
26 ; a uniform way to test any type. | 26 ; a uniform way to test any type. |
27 | 27 |
28 ; Allowed types | 28 ; Allowed types |
29 | 29 |
| 30 ; Scalars. |
30 phi i1 [ undef, %entry ] | 31 phi i1 [ undef, %entry ] |
31 phi i8 [ undef, %entry ] | 32 phi i8 [ undef, %entry ] |
32 phi i16 [ undef, %entry ] | 33 phi i16 [ undef, %entry ] |
33 phi i32 [ undef, %entry ] | 34 phi i32 [ undef, %entry ] |
34 phi i64 [ undef, %entry ] | 35 phi i64 [ undef, %entry ] |
35 phi float [ undef, %entry ] | 36 phi float [ undef, %entry ] |
36 phi double [ undef, %entry ] | 37 phi double [ undef, %entry ] |
| 38 ; Vectors. |
| 39 phi <4 x i1> [ undef, %entry ] |
| 40 phi <8 x i1> [ undef, %entry ] |
| 41 phi <16 x i1> [ undef, %entry ] |
| 42 phi <16 x i8> [ undef, %entry ] |
| 43 phi <8 x i16> [ undef, %entry ] |
| 44 phi <4 x i32> [ undef, %entry ] |
| 45 phi <4 x float> [ undef, %entry ] |
37 ; CHECK-NOT: disallowed | 46 ; CHECK-NOT: disallowed |
38 | 47 |
39 | 48 |
40 ; Disallowed integer types | 49 ; Disallowed integer types |
41 | 50 |
42 phi i4 [ undef, %entry ] | 51 phi i4 [ undef, %entry ] |
43 ; CHECK: Function func disallowed: bad operand: {{.*}} i4 | 52 ; CHECK: Function func disallowed: bad operand: {{.*}} i4 |
44 | 53 |
45 phi i33 [ undef, %entry ] | 54 phi i33 [ undef, %entry ] |
46 ; CHECK-NEXT: disallowed: bad operand: {{.*}} i33 | 55 ; CHECK-NEXT: disallowed: bad operand: {{.*}} i33 |
(...skipping 30 matching lines...) Expand all Loading... |
77 | 86 |
78 phi { i32, float } [ undef, %entry ] | 87 phi { i32, float } [ undef, %entry ] |
79 ; CHECK-NEXT: disallowed: bad operand: {{.*}} { i32, float } | 88 ; CHECK-NEXT: disallowed: bad operand: {{.*}} { i32, float } |
80 | 89 |
81 phi void (i32)* [ undef, %entry ] | 90 phi void (i32)* [ undef, %entry ] |
82 ; CHECK-NEXT: disallowed: bad operand: {{.*}} void (i32)* | 91 ; CHECK-NEXT: disallowed: bad operand: {{.*}} void (i32)* |
83 | 92 |
84 phi <{ i8, i32 }> [ undef, %entry ] | 93 phi <{ i8, i32 }> [ undef, %entry ] |
85 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <{ i8, i32 }> | 94 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <{ i8, i32 }> |
86 | 95 |
87 ; Vector types are disallowed | 96 ; Vector types of weird bit width are disallowed |
| 97 phi <1 x i1> [ undef, %entry ] |
| 98 phi <3 x i1> [ undef, %entry ] |
| 99 phi <17 x i1> [ undef, %entry ] |
| 100 phi <1 x i32> [ undef, %entry ] |
88 phi <2 x i32> [ undef, %entry ] | 101 phi <2 x i32> [ undef, %entry ] |
| 102 phi <3 x i32> [ undef, %entry ] |
| 103 phi <5 x i32> [ undef, %entry ] |
| 104 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <1 x i1> |
| 105 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <3 x i1> |
| 106 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <17 x i1> |
| 107 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <1 x i32> |
89 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <2 x i32> | 108 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <2 x i32> |
| 109 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <3 x i32> |
| 110 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <5 x i32> |
| 111 |
| 112 ; i64 and double vectors are currently disallowed, and so are the |
| 113 ; corresponding bool vectors. |
| 114 phi <2 x i1> [ undef, %entry ] |
| 115 phi <2 x i64> [ undef, %entry ] |
| 116 phi <2 x double> [ undef, %entry ] |
| 117 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <2 x i1> |
| 118 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <2 x i64> |
| 119 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <2 x double> |
| 120 |
| 121 ; 256-bit width vectors are currently disallowed, and so are the |
| 122 ; corresponding bool vectors. |
| 123 phi <32 x i1> [ undef, %entry ] |
| 124 phi <32 x i8> [ undef, %entry ] |
| 125 phi <16 x i16> [ undef, %entry ] |
| 126 phi <8 x i32> [ undef, %entry ] |
| 127 phi <4 x i64> [ undef, %entry ] |
| 128 phi <8 x float> [ undef, %entry ] |
| 129 phi <4 x double> [ undef, %entry ] |
| 130 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <32 x i1> |
| 131 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <32 x i8> |
| 132 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <16 x i16> |
| 133 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <8 x i32> |
| 134 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <4 x i64> |
| 135 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <8 x float> |
| 136 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <4 x double> |
| 137 |
| 138 ; 512-bit width vectors are currently disallowed, and so are the |
| 139 ; corresponding bool vectors. |
| 140 phi <64 x i1> [ undef, %entry ] |
| 141 phi <64 x i8> [ undef, %entry ] |
| 142 phi <32 x i16> [ undef, %entry ] |
| 143 phi <16 x i32> [ undef, %entry ] |
| 144 phi <8 x i64> [ undef, %entry ] |
| 145 phi <16 x float> [ undef, %entry ] |
| 146 phi <8 x double> [ undef, %entry ] |
| 147 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <64 x i1> |
| 148 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <64 x i8> |
| 149 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <32 x i16> |
| 150 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <16 x i32> |
| 151 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <8 x i64> |
| 152 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <16 x float> |
| 153 ; CHECK-NEXT: disallowed: bad operand: {{.*}} <8 x double> |
90 | 154 |
91 ret void | 155 ret void |
92 } | 156 } |
93 | 157 |
94 | 158 |
95 ; Named types. With the current implementation, named types are legal | 159 ; Named types. With the current implementation, named types are legal |
96 ; until they are actually attempted to be used. Might want to fix that. | 160 ; until they are actually attempted to be used. Might want to fix that. |
97 %struct.s1 = type { half, float} | 161 %struct.s1 = type { half, float} |
98 %struct.s2 = type { i32, i32} | 162 %struct.s2 = type { i32, i32} |
99 | 163 |
(...skipping 27 matching lines...) Expand all Loading... |
127 block: | 191 block: |
128 | 192 |
129 phi %struct.snake [ undef, %entry ] | 193 phi %struct.snake [ undef, %entry ] |
130 ; CHECK: disallowed: bad operand: {{.*}} %struct.snake | 194 ; CHECK: disallowed: bad operand: {{.*}} %struct.snake |
131 | 195 |
132 phi %struct.linked [ undef, %entry ] | 196 phi %struct.linked [ undef, %entry ] |
133 ; CHECK-NEXT: disallowed: bad operand: {{.*}} %struct.linked | 197 ; CHECK-NEXT: disallowed: bad operand: {{.*}} %struct.linked |
134 | 198 |
135 ret void | 199 ret void |
136 } | 200 } |
OLD | NEW |