summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wasm/wasm-binary.cpp2
-rw-r--r--test/lit/binary/data-names.test25
-rw-r--r--test/lit/binary/data-names.test.wasmbin0 -> 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
new file mode 100644
index 000000000..7384aea50
--- /dev/null
+++ b/test/lit/binary/data-names.test.wasm
Binary files differ