wa-lang.org/wazero@v1.0.2/internal/integration_test/spectest/v1/testdata/local_tee.wast (about)

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