Do not use Module::remove() iterator version
authorEddie Hung <eddie@fpgeh.com>
Thu, 27 Jun 2019 22:29:20 +0000 (15:29 -0700)
committerEddie Hung <eddie@fpgeh.com>
Thu, 27 Jun 2019 22:29:20 +0000 (15:29 -0700)
passes/techmap/abc9.cc

index e2a82f0c88790ae28e6441c0d517f02cddcc55b1..3721b82b74e57f99fc35c6c66936407f1f936f90 100644 (file)
@@ -555,17 +555,18 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *current_module, std::stri
 
                dict<IdString, bool> abc_box;
                vector<RTLIL::Cell*> boxes;
-               for (auto cell : module->cells()) {
+               for (const auto &it : module->cells_) {
+                       auto cell = it.second;
                        if (cell->type.in("$_AND_", "$_NOT_")) {
                                module->remove(cell);
                                continue;
                        }
-                       auto it = abc_box.find(cell->type);
-                       if (it == abc_box.end()) {
+                       auto jt = abc_box.find(cell->type);
+                       if (jt == abc_box.end()) {
                                RTLIL::Module* box_module = design->module(cell->type);
-                               it = abc_box.insert(std::make_pair(cell->type, box_module && box_module->attributes.count("\\abc_box_id"))).first;
+                               jt = abc_box.insert(std::make_pair(cell->type, box_module && box_module->attributes.count("\\abc_box_id"))).first;
                        }
-                       if (it->second)
+                       if (jt->second)
                                boxes.emplace_back(cell);
                }