;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; Check that array types and operations are emitted properly in the binary format. ;; RUN: wasm-opt %s -all -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s --check-prefix=ROUNDTRIP ;; Check that we can roundtrip through the text format as well. ;; RUN: wasm-opt %s -all -S -o - | wasm-opt -all -S -o - | filecheck %s (module (type $byte-array (array (mut i8))) ;; CHECK: (type $arrayref_=>_i32 (func (param arrayref) (result i32))) ;; CHECK: (type $ref|array|_=>_i32 (func (param (ref array)) (result i32))) ;; CHECK: (type $nullref_=>_i32 (func (param nullref) (result i32))) ;; CHECK: (func $len (param $a (ref array)) (result i32) ;; CHECK-NEXT: (array.len ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; ROUNDTRIP: (type $arrayref_=>_i32 (func (param arrayref) (result i32))) ;; ROUNDTRIP: (type $ref|array|_=>_i32 (func (param (ref array)) (result i32))) ;; ROUNDTRIP: (type $nullref_=>_i32 (func (param nullref) (result i32))) ;; ROUNDTRIP: (func $len (param $a (ref array)) (result i32) ;; ROUNDTRIP-NEXT: (array.len ;; ROUNDTRIP-NEXT: (local.get $a) ;; ROUNDTRIP-NEXT: ) ;; ROUNDTRIP-NEXT: ) (func $len (param $a (ref array)) (result i32) ;; TODO: remove the unused type annotation (array.len $byte-array (local.get $a) ) ) ;; CHECK: (func $impossible-len (param $none nullref) (result i32) ;; CHECK-NEXT: (array.len ;; CHECK-NEXT: (local.get $none) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; ROUNDTRIP: (func $impossible-len (param $none nullref) (result i32) ;; ROUNDTRIP-NEXT: (array.len ;; ROUNDTRIP-NEXT: (local.get $none) ;; ROUNDTRIP-NEXT: ) ;; ROUNDTRIP-NEXT: ) (func $impossible-len (param $none nullref) (result i32) (array.len $byte-array (local.get $none) ) ) ;; CHECK: (func $unreachable-len (param $a arrayref) (result i32) ;; CHECK-NEXT: (array.len ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; ROUNDTRIP: (func $unreachable-len (param $a arrayref) (result i32) ;; ROUNDTRIP-NEXT: (unreachable) ;; ROUNDTRIP-NEXT: ) (func $unreachable-len (param $a arrayref) (result i32) (array.len $byte-array (unreachable) ) ) ;; CHECK: (func $unannotated-len (param $a arrayref) (result i32) ;; CHECK-NEXT: (array.len ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; ROUNDTRIP: (func $unannotated-len (param $a arrayref) (result i32) ;; ROUNDTRIP-NEXT: (array.len ;; ROUNDTRIP-NEXT: (local.get $a) ;; ROUNDTRIP-NEXT: ) ;; ROUNDTRIP-NEXT: ) (func $unannotated-len (param $a arrayref) (result i32) (array.len (local.get $a) ) ) )