Fix more potential for undefined behaviour due to container invalidation
authorEddie Hung <eddie@fpgeh.com>
Fri, 28 Jun 2019 16:51:43 +0000 (09:51 -0700)
committerEddie Hung <eddie@fpgeh.com>
Fri, 28 Jun 2019 16:51:43 +0000 (09:51 -0700)
backends/aiger/xaiger.cc

index ae690ec495835d2e930facdf76caffe893b24470..d373ca77e1f02a32f69af5196b62d099fa38212d 100644 (file)
@@ -436,14 +436,18 @@ struct XAigerWriter
                                        new_wire = module->addWire(wire_name, GetSize(wire));
                                SigBit new_bit(new_wire, bit.offset);
                                module->connect(new_bit, bit);
-                               if (not_map.count(bit))
-                                       not_map[new_bit] = not_map.at(bit);
+                               if (not_map.count(bit)) {
+                                       auto a = not_map.at(bit);
+                                       not_map[new_bit] = a;
+                               }
                                else if (and_map.count(bit)) {
-                                   //and_map[new_bit] = and_map.at(bit); // Breaks gcc-4.8
-                                   and_map.insert(std::make_pair(new_bit, and_map.at(bit)));
+                                       auto a = and_map.at(bit);
+                                       and_map[new_bit] = a;
+                               }
+                               else if (alias_map.count(bit)) {
+                                       auto a = alias_map.at(bit);
+                                       alias_map[new_bit] = a;
                                }
-                               else if (alias_map.count(bit))
-                                       alias_map[new_bit] = alias_map.at(bit);
                                else
                                        alias_map[new_bit] = bit;
                                output_bits.erase(bit);