diff options
author | Jérôme Vouillon <jerome.vouillon@gmail.com> | 2024-04-02 13:10:52 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-02 10:10:52 -0700 |
commit | 35df5043764b41d7c23d15db5518cfe8becb3564 (patch) | |
tree | 15b516baf8bb21a4300309a7b9261e6afcc5e7d0 | |
parent | 4e2ebbd6de6f99e5972654b3f50ddbc1c6839a73 (diff) | |
download | binaryen-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.cpp | 4 | ||||
-rw-r--r-- | test/lit/basic/extended-names-passive-data-segments.wast | 27 | ||||
-rw-r--r-- | test/lit/basic/extended-names.wast | 7 |
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) |