;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited.
;; RUN: wasm-opt %s -all -S -o - | filecheck %s
;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s --check-prefix=RTRIP
(module
  ;; CHECK:      (type $t (struct (field (mut waitqueue))))
  ;; RTRIP:      (type $t (struct (field (mut waitqueue))))
  (type $t (struct (field (mut waitqueue))))

  ;; CHECK:      (global $g (ref $t) (struct.new $t
  ;; CHECK-NEXT:  (i32.const 0)
  ;; CHECK-NEXT: ))
  ;; RTRIP:      (global $g (ref $t) (struct.new $t
  ;; RTRIP-NEXT:  (i32.const 0)
  ;; RTRIP-NEXT: ))
  (global $g (ref $t) (struct.new $t (i32.const 0)))

  ;; CHECK:      (func $f (type $1)
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (struct.wait $t 0
  ;; CHECK-NEXT:    (global.get $g)
  ;; CHECK-NEXT:    (i32.const 0)
  ;; CHECK-NEXT:    (i64.const 0)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block ;; (replaces unreachable StructWait we can't emit)
  ;; CHECK-NEXT:    (drop
  ;; CHECK-NEXT:     (unreachable)
  ;; CHECK-NEXT:    )
  ;; CHECK-NEXT:    (drop
  ;; CHECK-NEXT:     (i32.const 0)
  ;; CHECK-NEXT:    )
  ;; CHECK-NEXT:    (drop
  ;; CHECK-NEXT:     (i64.const 0)
  ;; CHECK-NEXT:    )
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block ;; (replaces unreachable StructWait we can't emit)
  ;; CHECK-NEXT:    (drop
  ;; CHECK-NEXT:     (ref.null none)
  ;; CHECK-NEXT:    )
  ;; CHECK-NEXT:    (drop
  ;; CHECK-NEXT:     (i32.const 0)
  ;; CHECK-NEXT:    )
  ;; CHECK-NEXT:    (drop
  ;; CHECK-NEXT:     (i64.const 0)
  ;; CHECK-NEXT:    )
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (struct.set $t 0
  ;; CHECK-NEXT:   (global.get $g)
  ;; CHECK-NEXT:   (i32.const 1)
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (struct.get_u $t 0
  ;; CHECK-NEXT:    (global.get $g)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT: )
  ;; RTRIP:      (func $f (type $1)
  ;; RTRIP-NEXT:  (drop
  ;; RTRIP-NEXT:   (struct.wait $t 0
  ;; RTRIP-NEXT:    (global.get $g)
  ;; RTRIP-NEXT:    (i32.const 0)
  ;; RTRIP-NEXT:    (i64.const 0)
  ;; RTRIP-NEXT:   )
  ;; RTRIP-NEXT:  )
  ;; RTRIP-NEXT:  (drop
  ;; RTRIP-NEXT:   (unreachable)
  ;; RTRIP-NEXT:  )
  ;; RTRIP-NEXT:  (drop
  ;; RTRIP-NEXT:   (ref.null none)
  ;; RTRIP-NEXT:  )
  ;; RTRIP-NEXT:  (drop
  ;; RTRIP-NEXT:   (i32.const 0)
  ;; RTRIP-NEXT:  )
  ;; RTRIP-NEXT:  (drop
  ;; RTRIP-NEXT:   (i64.const 0)
  ;; RTRIP-NEXT:  )
  ;; RTRIP-NEXT:  (drop
  ;; RTRIP-NEXT:   (unreachable)
  ;; RTRIP-NEXT:  )
  ;; RTRIP-NEXT:  (struct.set $t 0
  ;; RTRIP-NEXT:   (global.get $g)
  ;; RTRIP-NEXT:   (i32.const 1)
  ;; RTRIP-NEXT:  )
  ;; RTRIP-NEXT:  (drop
  ;; RTRIP-NEXT:   (struct.get_u $t 0
  ;; RTRIP-NEXT:    (global.get $g)
  ;; RTRIP-NEXT:   )
  ;; RTRIP-NEXT:  )
  ;; RTRIP-NEXT: )
  (func $f
    (drop (struct.wait $t 0 (global.get $g) (i32.const 0) (i64.const 0)))
    (drop (struct.wait $t 0 (unreachable) (i32.const 0) (i64.const 0)))
    (drop (struct.wait $t 0 (ref.null none) (i32.const 0) (i64.const 0)))
    (struct.set $t 0 (global.get $g) (i32.const 1))
    (drop (struct.get $t 0 (global.get $g)))
  )
)
