diff --git a/src/gpu-compute/compute_unit.hh b/src/gpu-compute/compute_unit.hh
index adf3c21..051a5f2 100644
--- a/src/gpu-compute/compute_unit.hh
+++ b/src/gpu-compute/compute_unit.hh
@@ -280,7 +280,7 @@
     bool cedeSIMD(int simdId, int wfSlotId);
 
     template<typename c0, typename c1> void doSmReturn(GPUDynInstPtr gpuDynInst);
-    virtual void init();
+    virtual void init() override;
     void sendRequest(GPUDynInstPtr gpuDynInst, int index, PacketPtr pkt);
     void sendSyncRequest(GPUDynInstPtr gpuDynInst, int index, PacketPtr pkt);
     void injectGlobalMemFence(GPUDynInstPtr gpuDynInst,
@@ -380,7 +380,7 @@
     int glbMemInstAvail;
 
     void
-    regStats();
+    regStats() override;
 
     LdsState &
     getLds() const
diff --git a/src/gpu-compute/dispatcher.hh b/src/gpu-compute/dispatcher.hh
index 17dc5a5..9d21a22 100644
--- a/src/gpu-compute/dispatcher.hh
+++ b/src/gpu-compute/dispatcher.hh
@@ -103,8 +103,8 @@
         ~GpuDispatcher() { }
 
         void exec();
-        virtual void serialize(CheckpointOut &cp) const;
-        virtual void unserialize(CheckpointIn &cp);
+        virtual void serialize(CheckpointOut &cp) const override;
+        virtual void unserialize(CheckpointIn &cp) override;
         void notifyWgCompl(Wavefront *w);
         void scheduleDispatch();
         void accessUserVar(BaseCPU *cpu, uint64_t addr, int val, int off);
@@ -143,9 +143,9 @@
         Port &getPort(const std::string &if_name,
                       PortID idx=InvalidPortID) override;
 
-        AddrRangeList getAddrRanges() const;
-        Tick read(PacketPtr pkt);
-        Tick write(PacketPtr pkt);
+        AddrRangeList getAddrRanges() const override;
+        Tick read(PacketPtr pkt) override;
+        Tick write(PacketPtr pkt) override;
 
         // helper functions to retrieve/set GPU attributes
         int getNumCUs();
diff --git a/src/gpu-compute/gpu_tlb.hh b/src/gpu-compute/gpu_tlb.hh
index 766d2d1..2abaabe 100644
--- a/src/gpu-compute/gpu_tlb.hh
+++ b/src/gpu-compute/gpu_tlb.hh
@@ -217,7 +217,7 @@
         // the avg. over all pages.
         Stats::Scalar avgReuseDistance;
 
-        void regStats();
+        void regStats() override;
         void updatePageFootprint(Addr virt_page_addr);
         void printAccessPattern();
 
@@ -235,8 +235,8 @@
         TlbEntry *insert(Addr vpn, TlbEntry &entry);
 
         // Checkpointing
-        virtual void serialize(CheckpointOut& cp) const;
-        virtual void unserialize(CheckpointIn& cp);
+        virtual void serialize(CheckpointOut& cp) const override;
+        virtual void unserialize(CheckpointIn& cp) override;
         void issueTranslation();
         enum tlbOutcome {TLB_HIT, TLB_MISS, PAGE_WALK, MISS_RETURN};
         bool tlbLookup(const RequestPtr &req,
diff --git a/src/gpu-compute/tlb_coalescer.hh b/src/gpu-compute/tlb_coalescer.hh
index b65f1b0..f035003 100644
--- a/src/gpu-compute/tlb_coalescer.hh
+++ b/src/gpu-compute/tlb_coalescer.hh
@@ -143,7 +143,7 @@
 
     bool canCoalesce(PacketPtr pkt1, PacketPtr pkt2);
     void updatePhysAddresses(PacketPtr pkt);
-    void regStats();
+    void regStats() override;
 
     // Clock related functions. Maps to-and-from
     // Simulation ticks and object clocks.
