diff options
-rw-r--r-- | src/passes/Memory64Lowering.cpp | 3 | ||||
-rw-r--r-- | src/wasm/wasm-binary.cpp | 13 | ||||
-rw-r--r-- | test/lit/memory64-limits.wast | 9 | ||||
-rw-r--r-- | test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.txt | 3 | ||||
-rw-r--r-- | test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.wast | 4 |
5 files changed, 29 insertions, 3 deletions
diff --git a/src/passes/Memory64Lowering.cpp b/src/passes/Memory64Lowering.cpp index 5e1004797..c376ed6c6 100644 --- a/src/passes/Memory64Lowering.cpp +++ b/src/passes/Memory64Lowering.cpp @@ -98,6 +98,9 @@ struct Memory64Lowering : public WalkerPass<PostWalker<Memory64Lowering>> { } // This is visited last. memory->indexType = Type::i32; + if (memory->hasMax() && memory->max > Memory::kMaxSize32) { + memory->max = Memory::kMaxSize32; + } } }; diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index 0b3ed0b53..43ab509a8 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -107,9 +107,16 @@ void WasmBinaryWriter::writeResizableLimits( (shared ? (uint32_t)BinaryConsts::IsShared : 0U) | (is64 ? (uint32_t)BinaryConsts::Is64 : 0U); o << U32LEB(flags); - o << U32LEB(initial); - if (hasMaximum) { - o << U32LEB(maximum); + if (is64) { + o << U64LEB(initial); + if (hasMaximum) { + o << U64LEB(maximum); + } + } else { + o << U32LEB(initial); + if (hasMaximum) { + o << U32LEB(maximum); + } } } diff --git a/test/lit/memory64-limits.wast b/test/lit/memory64-limits.wast new file mode 100644 index 000000000..29e51d29e --- /dev/null +++ b/test/lit/memory64-limits.wast @@ -0,0 +1,9 @@ +;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s + +(module + (memory $0 i64 1 4294967296) +) + +;; CHECK: (module +;; CHECK-NEXT: (memory $0 i64 1 4294967296) +;; CHECK-NEXT: ) diff --git a/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.txt b/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.txt index 84ded6ae5..ee263c3cb 100644 --- a/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.txt +++ b/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.txt @@ -166,3 +166,6 @@ ) ) ) +(module + (memory $0 1 65536) +) diff --git a/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.wast b/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.wast index 15ea29eda..68422aea8 100644 --- a/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.wast +++ b/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.wast @@ -29,3 +29,7 @@ (memory.copy (i64.const 1) (i64.const 2) (i64.const 3)) ) ) + +(module + (memory $0 i64 1 65537) +) |