summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJérôme Vouillon <jerome.vouillon@gmail.com>2024-04-02 13:10:52 -0400
committerGitHub <noreply@github.com>2024-04-02 10:10:52 -0700
commit35df5043764b41d7c23d15db5518cfe8becb3564 (patch)
tree15b516baf8bb21a4300309a7b9261e6afcc5e7d0
parent4e2ebbd6de6f99e5972654b3f50ddbc1c6839a73 (diff)
downloadbinaryen-35df5043764b41d7c23d15db5518cfe8becb3564.tar.gz
binaryen-35df5043764b41d7c23d15db5518cfe8becb3564.tar.bz2
binaryen-35df5043764b41d7c23d15db5518cfe8becb3564.zip
Fix writing of data segment names in name section (#6462)
- Output segment names even when no memory is declared. - Only write explicit names.
-rw-r--r--src/wasm/wasm-binary.cpp4
-rw-r--r--test/lit/basic/extended-names-passive-data-segments.wast27
-rw-r--r--test/lit/basic/extended-names.wast7
3 files changed, 36 insertions, 2 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index f9a643d66..28a630c4a 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -1067,7 +1067,7 @@ void WasmBinaryWriter::writeNames() {
}
// data segment names
- if (!wasm->memories.empty()) {
+ {
Index count = 0;
for (auto& seg : wasm->dataSegments) {
if (seg->hasExplicitName) {
@@ -1081,7 +1081,7 @@ void WasmBinaryWriter::writeNames() {
o << U32LEB(count);
for (Index i = 0; i < wasm->dataSegments.size(); i++) {
auto& seg = wasm->dataSegments[i];
- if (seg->name.is()) {
+ if (seg->hasExplicitName) {
o << U32LEB(i);
writeEscapedName(seg->name.str);
}
diff --git a/test/lit/basic/extended-names-passive-data-segments.wast b/test/lit/basic/extended-names-passive-data-segments.wast
new file mode 100644
index 000000000..e2d63ed3f
--- /dev/null
+++ b/test/lit/basic/extended-names-passive-data-segments.wast
@@ -0,0 +1,27 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+
+;; RUN: wasm-opt %s -all -o %t.text.wast -g -S
+;; RUN: wasm-as %s -all -g -o %t.wasm
+;; RUN: wasm-dis %t.wasm -all -o %t.bin.wast
+;; RUN: wasm-as %s -all -o %t.nodebug.wasm
+;; RUN: wasm-dis %t.nodebug.wasm -all -o %t.bin.nodebug.wast
+;; RUN: cat %t.text.wast | filecheck %s --check-prefix=CHECK-TEXT
+;; RUN: cat %t.bin.wast | filecheck %s --check-prefix=CHECK-BIN
+;; RUN: cat %t.bin.nodebug.wast | filecheck %s --check-prefix=CHECK-BIN-NODEBUG
+
+(module $foo
+
+ ;; Check that passive data segment names are output even when there
+ ;; is no declared memory
+ ;; CHECK-TEXT: (data $passive_data "b")
+ ;; CHECK-BIN: (data $passive_data "b")
+ (data $passive_data "b")
+ (data "c")
+)
+;; CHECK-TEXT: (data $1 "c")
+
+;; CHECK-BIN: (data $1 "c")
+
+;; CHECK-BIN-NODEBUG: (data $0 "b")
+
+;; CHECK-BIN-NODEBUG: (data $1 "c")
diff --git a/test/lit/basic/extended-names.wast b/test/lit/basic/extended-names.wast
index b6c4d52ae..c89dd0d38 100644
--- a/test/lit/basic/extended-names.wast
+++ b/test/lit/basic/extended-names.wast
@@ -16,6 +16,8 @@
;; CHECK-TEXT: (data $passive_data "b")
+ ;; CHECK-TEXT: (data $2 "c")
+
;; CHECK-TEXT: (table $t1 1 funcref)
;; CHECK-BIN: (memory $m1 1 1)
@@ -23,11 +25,14 @@
;; CHECK-BIN: (data $passive_data "b")
+ ;; CHECK-BIN: (data $2 "c")
+
;; CHECK-BIN: (table $t1 1 funcref)
(table $t1 1 funcref)
(memory $m1 1 1)
(data $mydata (i32.const 0) "a")
(data $passive_data "b")
+ (data "c")
)
;; CHECK-BIN-NODEBUG: (memory $0 1 1)
@@ -35,4 +40,6 @@
;; CHECK-BIN-NODEBUG: (data $1 "b")
+;; CHECK-BIN-NODEBUG: (data $2 "c")
+
;; CHECK-BIN-NODEBUG: (table $0 1 funcref)