1;;! gc = true 2;;! bulk_memory = true 3 4(module 5 (type $arr (array i31ref)) 6 7 (elem $e i31ref 8 (ref.i31 (i32.const 0xaa)) 9 (ref.i31 (i32.const 0xbb)) 10 (ref.i31 (i32.const 0xcc)) 11 (ref.i31 (i32.const 0xdd))) 12 13 (func (export "array-new-elem") (param i32 i32) (result (ref $arr)) 14 (array.new_elem $arr $e (local.get 0) (local.get 1)) 15 ) 16) 17 18;; In-bounds element segment accesses. 19(assert_return (invoke "array-new-elem" (i32.const 0) (i32.const 0)) (ref.array)) 20(assert_return (invoke "array-new-elem" (i32.const 0) (i32.const 4)) (ref.array)) 21(assert_return (invoke "array-new-elem" (i32.const 1) (i32.const 2)) (ref.array)) 22(assert_return (invoke "array-new-elem" (i32.const 4) (i32.const 0)) (ref.array)) 23 24;; Out-of-bounds element segment accesses. 25(assert_trap (invoke "array-new-elem" (i32.const 0) (i32.const 5)) "out of bounds table access") 26(assert_trap (invoke "array-new-elem" (i32.const 5) (i32.const 0)) "out of bounds table access") 27(assert_trap (invoke "array-new-elem" (i32.const 1) (i32.const 4)) "out of bounds table access") 28(assert_trap (invoke "array-new-elem" (i32.const 4) (i32.const 1)) "out of bounds table access") 29 30(module 31 (type $arr (array i31ref)) 32 33 (elem $e i31ref 34 (ref.i31 (i32.const 0xaa)) 35 (ref.i31 (i32.const 0xbb)) 36 (ref.i31 (i32.const 0xcc)) 37 (ref.i31 (i32.const 0xdd))) 38 39 (func (export "array-new-elem-contents") (result i32 i32) 40 (local (ref $arr)) 41 (local.set 0 (array.new_elem $arr $e (i32.const 1) (i32.const 2))) 42 (i31.get_u (array.get $arr (local.get 0) (i32.const 0))) 43 (i31.get_u (array.get $arr (local.get 0) (i32.const 1))) 44 ) 45) 46 47;; Array is initialized with the correct contents. 48(assert_return (invoke "array-new-elem-contents") (i32.const 0xbb) (i32.const 0xcc)) 49