binaryen-sys 0.13.0

Bindings to the binaryen library
Documentation
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.

;; RUN: wasm-merge %s first %s.second second --rename-export-conflicts -all -S -o - | filecheck %s

;; Test we rename tables and element segments properly at the module scope.
;; Table $foo has a name collision, and both of the element segments' names do
;; as well. This test verifies that element segments refer to the right tables
;; even after such name changes.

(module
  ;; CHECK:      (type $vec (array funcref))
  (type $vec (array funcref))

  ;; CHECK:      (type $1 (func))

  ;; CHECK:      (table $foo 1 funcref)
  (table $foo 1 funcref)

  ;; CHECK:      (table $bar 10 funcref)
  (table $bar 10 funcref)

  ;; CHECK:      (table $foo_2 100 funcref)

  ;; CHECK:      (table $other 1000 funcref)

  ;; CHECK:      (elem $a (table $foo) (i32.const 0) func)
  (elem $a (table $foo) (i32.const 0) func)

  ;; CHECK:      (elem $b (table $bar) (i32.const 0) func)
  (elem $b (table $bar) (i32.const 0) func)

  ;; CHECK:      (elem $a_2 (table $foo_2) (i32.const 0) func)

  ;; CHECK:      (elem $b_2 (table $other) (i32.const 0) func)

  ;; CHECK:      (export "keepalive2" (func $keepalive2))

  ;; CHECK:      (export "keepalive2_1" (func $keepalive2_1))

  ;; CHECK:      (func $keepalive2 (type $1)
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (table.get $foo
  ;; CHECK-NEXT:    (i32.const 1)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (table.get $bar
  ;; CHECK-NEXT:    (i32.const 1)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (array.new_elem $vec $a
  ;; CHECK-NEXT:    (i32.const 1)
  ;; CHECK-NEXT:    (i32.const 2)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (array.new_elem $vec $b
  ;; CHECK-NEXT:    (i32.const 3)
  ;; CHECK-NEXT:    (i32.const 4)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT: )
  (func $keepalive2 (export "keepalive2")
    (drop
      (table.get $foo
        (i32.const 1)
      )
    )
    (drop
      (table.get $bar
        (i32.const 1)
      )
    )
    ;; GC operations are the only things that can keep alive an elem segment.
    (drop
      (array.new_elem $vec $a
        (i32.const 1)
        (i32.const 2)
      )
    )
    (drop
      (array.new_elem $vec $b
        (i32.const 3)
        (i32.const 4)
      )
    )
  )
)
;; CHECK:      (func $keepalive2_1 (type $1)
;; CHECK-NEXT:  (drop
;; CHECK-NEXT:   (table.get $foo_2
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (drop
;; CHECK-NEXT:   (table.get $other
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (drop
;; CHECK-NEXT:   (array.new_elem $vec $a_2
;; CHECK-NEXT:    (i32.const 5)
;; CHECK-NEXT:    (i32.const 6)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (drop
;; CHECK-NEXT:   (array.new_elem $vec $b_2
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:    (i32.const 8)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT: )