Skip to content

Commit 5fb2137

Browse files
authored
MemoryPacking: Ignore empty segments (#6243)
They might trap. Leave that for RemoveUnusedModuleElements. Fixes #6230
1 parent 662835a commit 5fb2137

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

src/passes/MemoryPacking.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,13 @@ bool MemoryPacking::canSplit(const std::unique_ptr<DataSegment>& segment,
270270
return false;
271271
}
272272

273+
if (segment->data.empty()) {
274+
// Ignore empty segments, leaving them in place. We may not need them, but
275+
// leave that for RemoveUnusedModuleElements to decide (as they may trap
276+
// during startup if out of bounds, which is an effect).
277+
return false;
278+
}
279+
273280
for (auto* referrer : referrers) {
274281
if (auto* curr = referrer->dynCast<MemoryInit>()) {
275282
if (segment->isPassive) {

test/lit/passes/memory-packing_all-features.wast

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@
1818
;; CHECK: (memory $0 2048 2048)
1919
(memory $0 2048 2048)
2020
(import "env" "memoryBase" (global $memoryBase i32))
21-
(data (i32.const 4066) "") ;; empty
21+
(data (i32.const 4066) "") ;; empty; leave it as is
22+
;; (remove-unused-module-elements handles such
23+
;; things, taking into account possible traps etc.)
2224
)
2325

26+
;; CHECK: (data $0 (i32.const 4066) "")
2427
(module
2528
;; CHECK: (import "env" "memoryBase" (global $memoryBase i32))
2629

@@ -2319,6 +2322,8 @@
23192322
(memory $0 1 1 shared)
23202323
(data (i32.const 0) "")
23212324
(data "foo")
2325+
;; CHECK: (data $0 (i32.const 0) "")
2326+
23222327
;; CHECK: (data $1 "foo")
23232328

23242329
;; CHECK: (func $0 (type $0)

0 commit comments

Comments
 (0)