diff options
-rw-r--r-- | src/wasm/wasm-binary.cpp | 2 | ||||
-rw-r--r-- | test/lit/binary/data-names.test | 25 | ||||
-rw-r--r-- | test/lit/binary/data-names.test.wasm | bin | 0 -> 119 bytes |
3 files changed, 26 insertions, 1 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index 924bf1601..e08644eae 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -3700,7 +3700,7 @@ void WasmBinaryReader::readNames(size_t payloadLen) { auto rawName = getInlineString(); auto name = processor.process(rawName); if (index < wasm.dataSegments.size()) { - wasm.dataSegments[i]->setExplicitName(name); + wasm.dataSegments[index]->setExplicitName(name); } else { std::cerr << "warning: data index out of bounds in name section, " "data subsection: " diff --git a/test/lit/binary/data-names.test b/test/lit/binary/data-names.test new file mode 100644 index 000000000..ab7baf5d7 --- /dev/null +++ b/test/lit/binary/data-names.test @@ -0,0 +1,25 @@ +;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. +;; RUN: wasm-opt -all %s.wasm -q -S -o - | filecheck %s + +;; Test that data segment names roundtrip properly. The wasm file contains +;; +;; (module +;; (memory $mem 10) +;; (data $passive1 "passive1") +;; (data $passive2 "passive2") +;; (data $active1 (offset i32.const 0) "active1") +;; (data $active2 (offset i32.const 0) "active2") +;; ) +;; +;; But the names section is *reversed*: the name of the last data segment is +;; first, and so forth. We must still give the proper segments their names. + +;; CHECK: (memory $mem 10) + +;; CHECK: (data $passive1 "passive1") + +;; CHECK: (data $passive2 "passive2") + +;; CHECK: (data $active1 (i32.const 0) "active1") + +;; CHECK: (data $active2 (i32.const 0) "active2") diff --git a/test/lit/binary/data-names.test.wasm b/test/lit/binary/data-names.test.wasm Binary files differnew file mode 100644 index 000000000..7384aea50 --- /dev/null +++ b/test/lit/binary/data-names.test.wasm |