summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ir/names.h5
-rw-r--r--src/tools/fuzzing.h22
2 files changed, 15 insertions, 12 deletions
diff --git a/src/ir/names.h b/src/ir/names.h
index 6fbb987f5..94efd91d4 100644
--- a/src/ir/names.h
+++ b/src/ir/names.h
@@ -84,6 +84,11 @@ inline Name getValidEventName(Module& module, Name root) {
return getValidName(
module, root, [&](Name test) { return !module.getEventOrNull(test); });
}
+inline Name getValidElementSegmentName(Module& module, Name root) {
+ return getValidName(module, root, [&](Name test) {
+ return !module.getElementSegmentOrNull(test);
+ });
+}
} // namespace Names
diff --git a/src/tools/fuzzing.h b/src/tools/fuzzing.h
index 288fdc23c..de03e943b 100644
--- a/src/tools/fuzzing.h
+++ b/src/tools/fuzzing.h
@@ -425,23 +425,20 @@ private:
// TODO(reference-types): allow the fuzzer to create multiple tables
void setupTables() {
- if (wasm.tables.size() > 0) {
- auto& table = wasm.tables[0];
- table->initial = table->max = 0;
-
- auto segment = std::make_unique<ElementSegment>(
- table->name, builder.makeConst(int32_t(0)));
- segment->setName(Name::fromInt(0), false);
- wasm.addElementSegment(std::move(segment));
- } else {
+ // Ensure an element segment, adding one or even adding a whole table as
+ // needed.
+ if (wasm.tables.empty()) {
auto table = builder.makeTable(
Names::getValidTableName(wasm, "fuzzing_table"), 0, 0);
table->hasExplicitName = true;
+ wasm.addTable(std::move(table));
+ }
+ if (wasm.elementSegments.empty()) {
+ // TODO: use a random table
auto segment = std::make_unique<ElementSegment>(
- table->name, builder.makeConst(int32_t(0)));
- segment->setName(Name::fromInt(0), false);
+ wasm.tables[0]->name, builder.makeConst(int32_t(0)));
+ segment->setName(Names::getValidElementSegmentName(wasm, "elem$"), false);
wasm.addElementSegment(std::move(segment));
- wasm.addTable(std::move(table));
}
}
@@ -1483,6 +1480,7 @@ private:
for (const auto& type : targetFn->sig.params) {
args.push_back(make(type));
}
+ // TODO: use a random table
return builder.makeCallIndirect(
wasm.tables[0]->name, target, args, targetFn->sig, isReturn);
}