...

Text file src/github.com/tetratelabs/wazero/internal/integration_test/spectest/v1/testdata/local_get.wast

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

     1;; Test `local.get` operator
     2
     3(module
     4  ;; Typing
     5
     6  (func (export "type-local-i32") (result i32) (local i32) (local.get 0))
     7  (func (export "type-local-i64") (result i64) (local i64) (local.get 0))
     8  (func (export "type-local-f32") (result f32) (local f32) (local.get 0))
     9  (func (export "type-local-f64") (result f64) (local f64) (local.get 0))
    10
    11  (func (export "type-param-i32") (param i32) (result i32) (local.get 0))
    12  (func (export "type-param-i64") (param i64) (result i64) (local.get 0))
    13  (func (export "type-param-f32") (param f32) (result f32) (local.get 0))
    14  (func (export "type-param-f64") (param f64) (result f64) (local.get 0))
    15
    16  (func (export "type-mixed") (param i64 f32 f64 i32 i32)
    17    (local f32 i64 i64 f64)
    18    (drop (i64.eqz (local.get 0)))
    19    (drop (f32.neg (local.get 1)))
    20    (drop (f64.neg (local.get 2)))
    21    (drop (i32.eqz (local.get 3)))
    22    (drop (i32.eqz (local.get 4)))
    23    (drop (f32.neg (local.get 5)))
    24    (drop (i64.eqz (local.get 6)))
    25    (drop (i64.eqz (local.get 7)))
    26    (drop (f64.neg (local.get 8)))
    27  )
    28
    29  ;; Reading
    30
    31  (func (export "read") (param i64 f32 f64 i32 i32) (result f64)
    32    (local f32 i64 i64 f64)
    33    (local.set 5 (f32.const 5.5))
    34    (local.set 6 (i64.const 6))
    35    (local.set 8 (f64.const 8))
    36    (f64.add
    37      (f64.convert_i64_u (local.get 0))
    38      (f64.add
    39        (f64.promote_f32 (local.get 1))
    40        (f64.add
    41          (local.get 2)
    42          (f64.add
    43            (f64.convert_i32_u (local.get 3))
    44            (f64.add
    45              (f64.convert_i32_s (local.get 4))
    46              (f64.add
    47                (f64.promote_f32 (local.get 5))
    48                (f64.add
    49                  (f64.convert_i64_u (local.get 6))
    50                  (f64.add
    51                    (f64.convert_i64_u (local.get 7))
    52                    (local.get 8)
    53                  )
    54                )
    55              )
    56            )
    57          )
    58        )
    59      )
    60    )
    61  )
    62
    63  ;; As parameter of control constructs and instructions
    64
    65  (func (export "as-block-value") (param i32) (result i32)
    66    (block (result i32) (local.get 0))
    67  )
    68  (func (export "as-loop-value") (param i32) (result i32)
    69    (loop (result i32) (local.get 0))
    70  )
    71  (func (export "as-br-value") (param i32) (result i32)
    72    (block (result i32) (br 0 (local.get 0)))
    73  )
    74  (func (export "as-br_if-value") (param i32) (result i32)
    75    (block $l0 (result i32) (br_if $l0 (local.get 0) (i32.const 1)))
    76  )
    77
    78  (func (export "as-br_if-value-cond") (param i32) (result i32)
    79    (block (result i32)
    80      (br_if 0 (local.get 0) (local.get 0))
    81    )
    82  )
    83  (func (export "as-br_table-value") (param i32) (result i32)
    84    (block
    85      (block
    86        (block
    87          (br_table 0 1 2 (local.get 0))
    88          (return (i32.const 0))
    89        )
    90        (return (i32.const 1))
    91      )
    92      (return (i32.const 2))
    93    )
    94    (i32.const 3)
    95  )
    96
    97  (func (export "as-return-value") (param i32) (result i32)
    98    (return (local.get 0))
    99  )
   100
   101  (func (export "as-if-then") (param i32) (result i32)
   102    (if (result i32) (local.get 0) (then (local.get 0)) (else (i32.const 0)))
   103  )
   104  (func (export "as-if-else") (param i32) (result i32)
   105    (if (result i32) (local.get 0) (then (i32.const 1)) (else (local.get 0)))
   106  )
   107)
   108
   109(assert_return (invoke "type-local-i32") (i32.const 0))
   110(assert_return (invoke "type-local-i64") (i64.const 0))
   111(assert_return (invoke "type-local-f32") (f32.const 0))
   112(assert_return (invoke "type-local-f64") (f64.const 0))
   113
   114(assert_return (invoke "type-param-i32" (i32.const 2)) (i32.const 2))
   115(assert_return (invoke "type-param-i64" (i64.const 3)) (i64.const 3))
   116(assert_return (invoke "type-param-f32" (f32.const 4.4)) (f32.const 4.4))
   117(assert_return (invoke "type-param-f64" (f64.const 5.5)) (f64.const 5.5))
   118
   119(assert_return (invoke "as-block-value" (i32.const 6)) (i32.const 6))
   120(assert_return (invoke "as-loop-value" (i32.const 7)) (i32.const 7))
   121
   122(assert_return (invoke "as-br-value" (i32.const 8)) (i32.const 8))
   123(assert_return (invoke "as-br_if-value" (i32.const 9)) (i32.const 9))
   124(assert_return (invoke "as-br_if-value-cond" (i32.const 10)) (i32.const 10))
   125(assert_return (invoke "as-br_table-value" (i32.const 1)) (i32.const 2))
   126
   127(assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 0))
   128
   129(assert_return (invoke "as-if-then" (i32.const 1)) (i32.const 1))
   130(assert_return (invoke "as-if-else" (i32.const 0)) (i32.const 0))
   131
   132(assert_return
   133  (invoke "type-mixed"
   134    (i64.const 1) (f32.const 2.2) (f64.const 3.3) (i32.const 4) (i32.const 5)
   135  )
   136)
   137
   138(assert_return
   139  (invoke "read"
   140    (i64.const 1) (f32.const 2) (f64.const 3.3) (i32.const 4) (i32.const 5)
   141  )
   142  (f64.const 34.8)
   143)
   144
   145
   146;; Invalid typing of access to locals
   147
   148(assert_invalid
   149  (module (func $type-local-num-vs-num (result i64) (local i32) (local.get 0)))
   150  "type mismatch"
   151)
   152(assert_invalid
   153  (module (func $type-local-num-vs-num (result i32) (local f32) (i32.eqz (local.get 0))))
   154  "type mismatch"
   155)
   156(assert_invalid
   157  (module (func $type-local-num-vs-num (result f64) (local f64 i64) (f64.neg (local.get 1))))
   158  "type mismatch"
   159)
   160
   161
   162;; Invalid typing of access to parameters
   163
   164(assert_invalid
   165  (module (func $type-param-num-vs-num (param i32) (result i64) (local.get 0)))
   166  "type mismatch"
   167)
   168(assert_invalid
   169  (module (func $type-param-num-vs-num (param f32) (result i32) (i32.eqz (local.get 0))))
   170  "type mismatch"
   171)
   172(assert_invalid
   173  (module (func $type-param-num-vs-num (param f64 i64) (result f64) (f64.neg (local.get 1))))
   174  "type mismatch"
   175)
   176
   177
   178;; local.set should have retval
   179
   180(assert_invalid
   181  (module (func $type-empty-vs-i32 (local i32) (local.get 0)))
   182  "type mismatch"
   183)
   184(assert_invalid
   185  (module (func $type-empty-vs-i64 (local i64) (local.get 0)))
   186  "type mismatch"
   187)
   188(assert_invalid
   189  (module (func $type-empty-vs-f32 (local f32) (local.get 0)))
   190  "type mismatch"
   191)
   192(assert_invalid
   193  (module (func $type-empty-vs-f64 (local f64) (local.get 0)))
   194  "type mismatch"
   195)
   196
   197
   198;; Invalid local index
   199
   200(assert_invalid
   201  (module (func $unbound-local (local i32 i64) (local.get 3)))
   202  "unknown local"
   203)
   204(assert_invalid
   205  (module (func $large-local (local i32 i64) (local.get 14324343)))
   206  "unknown local"
   207)
   208
   209(assert_invalid
   210  (module (func $unbound-param (param i32 i64) (local.get 2)))
   211  "unknown local"
   212)
   213(assert_invalid
   214  (module (func $large-param (param i32 i64) (local.get 714324343)))
   215  "unknown local"
   216)
   217
   218(assert_invalid
   219  (module (func $unbound-mixed (param i32) (local i32 i64) (local.get 3)))
   220  "unknown local"
   221)
   222(assert_invalid
   223  (module (func $large-mixed (param i64) (local i32 i64) (local.get 214324343)))
   224  "unknown local"
   225)
   226

View as plain text