...

Text file src/github.com/tetratelabs/wazero/internal/integration_test/spectest/v2/testdata/load.wast

Documentation: github.com/tetratelabs/wazero/internal/integration_test/spectest/v2/testdata

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

View as plain text