github.com/tetratelabs/wazero@v1.7.3-0.20240513003603-48f702e154b5/internal/integration_test/spectest/v1/testdata/imports.wast (about) 1 ;; Auxiliary module to import from 2 3 (module 4 (func (export "func")) 5 (func (export "func-i32") (param i32)) 6 (func (export "func-f32") (param f32)) 7 (func (export "func->i32") (result i32) (i32.const 22)) 8 (func (export "func->f32") (result f32) (f32.const 11)) 9 (func (export "func-i32->i32") (param i32) (result i32) (local.get 0)) 10 (func (export "func-i64->i64") (param i64) (result i64) (local.get 0)) 11 (global (export "global-i32") i32 (i32.const 55)) 12 (global (export "global-f32") f32 (f32.const 44)) 13 (table (export "table-10-inf") 10 funcref) 14 ;; (table (export "table-10-20") 10 20 funcref) 15 (memory (export "memory-2-inf") 2) 16 ;; (memory (export "memory-2-4") 2 4) 17 ) 18 19 (register "test") 20 21 22 ;; Functions 23 24 (module 25 (type $func_i32 (func (param i32))) 26 (type $func_i64 (func (param i64))) 27 (type $func_f32 (func (param f32))) 28 (type $func_f64 (func (param f64))) 29 30 (import "spectest" "print_i32" (func (param i32))) 31 ;; JavaScript can't handle i64 yet. 32 ;; (func (import "spectest" "print_i64") (param i64)) 33 (import "spectest" "print_i32" (func $print_i32 (param i32))) 34 ;; JavaScript can't handle i64 yet. 35 ;; (import "spectest" "print_i64" (func $print_i64 (param i64))) 36 (import "spectest" "print_f32" (func $print_f32 (param f32))) 37 (import "spectest" "print_f64" (func $print_f64 (param f64))) 38 (import "spectest" "print_i32_f32" (func $print_i32_f32 (param i32 f32))) 39 (import "spectest" "print_f64_f64" (func $print_f64_f64 (param f64 f64))) 40 (func $print_i32-2 (import "spectest" "print_i32") (param i32)) 41 (func $print_f64-2 (import "spectest" "print_f64") (param f64)) 42 (import "test" "func-i64->i64" (func $i64->i64 (param i64) (result i64))) 43 44 (func (export "p1") (import "spectest" "print_i32") (param i32)) 45 (func $p (export "p2") (import "spectest" "print_i32") (param i32)) 46 (func (export "p3") (export "p4") (import "spectest" "print_i32") (param i32)) 47 (func (export "p5") (import "spectest" "print_i32") (type 0)) 48 (func (export "p6") (import "spectest" "print_i32") (type 0) (param i32) (result)) 49 50 (import "spectest" "print_i32" (func (type $forward))) 51 (func (import "spectest" "print_i32") (type $forward)) 52 (type $forward (func (param i32))) 53 54 (table funcref (elem $print_i32 $print_f64)) 55 56 (func (export "print32") (param $i i32) 57 (local $x f32) 58 (local.set $x (f32.convert_i32_s (local.get $i))) 59 (call 0 (local.get $i)) 60 (call $print_i32_f32 61 (i32.add (local.get $i) (i32.const 1)) 62 (f32.const 42) 63 ) 64 (call $print_i32 (local.get $i)) 65 (call $print_i32-2 (local.get $i)) 66 (call $print_f32 (local.get $x)) 67 (call_indirect (type $func_i32) (local.get $i) (i32.const 0)) 68 ) 69 70 (func (export "print64") (param $i i64) 71 (local $x f64) 72 (local.set $x (f64.convert_i64_s (call $i64->i64 (local.get $i)))) 73 ;; JavaScript can't handle i64 yet. 74 ;; (call 1 (local.get $i)) 75 (call $print_f64_f64 76 (f64.add (local.get $x) (f64.const 1)) 77 (f64.const 53) 78 ) 79 ;; JavaScript can't handle i64 yet. 80 ;; (call $print_i64 (local.get $i)) 81 (call $print_f64 (local.get $x)) 82 (call $print_f64-2 (local.get $x)) 83 (call_indirect (type $func_f64) (local.get $x) (i32.const 1)) 84 ) 85 ) 86 87 (assert_return (invoke "print32" (i32.const 13))) 88 (assert_return (invoke "print64" (i64.const 24))) 89 90 (assert_invalid 91 (module 92 (type (func (result i32))) 93 (import "test" "func" (func (type 1))) 94 ) 95 "unknown type" 96 ) 97 98 (module (import "test" "func" (func))) 99 (module (import "test" "func-i32" (func (param i32)))) 100 (module (import "test" "func-f32" (func (param f32)))) 101 (module (import "test" "func->i32" (func (result i32)))) 102 (module (import "test" "func->f32" (func (result f32)))) 103 (module (import "test" "func-i32->i32" (func (param i32) (result i32)))) 104 (module (import "test" "func-i64->i64" (func (param i64) (result i64)))) 105 106 (assert_unlinkable 107 (module (import "test" "unknown" (func))) 108 "unknown import" 109 ) 110 (assert_unlinkable 111 (module (import "spectest" "unknown" (func))) 112 "unknown import" 113 ) 114 115 (assert_unlinkable 116 (module (import "test" "func" (func (param i32)))) 117 "incompatible import type" 118 ) 119 (assert_unlinkable 120 (module (import "test" "func" (func (result i32)))) 121 "incompatible import type" 122 ) 123 (assert_unlinkable 124 (module (import "test" "func" (func (param i32) (result i32)))) 125 "incompatible import type" 126 ) 127 (assert_unlinkable 128 (module (import "test" "func-i32" (func))) 129 "incompatible import type" 130 ) 131 (assert_unlinkable 132 (module (import "test" "func-i32" (func (result i32)))) 133 "incompatible import type" 134 ) 135 (assert_unlinkable 136 (module (import "test" "func-i32" (func (param f32)))) 137 "incompatible import type" 138 ) 139 (assert_unlinkable 140 (module (import "test" "func-i32" (func (param i64)))) 141 "incompatible import type" 142 ) 143 (assert_unlinkable 144 (module (import "test" "func-i32" (func (param i32) (result i32)))) 145 "incompatible import type" 146 ) 147 (assert_unlinkable 148 (module (import "test" "func->i32" (func))) 149 "incompatible import type" 150 ) 151 (assert_unlinkable 152 (module (import "test" "func->i32" (func (param i32)))) 153 "incompatible import type" 154 ) 155 (assert_unlinkable 156 (module (import "test" "func->i32" (func (result f32)))) 157 "incompatible import type" 158 ) 159 (assert_unlinkable 160 (module (import "test" "func->i32" (func (result i64)))) 161 "incompatible import type" 162 ) 163 (assert_unlinkable 164 (module (import "test" "func->i32" (func (param i32) (result i32)))) 165 "incompatible import type" 166 ) 167 (assert_unlinkable 168 (module (import "test" "func-i32->i32" (func))) 169 "incompatible import type" 170 ) 171 (assert_unlinkable 172 (module (import "test" "func-i32->i32" (func (param i32)))) 173 "incompatible import type" 174 ) 175 (assert_unlinkable 176 (module (import "test" "func-i32->i32" (func (result i32)))) 177 "incompatible import type" 178 ) 179 180 (assert_unlinkable 181 (module (import "test" "global-i32" (func (result i32)))) 182 "incompatible import type" 183 ) 184 (assert_unlinkable 185 (module (import "test" "table-10-inf" (func))) 186 "incompatible import type" 187 ) 188 (assert_unlinkable 189 (module (import "test" "memory-2-inf" (func))) 190 "incompatible import type" 191 ) 192 (assert_unlinkable 193 (module (import "spectest" "global_i32" (func))) 194 "incompatible import type" 195 ) 196 (assert_unlinkable 197 (module (import "spectest" "table" (func))) 198 "incompatible import type" 199 ) 200 (assert_unlinkable 201 (module (import "spectest" "memory" (func))) 202 "incompatible import type" 203 ) 204 205 206 ;; Globals 207 208 (module 209 (import "spectest" "global_i32" (global i32)) 210 (global (import "spectest" "global_i32") i32) 211 212 (import "spectest" "global_i32" (global $x i32)) 213 (global $y (import "spectest" "global_i32") i32) 214 215 ;; JavaScript can't handle i64 yet. 216 ;; (import "spectest" "global_i64" (global i64)) 217 (import "spectest" "global_f32" (global f32)) 218 (import "spectest" "global_f64" (global f64)) 219 220 (func (export "get-0") (result i32) (global.get 0)) 221 (func (export "get-1") (result i32) (global.get 1)) 222 (func (export "get-x") (result i32) (global.get $x)) 223 (func (export "get-y") (result i32) (global.get $y)) 224 ) 225 226 (assert_return (invoke "get-0") (i32.const 666)) 227 (assert_return (invoke "get-1") (i32.const 666)) 228 (assert_return (invoke "get-x") (i32.const 666)) 229 (assert_return (invoke "get-y") (i32.const 666)) 230 231 (module (import "test" "global-i32" (global i32))) 232 (module (import "test" "global-f32" (global f32))) 233 234 (assert_unlinkable 235 (module (import "test" "unknown" (global i32))) 236 "unknown import" 237 ) 238 (assert_unlinkable 239 (module (import "spectest" "unknown" (global i32))) 240 "unknown import" 241 ) 242 243 (assert_unlinkable 244 (module (import "test" "func" (global i32))) 245 "incompatible import type" 246 ) 247 (assert_unlinkable 248 (module (import "test" "table-10-inf" (global i32))) 249 "incompatible import type" 250 ) 251 (assert_unlinkable 252 (module (import "test" "memory-2-inf" (global i32))) 253 "incompatible import type" 254 ) 255 (assert_unlinkable 256 (module (import "spectest" "print_i32" (global i32))) 257 "incompatible import type" 258 ) 259 (assert_unlinkable 260 (module (import "spectest" "table" (global i32))) 261 "incompatible import type" 262 ) 263 (assert_unlinkable 264 (module (import "spectest" "memory" (global i32))) 265 "incompatible import type" 266 ) 267 268 269 ;; Tables 270 271 (module 272 (type (func (result i32))) 273 (import "spectest" "table" (table 10 20 funcref)) 274 (elem 0 (i32.const 1) $f $g) 275 276 (func (export "call") (param i32) (result i32) 277 (call_indirect (type 0) (local.get 0)) 278 ) 279 (func $f (result i32) (i32.const 11)) 280 (func $g (result i32) (i32.const 22)) 281 ) 282 283 (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") 284 (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) 285 (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) 286 (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") 287 (assert_trap (invoke "call" (i32.const 100)) "undefined element") 288 289 290 (module 291 (type (func (result i32))) 292 (table (import "spectest" "table") 10 20 funcref) 293 (elem 0 (i32.const 1) $f $g) 294 295 (func (export "call") (param i32) (result i32) 296 (call_indirect (type 0) (local.get 0)) 297 ) 298 (func $f (result i32) (i32.const 11)) 299 (func $g (result i32) (i32.const 22)) 300 ) 301 302 (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") 303 (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) 304 (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) 305 (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") 306 (assert_trap (invoke "call" (i32.const 100)) "undefined element") 307 308 309 (assert_invalid 310 (module (import "" "" (table 10 funcref)) (import "" "" (table 10 funcref))) 311 "multiple tables" 312 ) 313 (assert_invalid 314 (module (import "" "" (table 10 funcref)) (table 10 funcref)) 315 "multiple tables" 316 ) 317 (assert_invalid 318 (module (table 10 funcref) (table 10 funcref)) 319 "multiple tables" 320 ) 321 322 (module (import "test" "table-10-inf" (table 10 funcref))) 323 (module (import "test" "table-10-inf" (table 5 funcref))) 324 (module (import "test" "table-10-inf" (table 0 funcref))) 325 (module (import "spectest" "table" (table 10 funcref))) 326 (module (import "spectest" "table" (table 5 funcref))) 327 (module (import "spectest" "table" (table 0 funcref))) 328 (module (import "spectest" "table" (table 10 20 funcref))) 329 (module (import "spectest" "table" (table 5 20 funcref))) 330 (module (import "spectest" "table" (table 0 20 funcref))) 331 (module (import "spectest" "table" (table 10 25 funcref))) 332 (module (import "spectest" "table" (table 5 25 funcref))) 333 334 (assert_unlinkable 335 (module (import "test" "unknown" (table 10 funcref))) 336 "unknown import" 337 ) 338 (assert_unlinkable 339 (module (import "spectest" "unknown" (table 10 funcref))) 340 "unknown import" 341 ) 342 343 (assert_unlinkable 344 (module (import "test" "table-10-inf" (table 12 funcref))) 345 "incompatible import type" 346 ) 347 (assert_unlinkable 348 (module (import "test" "table-10-inf" (table 10 20 funcref))) 349 "incompatible import type" 350 ) 351 (assert_unlinkable 352 (module (import "spectest" "table" (table 12 funcref))) 353 "incompatible import type" 354 ) 355 (assert_unlinkable 356 (module (import "spectest" "table" (table 10 15 funcref))) 357 "incompatible import type" 358 ) 359 360 (assert_unlinkable 361 (module (import "test" "func" (table 10 funcref))) 362 "incompatible import type" 363 ) 364 (assert_unlinkable 365 (module (import "test" "global-i32" (table 10 funcref))) 366 "incompatible import type" 367 ) 368 (assert_unlinkable 369 (module (import "test" "memory-2-inf" (table 10 funcref))) 370 "incompatible import type" 371 ) 372 (assert_unlinkable 373 (module (import "spectest" "print_i32" (table 10 funcref))) 374 "incompatible import type" 375 ) 376 377 378 379 ;; Memories 380 381 (module 382 (import "spectest" "memory" (memory 1 2)) 383 (data 0 (i32.const 10) "\10") 384 385 (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) 386 ) 387 388 (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) 389 (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) 390 (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) 391 (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") 392 393 (module 394 (memory (import "spectest" "memory") 1 2) 395 (data 0 (i32.const 10) "\10") 396 397 (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) 398 ) 399 (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) 400 (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) 401 (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) 402 (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") 403 404 (assert_invalid 405 (module (import "" "" (memory 1)) (import "" "" (memory 1))) 406 "multiple memories" 407 ) 408 (assert_invalid 409 (module (import "" "" (memory 1)) (memory 0)) 410 "multiple memories" 411 ) 412 (assert_invalid 413 (module (memory 0) (memory 0)) 414 "multiple memories" 415 ) 416 417 (module (import "test" "memory-2-inf" (memory 2))) 418 (module (import "test" "memory-2-inf" (memory 1))) 419 (module (import "test" "memory-2-inf" (memory 0))) 420 (module (import "spectest" "memory" (memory 1))) 421 (module (import "spectest" "memory" (memory 0))) 422 (module (import "spectest" "memory" (memory 1 2))) 423 (module (import "spectest" "memory" (memory 0 2))) 424 (module (import "spectest" "memory" (memory 1 3))) 425 (module (import "spectest" "memory" (memory 0 3))) 426 427 (assert_unlinkable 428 (module (import "test" "unknown" (memory 1))) 429 "unknown import" 430 ) 431 (assert_unlinkable 432 (module (import "spectest" "unknown" (memory 1))) 433 "unknown import" 434 ) 435 436 (assert_unlinkable 437 (module (import "test" "memory-2-inf" (memory 3))) 438 "incompatible import type" 439 ) 440 (assert_unlinkable 441 (module (import "test" "memory-2-inf" (memory 2 3))) 442 "incompatible import type" 443 ) 444 (assert_unlinkable 445 (module (import "spectest" "memory" (memory 2))) 446 "incompatible import type" 447 ) 448 (assert_unlinkable 449 (module (import "spectest" "memory" (memory 1 1))) 450 "incompatible import type" 451 ) 452 453 (assert_unlinkable 454 (module (import "test" "func-i32" (memory 1))) 455 "incompatible import type" 456 ) 457 (assert_unlinkable 458 (module (import "test" "global-i32" (memory 1))) 459 "incompatible import type" 460 ) 461 (assert_unlinkable 462 (module (import "test" "table-10-inf" (memory 1))) 463 "incompatible import type" 464 ) 465 (assert_unlinkable 466 (module (import "spectest" "print_i32" (memory 1))) 467 "incompatible import type" 468 ) 469 (assert_unlinkable 470 (module (import "spectest" "global_i32" (memory 1))) 471 "incompatible import type" 472 ) 473 (assert_unlinkable 474 (module (import "spectest" "table" (memory 1))) 475 "incompatible import type" 476 ) 477 478 (assert_unlinkable 479 (module (import "spectest" "memory" (memory 2))) 480 "incompatible import type" 481 ) 482 (assert_unlinkable 483 (module (import "spectest" "memory" (memory 1 1))) 484 "incompatible import type" 485 ) 486 487 (module 488 (import "spectest" "memory" (memory 0 3)) ;; actual has max size 2 489 (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) 490 ) 491 (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) 492 (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) 493 (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) 494 (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) 495 (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) 496 497 498 ;; Syntax errors 499 500 (assert_malformed 501 (module quote "(func) (import \"\" \"\" (func))") 502 "import after function" 503 ) 504 (assert_malformed 505 (module quote "(func) (import \"\" \"\" (global i64))") 506 "import after function" 507 ) 508 (assert_malformed 509 (module quote "(func) (import \"\" \"\" (table 0 funcref))") 510 "import after function" 511 ) 512 (assert_malformed 513 (module quote "(func) (import \"\" \"\" (memory 0))") 514 "import after function" 515 ) 516 517 (assert_malformed 518 (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (func))") 519 "import after global" 520 ) 521 (assert_malformed 522 (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (global f32))") 523 "import after global" 524 ) 525 (assert_malformed 526 (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (table 0 funcref))") 527 "import after global" 528 ) 529 (assert_malformed 530 (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (memory 0))") 531 "import after global" 532 ) 533 534 (assert_malformed 535 (module quote "(table 0 funcref) (import \"\" \"\" (func))") 536 "import after table" 537 ) 538 (assert_malformed 539 (module quote "(table 0 funcref) (import \"\" \"\" (global i32))") 540 "import after table" 541 ) 542 (assert_malformed 543 (module quote "(table 0 funcref) (import \"\" \"\" (table 0 funcref))") 544 "import after table" 545 ) 546 (assert_malformed 547 (module quote "(table 0 funcref) (import \"\" \"\" (memory 0))") 548 "import after table" 549 ) 550 551 (assert_malformed 552 (module quote "(memory 0) (import \"\" \"\" (func))") 553 "import after memory" 554 ) 555 (assert_malformed 556 (module quote "(memory 0) (import \"\" \"\" (global i32))") 557 "import after memory" 558 ) 559 (assert_malformed 560 (module quote "(memory 0) (import \"\" \"\" (table 1 3 funcref))") 561 "import after memory" 562 ) 563 (assert_malformed 564 (module quote "(memory 0) (import \"\" \"\" (memory 1 2))") 565 "import after memory" 566 ) 567 568 ;; This module is required to validate, regardless of whether it can be 569 ;; linked. Overloading is not possible in wasm itself, but it is possible 570 ;; in modules from which wasm can import. 571 (module) 572 (register "not wasm") 573 (assert_unlinkable 574 (module 575 (import "not wasm" "overloaded" (func)) 576 (import "not wasm" "overloaded" (func (param i32))) 577 (import "not wasm" "overloaded" (func (param i32 i32))) 578 (import "not wasm" "overloaded" (func (param i64))) 579 (import "not wasm" "overloaded" (func (param f32))) 580 (import "not wasm" "overloaded" (func (param f64))) 581 (import "not wasm" "overloaded" (func (result i32))) 582 (import "not wasm" "overloaded" (func (result i64))) 583 (import "not wasm" "overloaded" (func (result f32))) 584 (import "not wasm" "overloaded" (func (result f64))) 585 (import "not wasm" "overloaded" (global i32)) 586 (import "not wasm" "overloaded" (global i64)) 587 (import "not wasm" "overloaded" (global f32)) 588 (import "not wasm" "overloaded" (global f64)) 589 (import "not wasm" "overloaded" (table 0 funcref)) 590 (import "not wasm" "overloaded" (memory 0)) 591 ) 592 "unknown import" 593 )