When a simulation ends, the sc_objects it contains are destroyed one
by one, not necessarily in hierarchy order. That means that a parent
object can legitimately be destroyed before its children. Instead of
panic-ing when that inevitably happens, this change makes gem5 turn
those children into top level objects.
Change-Id: Icad9c99310fbc3ddcadbbb4f8a990b4fbfe35bdf
Reviewed-on: https://gem5-review.googlesource.com/12035
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
 
 Object::~Object()
 {
-    panic_if(!children.empty(), "Parent object still has children.\n");
+    // Promote all children to be top level objects.
+    for (auto child: children) {
+        addObject(&topLevelObjects, child);
+        child->_gem5_object->parent = nullptr;
+    }
+    children.clear();
 
     if (parent)
         popObject(&parent->_gem5_object->children, _name);
 
     Objects children;
     Events events;
     sc_core::sc_object *parent;
-    ObjectsIt parentIt;
 
     sc_core::sc_attr_cltn cltn;
 };