bugpoint: Don't remove modules or cells while iterating over them.

Reported by @ZirconiumX.
This commit is contained in:
Marcelina Kościelnicka 2020-04-21 19:56:28 +02:00
parent 16a3048308
commit cd82afb740
1 changed files with 14 additions and 4 deletions

View File

@ -133,6 +133,7 @@ struct BugpointPass : public Pass {
int index = 0;
if (modules)
{
Module *removed_module = nullptr;
for (auto module : design_copy->modules())
{
if (module->get_blackbox_attribute())
@ -141,10 +142,14 @@ struct BugpointPass : public Pass {
if (index++ == seed)
{
log("Trying to remove module %s.\n", module->name.c_str());
design_copy->remove(module);
return design_copy;
removed_module = module;
break;
}
}
if (removed_module) {
design_copy->remove(removed_module);
return design_copy;
}
}
if (ports)
{
@ -178,15 +183,20 @@ struct BugpointPass : public Pass {
if (mod->get_blackbox_attribute())
continue;
Cell *removed_cell = nullptr;
for (auto cell : mod->cells())
{
if (index++ == seed)
{
log("Trying to remove cell %s.%s.\n", mod->name.c_str(), cell->name.c_str());
mod->remove(cell);
return design_copy;
removed_cell = cell;
break;
}
}
if (removed_cell) {
mod->remove(removed_cell);
return design_copy;
}
}
}
if (connections)