File: recursive-types.wast

package info (click to toggle)
binaryen 120-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 41,284 kB
  • sloc: cpp: 189,449; javascript: 62,189; ansic: 14,087; python: 5,379; pascal: 441; sh: 77; makefile: 30; asm: 27
file content (57 lines) | stat: -rw-r--r-- 1,920 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; Test that a trivial recursive type works properly

;; RUN: wasm-opt %s -all --name-types -S -o - | filecheck %s

(module
  (type (func (param (ref null 0)) (result (ref null 0))))
  (type (func (param (ref null 1)) (result (ref null 1))))
  (type (func (param (ref null 0)) (result (ref null 1))))
  (rec
    ;; CHECK:      (type $type (func (param (ref null $type)) (result (ref null $type))))

    ;; CHECK:      (rec
    ;; CHECK-NEXT:  (type $f3 (sub (func (param (ref null $type_2)) (result (ref null $f3)))))
    (type $f3 (sub (func (param (ref null 4)) (result (ref null 3)))))
    (type (sub $f3 (func (param (ref null 3)) (result (ref null 4)))))
  )

  ;; CHECK:       (type $type_2 (sub $f3 (func (param (ref null $f3)) (result (ref null $type_2)))))

  ;; CHECK:      (type $type_1 (func (param (ref null $type)) (result (ref null $type))))

  ;; CHECK:      (func $foo (type $type) (param $0 (ref null $type)) (result (ref null $type))
  ;; CHECK-NEXT:  (unreachable)
  ;; CHECK-NEXT: )
  (func $foo (type 0)
    (unreachable)
  )

  ;; CHECK:      (func $bar (type $type) (param $0 (ref null $type)) (result (ref null $type))
  ;; CHECK-NEXT:  (unreachable)
  ;; CHECK-NEXT: )
  (func $bar (type 1)
    (unreachable)
  )

  ;; CHECK:      (func $baz (type $type_1) (param $0 (ref null $type)) (result (ref null $type))
  ;; CHECK-NEXT:  (unreachable)
  ;; CHECK-NEXT: )
  (func $baz (type 2)
    (unreachable)
  )

  ;; CHECK:      (func $qux (type $f3) (param $0 (ref null $type_2)) (result (ref null $f3))
  ;; CHECK-NEXT:  (unreachable)
  ;; CHECK-NEXT: )
  (func $qux (type 3)
    (unreachable)
  )

  ;; CHECK:      (func $quux (type $type_2) (param $0 (ref null $f3)) (result (ref null $type_2))
  ;; CHECK-NEXT:  (unreachable)
  ;; CHECK-NEXT: )
  (func $quux (type 4)
    (unreachable)
  )
)