summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/Memory64Lowering.cpp3
-rw-r--r--src/wasm/wasm-binary.cpp13
-rw-r--r--test/lit/memory64-limits.wast9
-rw-r--r--test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.txt3
-rw-r--r--test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.wast4
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)
+)