diff options
-rw-r--r-- | src/ir/names.h | 5 | ||||
-rw-r--r-- | src/tools/fuzzing.h | 22 |
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); } |