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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited.
;; Check that tail calls are parsed, validated, and printed correctly
;; RUN: foreach %s %t wasm-opt -all -S -o - | filecheck %s
(module
;; CHECK: (type $void (func))
(type $void (func))
;; CHECK: (table $t 1 1 funcref)
(table $t 1 1 funcref)
;; CHECK: (elem $e (i32.const 0) $foo)
(elem $e (i32.const 0) $foo)
;; CHECK: (func $foo (type $void)
;; CHECK-NEXT: (return_call $bar)
;; CHECK-NEXT: )
(func $foo
(return_call $bar)
)
;; CHECK: (func $bar (type $void)
;; CHECK-NEXT: (return_call_indirect $t (type $void)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $bar
(return_call_indirect (type $void) (i32.const 0))
)
)
;; Check GC types and subtyping
(module
;; CHECK: (type $A (sub (struct (field i32))))
(type $A (sub (struct i32)))
;; CHECK: (type $B (sub $A (struct (field i32) (field i32))))
(type $B (sub $A (struct i32 i32)))
;; CHECK: (type $return-B (func (result (ref $B))))
(type $return-B (func (result (ref $B))))
;; CHECK: (type $return-A (func (result (ref null $A))))
(type $return-A (func (result (ref null $A))))
;; CHECK: (table $t 1 1 funcref)
(table $t 1 1 funcref)
;; CHECK: (elem $e (i32.const 0) $callee)
(elem $e (i32.const 0) $callee)
;; CHECK: (func $caller (type $return-A) (result (ref null $A))
;; CHECK-NEXT: (return_call $callee)
;; CHECK-NEXT: )
(func $caller (type $return-A)
(return_call $callee)
)
;; CHECK: (func $caller-indirect (type $return-B) (result (ref $B))
;; CHECK-NEXT: (return_call_indirect $t (type $return-B)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $caller-indirect (type $return-B)
(return_call_indirect $t (type $return-B) (i32.const 0))
)
;; CHECK: (func $callee (type $return-B) (result (ref $B))
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
(func $callee (type $return-B)
(unreachable)
)
)
|