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