...

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

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

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

View as plain text