blob: 6e49cac65df742ff15d54322fa3f6d92457ac482 [file] [edit]
;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited.
;; RUN: wasm-opt %s -all --disable-custom-descriptors --roundtrip -S -o - | filecheck %s
(module
;; CHECK: (type $foo (struct))
(type $foo (struct))
;; CHECK: (func $trivial-exact-cast (type $1) (param $x i32)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.cast (ref $foo)
;; CHECK-NEXT: (if (result (ref $foo))
;; CHECK-NEXT: (local.get $x)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (struct.new_default $foo)
;; CHECK-NEXT: )
;; CHECK-NEXT: (else
;; CHECK-NEXT: (struct.new_default $foo)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $trivial-exact-cast (param $x i32)
(drop
;; We allow trivial exact casts even without custom descriptors enabled,
;; so this is valid. However, when we round trip, the exactness in the if
;; result will be erased. If we fail to erase the exactness in the cast,
;; we will be emitting a binary that uses a disabled feature, and also we
;; will fail validation when we read the module back in because the cast
;; will no longer be trivial.
(ref.cast (ref (exact $foo))
(if (result (ref (exact $foo)))
(local.get $x)
(then (struct.new $foo))
(else (struct.new $foo))
)
)
)
)
)