base, sim: Add missing destructors
authorNikos Nikoleris <nikos.nikoleris@arm.com>
Wed, 28 Nov 2018 08:16:33 +0000 (08:16 +0000)
committerNikos Nikoleris <nikos.nikoleris@arm.com>
Tue, 4 Dec 2018 10:02:29 +0000 (10:02 +0000)
Derived classes with virtual functions need to define a virtual
destructor or a protected destructor otherwise calling the base class
destructor has undefined behavior. This change adds a virtual
distructor in the base class.

Change-Id: I1c855aa56dff6585ff99b9147bdb4eb9729a0a53
Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/14815
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>

src/base/statistics.hh
src/cpu/minor/buffers.hh
src/cpu/testers/traffic_gen/stream_gen.hh
src/mem/qos/q_policy.hh
src/sim/faults.hh

index 404bdf15a95908032c89cffe69333149e67651ef..8a5420f05e901455723f3536ed8c7e0ca1c7c1e6 100644 (file)
@@ -2090,6 +2090,8 @@ class Node
      *
      */
     virtual std::string str() const = 0;
+
+    virtual ~Node() {};
 };
 
 /** Shared pointer to a function Node. */
index edf87dec535236dc69915eb5b3690483209f89b0..a32e374936c3971f301a2e1b5c2205c608f62b0c 100644 (file)
@@ -381,6 +381,8 @@ class Reservable
 
     /** Free a reserved slot */
     virtual void freeReservation() = 0;
+
+    virtual ~Reservable() {};
 };
 
 /** Wrapper for a queue type to act as a pipeline stage input queue.
@@ -418,8 +420,6 @@ class Queue : public Named, public Reservable
         dataName(data_name)
     { }
 
-    virtual ~Queue() { }
-
   public:
     /** Push an element into the buffer if it isn't a bubble.  Bubbles are
      *  just discarded.  It is assummed that any push into a queue with
index df9d7b75eb85e7ae8a79b0f21b2f5cca5a34ff28..b579f1b1db39ff8288e2cb105ff7b5d91c981dd8 100644 (file)
@@ -63,6 +63,8 @@ class StreamGen
     }
 
   public:
+    virtual ~StreamGen() {};
+
     virtual uint32_t pickStreamID() = 0;
     virtual uint32_t pickSubStreamID() = 0;
 
index 3e455e89c94f7aec7ed2c7b2548db0dab1eb2ba8..ba36b43b70988bb20651bdd2c0e9f6c38a704380 100644 (file)
@@ -99,6 +99,8 @@ class QueuePolicy
      */
     void setMemCtrl(MemCtrl* mem) { memCtrl = mem; };
 
+    virtual ~QueuePolicy() {};
+
   protected:
     QueuePolicy(const QoSMemCtrlParams* p)
       : memCtrl(nullptr)
index be7aab582ea5c5bd5137d3740acb175ad79e36c7..74759715204d25af2b79a79141cb52ee19c484ce 100644 (file)
@@ -47,6 +47,8 @@ class FaultBase
     virtual FaultName name() const = 0;
     virtual void invoke(ThreadContext * tc, const StaticInstPtr &inst =
                         StaticInst::nullStaticInstPtr);
+
+    virtual ~FaultBase() {};
 };
 
 class UnimpFault : public FaultBase