;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; RUN: wasm-ctor-eval %s --ctors=test --kept-exports= --quiet -all -S -o - | filecheck %s

;; Multibyte stores are evaluated at compile time, and the resulting array
;; contents are serialized back into the module as elements of the array's
;; element type.

(module
 ;; CHECK:      (type $i32_array (array (mut i32)))
 (type $i32_array (array (mut i32)))
 ;; CHECK:      (type $i16_array (array (mut i16)))
 (type $i16_array (array (mut i16)))
 ;; CHECK:      (type $v128_array (array (mut v128)))
 (type $v128_array (array (mut v128)))

 ;; CHECK:      (global $ctor-eval$global_12 (ref (exact $i32_array)) (array.new_fixed $i32_array 4
 ;; CHECK-NEXT:  (i32.const 0)
 ;; CHECK-NEXT:  (i32.const 1)
 ;; CHECK-NEXT:  (i32.const 2)
 ;; CHECK-NEXT:  (i32.const 0)
 ;; CHECK-NEXT: ))

 ;; CHECK:      (global $ctor-eval$global_13 (ref (exact $i16_array)) (array.new_fixed $i16_array 4
 ;; CHECK-NEXT:  (i32.const 256)
 ;; CHECK-NEXT:  (i32.const 2)
 ;; CHECK-NEXT:  (i32.const 3)
 ;; CHECK-NEXT:  (i32.const 0)
 ;; CHECK-NEXT: ))

 ;; CHECK:      (global $ctor-eval$global_14 (ref (exact $v128_array)) (array.new_fixed $v128_array 1
 ;; CHECK-NEXT:  (v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004)
 ;; CHECK-NEXT: ))

 ;; CHECK:      (global $i32 (mut (ref null $i32_array)) (global.get $ctor-eval$global_12))
 (global $i32 (export "i32") (mut (ref null $i32_array)) (ref.null $i32_array))
 ;; CHECK:      (global $i16 (mut (ref null $i16_array)) (global.get $ctor-eval$global_13))
 (global $i16 (export "i16") (mut (ref null $i16_array)) (ref.null $i16_array))
 ;; CHECK:      (global $v128 (mut (ref null $v128_array)) (global.get $ctor-eval$global_14))
 (global $v128 (export "v128") (mut (ref null $v128_array)) (ref.null $v128_array))

 (func $test (export "test")
  ;; An i64 store covers two i32 elements.
  (global.set $i32 (array.new_default $i32_array (i32.const 4)))
  (i64.store (type $i32_array) (global.get $i32) (i32.const 4)
   (i64.const 0x0000000200000001)
  )
  ;; An unaligned i32 store covers parts of three i16 elements.
  (global.set $i16 (array.new_default $i16_array (i32.const 4)))
  (i32.store (type $i16_array) offset=1 (global.get $i16) (i32.const 0)
   (i32.const 0x03000201)
  )
  ;; A v128 store covers an entire v128 element.
  (global.set $v128 (array.new_default $v128_array (i32.const 1)))
  (v128.store (type $v128_array) (global.get $v128) (i32.const 0)
   (v128.const i32x4 1 2 3 4)
  )
 )
)
;; CHECK:      (export "i32" (global $i32))

;; CHECK:      (export "i16" (global $i16))

;; CHECK:      (export "v128" (global $v128))
