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