diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 600768b9cdb..75ddc691741 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -221,7 +221,7 @@ jobs: # Run tests on Alpine Linux, which we use to make our release builds. # Note: Alpine uses musl libc. - # Keep in sync with build_release.yml. The only difference is that here we + # Keep in sync with create_release.yml. The only difference is that here we # do not have the "archive" and "upload tarball" jobs. build-alpine: name: alpine @@ -259,8 +259,11 @@ jobs: run: ./alpine.sh pip3 install --break-system-packages -r requirements-dev.txt - name: cmake + # Build with an 8MB stack size, as otherwise Alpine/musl's default stack + # size for pthreads is tiny, + # https://github.com/WebAssembly/binaryen/issues/8594 run: | - ./alpine.sh cmake . -G Ninja -DCMAKE_CXX_FLAGS="-static" -DCMAKE_C_FLAGS="-static" -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIB=ON -DBUILD_MIMALLOC=ON -DCMAKE_INSTALL_PREFIX=install + ./alpine.sh cmake . -G Ninja -DCMAKE_CXX_FLAGS="-static" -DCMAKE_C_FLAGS="-static" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-z,stack-size=8388608" -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIB=ON -DBUILD_MIMALLOC=ON -DCMAKE_INSTALL_PREFIX=install - name: build run: | diff --git a/.github/workflows/create_release.yml b/.github/workflows/create_release.yml index ed8bb2fb6c4..07cbdc8fef5 100644 --- a/.github/workflows/create_release.yml +++ b/.github/workflows/create_release.yml @@ -108,6 +108,7 @@ jobs: ${{ steps.archive-arm64.outputs.SHASUM }} # Build with gcc 6.3 and run tests on Alpine Linux (inside chroot). + # Keep in sync with ci.yml. # Note: Alpine uses musl libc. build-alpine: name: alpine @@ -145,8 +146,11 @@ jobs: run: ./alpine.sh pip3 install --break-system-packages -r requirements-dev.txt - name: cmake + # Build with an 8MB stack size, as otherwise Alpine/musl's default stack + # size for pthreads is tiny, + # https://github.com/WebAssembly/binaryen/issues/8594 run: | - ./alpine.sh cmake . -G Ninja -DCMAKE_CXX_FLAGS="-static" -DCMAKE_C_FLAGS="-static" -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIB=ON -DBUILD_MIMALLOC=ON -DCMAKE_INSTALL_PREFIX=install + ./alpine.sh cmake . -G Ninja -DCMAKE_CXX_FLAGS="-static" -DCMAKE_C_FLAGS="-static" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-z,stack-size=8388608" -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIB=ON -DBUILD_MIMALLOC=ON -DCMAKE_INSTALL_PREFIX=install - name: build run: | diff --git a/test/lit/passes/merge-similar-functions_recursion.wast b/test/lit/passes/merge-similar-functions_recursion.wast new file mode 100644 index 00000000000..459ae7f3a89 --- /dev/null +++ b/test/lit/passes/merge-similar-functions_recursion.wast @@ -0,0 +1,1893 @@ +;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. +;; RUN: foreach %s %t wasm-opt -all --merge-similar-functions -S -o - | filecheck %s + +;; This has very deep recursion of calls, which end up processed recursively in +;; the pass. This should still work even on Alpine/musl which has very small +;; default stack sizes. +(module + (rec + ;; CHECK: (rec + ;; CHECK-NEXT: (type $0 (sub (struct))) + (type $0 (sub (struct))) + ;; CHECK: (type $2 (sub $0 (struct))) + (type $2 (sub $0 (struct))) + ;; CHECK: (type $1 (sub $0 (struct))) + (type $1 (sub $0 (struct))) + ;; CHECK: (type $4 (sub final $0 (struct))) + (type $4 (sub final $0 (struct))) + ;; CHECK: (type $5 (sub final $2 (struct))) + (type $5 (sub final $2 (struct))) + ;; CHECK: (type $6 (sub final $0 (struct))) + (type $6 (sub final $0 (struct))) + ;; CHECK: (type $7 (sub final $1 (struct))) + (type $7 (sub final $1 (struct))) + ;; CHECK: (type $8 (sub final $1 (struct))) + (type $8 (sub final $1 (struct))) + ;; CHECK: (type $11 (sub final $0 (struct (field (ref null $0)) (field (ref null $8)) (field (ref null $7)) (field (ref null $6)) (field (ref null $6)) (field (ref null $12)) (field (ref null $6)) (field (ref null $0)) (field (ref null $6)) (field (ref null $7)) (field (ref null $5)) (field (ref null $12)) (field (ref null $6)) (field (ref null $4)) (field (ref null $7)) (field (ref null $12)) (field (ref null $12)) (field (ref null $12)) (field (ref null $12))))) + (type $11 (sub final $0 (struct (field (ref null $0)) (field (ref null $8)) (field (ref null $7)) (field (ref null $6)) (field (ref null $6)) (field (ref null $12)) (field (ref null $6)) (field (ref null $0)) (field (ref null $6)) (field (ref null $7)) (field (ref null $5)) (field (ref null $12)) (field (ref null $6)) (field (ref null $4)) (field (ref null $7)) (field (ref null $12)) (field (ref null $12)) (field (ref null $12)) (field (ref null $12))))) + ;; CHECK: (type $12 (sub final $0 (struct))) + (type $12 (sub final $0 (struct))) + ;; CHECK: (type $13 (func (param (ref null $0)) (result (ref null $12)))) + (type $13 (func (param (ref null $0)) (result (ref null $12)))) + ;; CHECK: (type $17 (func (param (ref null $12) (ref null $0)) (result (ref (exact $12))))) + (type $17 (func (param (ref null $12) (ref null $0)) (result (ref (exact $12))))) + ) + ;; CHECK: (func $0 (type $17) (param $0 (ref null $12)) (param $1 (ref null $0)) (result (ref (exact $12))) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + (func $0 (type $17) (param $0 (ref null $12)) (param $1 (ref null $0)) (result (ref (exact $12))) + (unreachable) + ) + ;; CHECK: (func $3 (type $13) (param $0 (ref null $0)) (result (ref null $12)) + ;; CHECK-NEXT: (local $1 (ref (exact $12))) + ;; CHECK-NEXT: (local $2 (ref null (exact $12))) + ;; CHECK-NEXT: (local $3 (ref null $11)) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (call $0 + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (ref.as_non_null + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 0 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 1 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 2 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 3 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 4 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 5 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 6 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 7 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 8 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 9 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 10 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 11 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 12 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 13 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 14 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 15 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 16 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 17 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (struct.get $11 18 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.as_non_null + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + (func $3 (type $13) (param $0 (ref null $0)) (result (ref null $12)) + (local $1 (ref (exact $12))) + (local $2 (ref null (exact $12))) + (local $3 (ref null $11)) + (drop + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (call $0 + (local.tee $1 + (ref.as_non_null + (local.get $2) + ) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (struct.get $11 0 + (local.get $3) + ) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (struct.get $11 1 + (local.get $3) + ) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (struct.get $11 2 + (local.get $3) + ) + ) + (local.get $1) + ) + (struct.get $11 3 + (local.get $3) + ) + ) + (local.get $1) + ) + (local.get $1) + ) + (struct.get $11 4 + (local.get $3) + ) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (local.get $1) + ) + (struct.get $11 5 + (local.get $3) + ) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (struct.get $11 6 + (local.get $3) + ) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (struct.get $11 7 + (local.get $3) + ) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (struct.get $11 8 + (local.get $3) + ) + ) + (local.get $1) + ) + (struct.get $11 9 + (local.get $3) + ) + ) + (local.get $1) + ) + (struct.get $11 10 + (local.get $3) + ) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (struct.get $11 11 + (local.get $3) + ) + ) + (local.get $1) + ) + (struct.get $11 12 + (local.get $3) + ) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (struct.get $11 13 + (local.get $3) + ) + ) + (local.get $1) + ) + (struct.get $11 14 + (local.get $3) + ) + ) + (local.get $1) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (struct.get $11 15 + (local.get $3) + ) + ) + (local.get $1) + ) + (struct.get $11 16 + (local.get $3) + ) + ) + (local.get $1) + ) + (struct.get $11 17 + (local.get $3) + ) + ) + (local.get $1) + ) + (struct.get $11 18 + (local.get $3) + ) + ) + (local.get $1) + ) + (ref.as_non_null + (local.get $2) + ) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (local.get $1) + ) + (ref.null none) + ) + (local.get $1) + ) + (ref.null none) + ) + ) + (local.get $1) + ) +)