github.com/wasilibs/wazerox@v0.0.0-20240124024944-4923be63ab5f/internal/integration_test/spectest/v2/testdata/select.wast (about) 1 (module 2 ;; Auxiliary 3 (func $dummy) 4 (table $tab funcref (elem $dummy)) 5 (memory 1) 6 7 (func (export "select-i32") (param i32 i32 i32) (result i32) 8 (select (local.get 0) (local.get 1) (local.get 2)) 9 ) 10 (func (export "select-i64") (param i64 i64 i32) (result i64) 11 (select (local.get 0) (local.get 1) (local.get 2)) 12 ) 13 (func (export "select-f32") (param f32 f32 i32) (result f32) 14 (select (local.get 0) (local.get 1) (local.get 2)) 15 ) 16 (func (export "select-f64") (param f64 f64 i32) (result f64) 17 (select (local.get 0) (local.get 1) (local.get 2)) 18 ) 19 20 (func (export "select-i32-t") (param i32 i32 i32) (result i32) 21 (select (result i32) (local.get 0) (local.get 1) (local.get 2)) 22 ) 23 (func (export "select-i64-t") (param i64 i64 i32) (result i64) 24 (select (result i64) (local.get 0) (local.get 1) (local.get 2)) 25 ) 26 (func (export "select-f32-t") (param f32 f32 i32) (result f32) 27 (select (result f32) (local.get 0) (local.get 1) (local.get 2)) 28 ) 29 (func (export "select-f64-t") (param f64 f64 i32) (result f64) 30 (select (result f64) (local.get 0) (local.get 1) (local.get 2)) 31 ) 32 (func (export "select-funcref") (param funcref funcref i32) (result funcref) 33 (select (result funcref) (local.get 0) (local.get 1) (local.get 2)) 34 ) 35 (func (export "select-externref") (param externref externref i32) (result externref) 36 (select (result externref) (local.get 0) (local.get 1) (local.get 2)) 37 ) 38 39 ;; As the argument of control constructs and instructions 40 41 (func (export "as-select-first") (param i32) (result i32) 42 (select (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 2) (i32.const 3)) 43 ) 44 (func (export "as-select-mid") (param i32) (result i32) 45 (select (i32.const 2) (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 3)) 46 ) 47 (func (export "as-select-last") (param i32) (result i32) 48 (select (i32.const 2) (i32.const 3) (select (i32.const 0) (i32.const 1) (local.get 0))) 49 ) 50 51 (func (export "as-loop-first") (param i32) (result i32) 52 (loop (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy) (call $dummy)) 53 ) 54 (func (export "as-loop-mid") (param i32) (result i32) 55 (loop (result i32) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy)) 56 ) 57 (func (export "as-loop-last") (param i32) (result i32) 58 (loop (result i32) (call $dummy) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0))) 59 ) 60 61 (func (export "as-if-condition") (param i32) 62 (select (i32.const 2) (i32.const 3) (local.get 0)) (if (then (call $dummy))) 63 ) 64 (func (export "as-if-then") (param i32) (result i32) 65 (if (result i32) (i32.const 1) (then (select (i32.const 2) (i32.const 3) (local.get 0))) (else (i32.const 4))) 66 ) 67 (func (export "as-if-else") (param i32) (result i32) 68 (if (result i32) (i32.const 0) (then (i32.const 2)) (else (select (i32.const 2) (i32.const 3) (local.get 0)))) 69 ) 70 71 (func (export "as-br_if-first") (param i32) (result i32) 72 (block (result i32) (br_if 0 (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 4))) 73 ) 74 (func (export "as-br_if-last") (param i32) (result i32) 75 (block (result i32) (br_if 0 (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)))) 76 ) 77 78 (func (export "as-br_table-first") (param i32) (result i32) 79 (block (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 2) (br_table 0 0)) 80 ) 81 (func (export "as-br_table-last") (param i32) (result i32) 82 (block (result i32) (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)) (br_table 0 0)) 83 ) 84 85 (func $func (param i32 i32) (result i32) (local.get 0)) 86 (type $check (func (param i32 i32) (result i32))) 87 (table $t funcref (elem $func)) 88 (func (export "as-call_indirect-first") (param i32) (result i32) 89 (block (result i32) 90 (call_indirect $t (type $check) 91 (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 1) (i32.const 0) 92 ) 93 ) 94 ) 95 (func (export "as-call_indirect-mid") (param i32) (result i32) 96 (block (result i32) 97 (call_indirect $t (type $check) 98 (i32.const 1) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 0) 99 ) 100 ) 101 ) 102 (func (export "as-call_indirect-last") (param i32) (result i32) 103 (block (result i32) 104 (call_indirect $t (type $check) 105 (i32.const 1) (i32.const 4) (select (i32.const 2) (i32.const 3) (local.get 0)) 106 ) 107 ) 108 ) 109 110 (func (export "as-store-first") (param i32) 111 (select (i32.const 0) (i32.const 4) (local.get 0)) (i32.const 1) (i32.store) 112 ) 113 (func (export "as-store-last") (param i32) 114 (i32.const 8) (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.store) 115 ) 116 117 (func (export "as-memory.grow-value") (param i32) (result i32) 118 (memory.grow (select (i32.const 1) (i32.const 2) (local.get 0))) 119 ) 120 121 (func $f (param i32) (result i32) (local.get 0)) 122 123 (func (export "as-call-value") (param i32) (result i32) 124 (call $f (select (i32.const 1) (i32.const 2) (local.get 0))) 125 ) 126 (func (export "as-return-value") (param i32) (result i32) 127 (select (i32.const 1) (i32.const 2) (local.get 0)) (return) 128 ) 129 (func (export "as-drop-operand") (param i32) 130 (drop (select (i32.const 1) (i32.const 2) (local.get 0))) 131 ) 132 (func (export "as-br-value") (param i32) (result i32) 133 (block (result i32) (br 0 (select (i32.const 1) (i32.const 2) (local.get 0)))) 134 ) 135 (func (export "as-local.set-value") (param i32) (result i32) 136 (local i32) (local.set 0 (select (i32.const 1) (i32.const 2) (local.get 0))) (local.get 0) 137 ) 138 (func (export "as-local.tee-value") (param i32) (result i32) 139 (local.tee 0 (select (i32.const 1) (i32.const 2) (local.get 0))) 140 ) 141 (global $a (mut i32) (i32.const 10)) 142 (func (export "as-global.set-value") (param i32) (result i32) 143 (global.set $a (select (i32.const 1) (i32.const 2) (local.get 0))) 144 (global.get $a) 145 ) 146 (func (export "as-load-operand") (param i32) (result i32) 147 (i32.load (select (i32.const 0) (i32.const 4) (local.get 0))) 148 ) 149 150 (func (export "as-unary-operand") (param i32) (result i32) 151 (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) 152 ) 153 (func (export "as-binary-operand") (param i32) (result i32) 154 (i32.mul 155 (select (i32.const 1) (i32.const 2) (local.get 0)) 156 (select (i32.const 1) (i32.const 2) (local.get 0)) 157 ) 158 ) 159 (func (export "as-test-operand") (param i32) (result i32) 160 (block (result i32) 161 (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) 162 ) 163 ) 164 165 (func (export "as-compare-left") (param i32) (result i32) 166 (block (result i32) 167 (i32.le_s (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.const 1)) 168 ) 169 ) 170 (func (export "as-compare-right") (param i32) (result i32) 171 (block (result i32) 172 (i32.ne (i32.const 1) (select (i32.const 0) (i32.const 1) (local.get 0))) 173 ) 174 ) 175 176 (func (export "as-convert-operand") (param i32) (result i32) 177 (block (result i32) 178 (i32.wrap_i64 (select (i64.const 1) (i64.const 0) (local.get 0))) 179 ) 180 ) 181 ) 182 183 (assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) 184 (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) 185 (assert_return (invoke "select-f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) 186 (assert_return (invoke "select-f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) 187 188 (assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) 189 (assert_return (invoke "select-i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) 190 (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) 191 (assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) 192 193 (assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) 194 (assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) 195 (assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) 196 (assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) 197 (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) 198 (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) 199 (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) 200 (assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) 201 202 (assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) 203 (assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) 204 (assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) 205 (assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) 206 (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) 207 (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) 208 (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) 209 (assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) 210 211 (assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) 212 (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) 213 (assert_return (invoke "select-f32-t" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) 214 (assert_return (invoke "select-f64-t" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) 215 (assert_return (invoke "select-funcref" (ref.null func) (ref.null func) (i32.const 1)) (ref.null func)) 216 (assert_return (invoke "select-externref" (ref.extern 1) (ref.extern 2) (i32.const 1)) (ref.extern 1)) 217 218 (assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) 219 (assert_return (invoke "select-i32-t" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) 220 (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) 221 (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) 222 (assert_return (invoke "select-externref" (ref.extern 1) (ref.extern 2) (i32.const 0)) (ref.extern 2)) 223 (assert_return (invoke "select-externref" (ref.extern 2) (ref.extern 1) (i32.const 0)) (ref.extern 1)) 224 225 (assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) 226 (assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) 227 (assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) 228 (assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) 229 (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) 230 (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) 231 (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) 232 (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) 233 234 (assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) 235 (assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) 236 (assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) 237 (assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) 238 (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) 239 (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) 240 (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) 241 (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) 242 243 (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 1)) 244 (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 0)) 245 (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2)) 246 (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2)) 247 (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 2)) 248 (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 3)) 249 250 (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 3)) 251 (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 2)) 252 (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 3)) 253 (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 2)) 254 (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 3)) 255 (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 2)) 256 257 (assert_return (invoke "as-if-condition" (i32.const 0))) 258 (assert_return (invoke "as-if-condition" (i32.const 1))) 259 (assert_return (invoke "as-if-then" (i32.const 0)) (i32.const 3)) 260 (assert_return (invoke "as-if-then" (i32.const 1)) (i32.const 2)) 261 (assert_return (invoke "as-if-else" (i32.const 0)) (i32.const 3)) 262 (assert_return (invoke "as-if-else" (i32.const 1)) (i32.const 2)) 263 264 (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 3)) 265 (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 2)) 266 (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 2)) 267 (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2)) 268 269 (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 3)) 270 (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 2)) 271 (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2)) 272 (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2)) 273 274 (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 3)) 275 (assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 2)) 276 (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 1)) 277 (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 1)) 278 (assert_trap (invoke "as-call_indirect-last" (i32.const 0)) "undefined element") 279 (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element") 280 281 (assert_return (invoke "as-store-first" (i32.const 0))) 282 (assert_return (invoke "as-store-first" (i32.const 1))) 283 (assert_return (invoke "as-store-last" (i32.const 0))) 284 (assert_return (invoke "as-store-last" (i32.const 1))) 285 286 (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1)) 287 (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 3)) 288 289 (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 2)) 290 (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1)) 291 (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 2)) 292 (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1)) 293 (assert_return (invoke "as-drop-operand" (i32.const 0))) 294 (assert_return (invoke "as-drop-operand" (i32.const 1))) 295 (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 2)) 296 (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1)) 297 (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 2)) 298 (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1)) 299 (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 2)) 300 (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) 301 (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 2)) 302 (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) 303 (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 1)) 304 (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 1)) 305 306 (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) 307 (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 1)) 308 (assert_return (invoke "as-binary-operand" (i32.const 0)) (i32.const 4)) 309 (assert_return (invoke "as-binary-operand" (i32.const 1)) (i32.const 1)) 310 (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 0)) 311 (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 1)) 312 (assert_return (invoke "as-compare-left" (i32.const 0)) (i32.const 0)) 313 (assert_return (invoke "as-compare-left" (i32.const 1)) (i32.const 1)) 314 (assert_return (invoke "as-compare-right" (i32.const 0)) (i32.const 0)) 315 (assert_return (invoke "as-compare-right" (i32.const 1)) (i32.const 1)) 316 (assert_return (invoke "as-convert-operand" (i32.const 0)) (i32.const 0)) 317 (assert_return (invoke "as-convert-operand" (i32.const 1)) (i32.const 1)) 318 319 (assert_invalid 320 (module (func $arity-0-implicit (select (nop) (nop) (i32.const 1)))) 321 "type mismatch" 322 ) 323 (assert_invalid 324 (module (func $arity-0 (select (result) (nop) (nop) (i32.const 1)))) 325 "invalid result arity" 326 ) 327 (assert_invalid 328 (module (func $arity-2 (result i32 i32) 329 (select (result i32 i32) 330 (i32.const 0) (i32.const 0) 331 (i32.const 0) (i32.const 0) 332 (i32.const 1) 333 ) 334 )) 335 "invalid result arity" 336 ) 337 338 339 (assert_invalid 340 (module (func $type-externref-implicit (param $r externref) 341 (drop (select (local.get $r) (local.get $r) (i32.const 1))) 342 )) 343 "type mismatch" 344 ) 345 346 (assert_invalid 347 (module (func $type-num-vs-num 348 (drop (select (i32.const 1) (i64.const 1) (i32.const 1))) 349 )) 350 "type mismatch" 351 ) 352 (assert_invalid 353 (module (func $type-num-vs-num 354 (drop (select (i32.const 1) (f32.const 1.0) (i32.const 1))) 355 )) 356 "type mismatch" 357 ) 358 (assert_invalid 359 (module (func $type-num-vs-num 360 (drop (select (i32.const 1) (f64.const 1.0) (i32.const 1))) 361 )) 362 "type mismatch" 363 ) 364 365 (assert_invalid 366 (module (func $type-num-vs-num (select (i32.const 1) (i64.const 1) (i32.const 1)) (drop))) 367 "type mismatch" 368 ) 369 (assert_invalid 370 (module (func $type-num-vs-num (select (i32.const 1) (f32.const 1.0) (i32.const 1)) (drop))) 371 "type mismatch" 372 ) 373 (assert_invalid 374 (module (func $type-num-vs-num (select (i32.const 1) (i64.const 1) (i32.const 1)) (drop))) 375 "type mismatch" 376 ) 377 (assert_invalid 378 (module (func $type-num-vs-num (select (i32.const 1) (f32.const 1.0) (i32.const 1)) (drop))) 379 "type mismatch" 380 ) 381 (assert_invalid 382 (module (func $type-num-vs-num (select (i32.const 1) (f64.const 1.0) (i32.const 1)) (drop))) 383 "type mismatch" 384 ) 385 386 387 (assert_invalid 388 (module 389 (func $type-1st-operand-empty 390 (select) (drop) 391 ) 392 ) 393 "type mismatch" 394 ) 395 (assert_invalid 396 (module 397 (func $type-2nd-operand-empty 398 (i32.const 0) (select) (drop) 399 ) 400 ) 401 "type mismatch" 402 ) 403 (assert_invalid 404 (module 405 (func $type-3rd-operand-empty 406 (i32.const 0) (i32.const 0) (select) (drop) 407 ) 408 ) 409 "type mismatch" 410 ) 411 (assert_invalid 412 (module 413 (func $type-1st-operand-empty-in-block 414 (i32.const 0) (i32.const 0) (i32.const 0) 415 (block (select) (drop)) 416 ) 417 ) 418 "type mismatch" 419 ) 420 (assert_invalid 421 (module 422 (func $type-2nd-operand-empty-in-block 423 (i32.const 0) (i32.const 0) 424 (block (i32.const 0) (select) (drop)) 425 ) 426 ) 427 "type mismatch" 428 ) 429 (assert_invalid 430 (module 431 (func $type-3rd-operand-empty-in-block 432 (i32.const 0) 433 (block (i32.const 0) (i32.const 0) (select) (drop)) 434 ) 435 ) 436 "type mismatch" 437 ) 438 (assert_invalid 439 (module 440 (func $type-1st-operand-empty-in-loop 441 (i32.const 0) (i32.const 0) (i32.const 0) 442 (loop (select) (drop)) 443 ) 444 ) 445 "type mismatch" 446 ) 447 (assert_invalid 448 (module 449 (func $type-2nd-operand-empty-in-loop 450 (i32.const 0) (i32.const 0) 451 (loop (i32.const 0) (select) (drop)) 452 ) 453 ) 454 "type mismatch" 455 ) 456 (assert_invalid 457 (module 458 (func $type-3rd-operand-empty-in-loop 459 (i32.const 0) 460 (loop (i32.const 0) (i32.const 0) (select) (drop)) 461 ) 462 ) 463 "type mismatch" 464 ) 465 (assert_invalid 466 (module 467 (func $type-1st-operand-empty-in-then 468 (i32.const 0) (i32.const 0) (i32.const 0) 469 (if (then (select) (drop))) 470 ) 471 ) 472 "type mismatch" 473 ) 474 (assert_invalid 475 (module 476 (func $type-2nd-operand-empty-in-then 477 (i32.const 0) (i32.const 0) 478 (if (then (i32.const 0) (select) (drop))) 479 ) 480 ) 481 "type mismatch" 482 ) 483 (assert_invalid 484 (module 485 (func $type-3rd-operand-empty-in-then 486 (i32.const 0) 487 (if (then (i32.const 0) (i32.const 0) (select) (drop))) 488 ) 489 ) 490 "type mismatch" 491 ) 492 493 ;; Third operand must be i32 494 495 (assert_invalid 496 (module (func (select (i32.const 1) (i32.const 1) (i64.const 1)) (drop))) 497 "type mismatch" 498 ) 499 (assert_invalid 500 (module (func (select (i32.const 1) (i32.const 1) (f32.const 1)) (drop))) 501 "type mismatch" 502 ) 503 (assert_invalid 504 (module (func (select (i32.const 1) (i32.const 1) (f64.const 1)) (drop))) 505 "type mismatch" 506 ) 507 508 ;; Result of select has type of first two operands 509 510 (assert_invalid 511 (module (func (result i32) (select (i64.const 1) (i64.const 1) (i32.const 1)))) 512 "type mismatch" 513 ) 514 515 516 ;; Flat syntax 517 518 (module 519 (table 1 funcref) 520 (func (result i32) unreachable select) 521 (func (result i32) unreachable select nop) 522 (func (result i32) unreachable select (select)) 523 (func (result i32) unreachable select select) 524 (func (result i32) unreachable select select select) 525 (func (result i32) unreachable select (result i32)) 526 (func (result i32) unreachable select (result i32) (result)) 527 (func (result i32) unreachable select (result i32) (result) select) 528 (func (result i32) unreachable select (result) (result i32) select (result i32)) 529 (func (result i32) unreachable select call_indirect) 530 (func (result i32) unreachable select call_indirect select) 531 )