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
|
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; Check that extern conversion instructions are emitted properly in the binary format.
;; Also check that the optimizer does not break on this code.
;; RUN: wasm-opt %s -all -O1 --roundtrip -S -o - | filecheck %s
(module
;; CHECK: (type $0 (func (param externref) (result anyref)))
;; CHECK: (type $1 (func (param (ref any)) (result (ref extern))))
;; CHECK: (type $2 (func (param anyref) (result externref)))
;; CHECK: (export "ext" (func $extern.convert_any))
;; CHECK: (export "int" (func $any.convert_extern))
;; CHECK: (export "legacy.1" (func $legacy_notation.1))
;; CHECK: (export "legacy.2" (func $legacy_notation.2))
;; CHECK: (func $extern.convert_any (type $1) (param $0 (ref any)) (result (ref extern))
;; CHECK-NEXT: (extern.convert_any
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $extern.convert_any (export "ext") (param $x (ref any)) (result (ref extern))
(extern.convert_any
(local.get $x)
)
)
;; CHECK: (func $any.convert_extern (type $0) (param $0 externref) (result anyref)
;; CHECK-NEXT: (any.convert_extern
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $any.convert_extern (export "int") (param $x (ref null extern)) (result (ref null any))
(any.convert_extern
(local.get $x)
)
)
;; CHECK: (func $legacy_notation.1 (type $0) (param $0 externref) (result anyref)
;; CHECK-NEXT: (ref.as_non_null
;; CHECK-NEXT: (any.convert_extern
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $legacy_notation.1 (export "legacy.1") (param $x (ref null extern)) (result (ref null any))
(extern.internalize
(ref.as_non_null ;; Add this to avoid the entire function being merged with
;; another.
(local.get $x)
)
)
)
;; CHECK: (func $legacy_notation.2 (type $2) (param $0 anyref) (result externref)
;; CHECK-NEXT: (extern.convert_any
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $legacy_notation.2 (export "legacy.2") (param $x (ref null any)) (result (ref null extern))
(extern.externalize
(local.get $x)
)
)
)
|