Andreas Sandberg has submitted this change and it was merged. ( https://gem5-review.googlesource.com/3420 )

Change subject: base, sim, arch: Fix clang 5.0 warnings
......................................................................

base, sim, arch: Fix clang 5.0 warnings

Compiling gem5 with recent version of clang (4 and 5) triggers
warnings that are treated as errors:

  * Global templatized static functions result in a warning if they
    are not used. These should either be declared as static inline or
    without the static identifier to avoid the warning.

  * Some templatized classes contain static variables. The
    instantiated versions of these variables / templates need to be
    explicitly declared to avoid a compiler warning.

Change-Id: Ie8261144836e94ebab7ea04ccccb90927672c257
Signed-off-by: Andreas Sandberg <andreas.sandb...@arm.com>
Reviewed-by: Curtis Dunham <curtis.dun...@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/3420
Reviewed-by: Jason Lowe-Power <ja...@lowepower.com>
---
M src/arch/arm/faults.hh
M src/arch/arm/insts/vfp.hh
M src/arch/arm/isa/insts/fp.isa
M src/arch/hsail/insts/decl.hh
M src/arch/mips/faults.hh
M src/arch/sparc/faults.hh
M src/base/circlebuf.hh
M src/sim/syscall_emul.hh
8 files changed, 125 insertions(+), 15 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved
  Andreas Sandberg: Looks good to me, approved



diff --git a/src/arch/arm/faults.hh b/src/arch/arm/faults.hh
index ab4c675..6e7c92c 100644
--- a/src/arch/arm/faults.hh
+++ b/src/arch/arm/faults.hh
@@ -567,7 +567,8 @@
 };

 /*
- * Explicitly declare template static member variables avoid warnings in some clang versions
+ * Explicitly declare template static member variables to avoid warnings
+ * in some clang versions
  */
 template<> ArmFault::FaultVals ArmFaultVals<Reset>::vals;
 template<> ArmFault::FaultVals ArmFaultVals<UndefinedInstruction>::vals;
diff --git a/src/arch/arm/insts/vfp.hh b/src/arch/arm/insts/vfp.hh
index de0c621..caa2237 100644
--- a/src/arch/arm/insts/vfp.hh
+++ b/src/arch/arm/insts/vfp.hh
@@ -201,7 +201,7 @@
 }

 template <class fpType>
-static bool
+static inline bool
 isSnan(fpType val)
 {
     const bool single = (sizeof(fpType) == sizeof(float));
diff --git a/src/arch/arm/isa/insts/fp.isa b/src/arch/arm/isa/insts/fp.isa
index 0f10a05..dc2f307 100644
--- a/src/arch/arm/isa/insts/fp.isa
+++ b/src/arch/arm/isa/insts/fp.isa
@@ -65,7 +65,7 @@
 };

 template <class VfpOp>
-static StaticInstPtr
+StaticInstPtr
 decodeVfpRegRegOp(ExtMachInst machInst,
         IntRegIndex dest, IntRegIndex op1, bool wide)
 {
@@ -101,7 +101,7 @@
 };

 template <class VfpOp>
-static StaticInstPtr
+StaticInstPtr
 decodeVfpRegImmOp(ExtMachInst machInst,
         IntRegIndex dest, uint64_t imm, bool wide)
 {
@@ -137,7 +137,7 @@
 };

 template <class VfpOp>
-static StaticInstPtr
+StaticInstPtr
 decodeVfpRegRegImmOp(ExtMachInst machInst, IntRegIndex dest,
                      IntRegIndex op1, uint64_t imm, bool wide)
 {
@@ -173,7 +173,7 @@
 };

 template <class VfpOp>
-static StaticInstPtr
+StaticInstPtr
 decodeVfpRegRegRegOp(ExtMachInst machInst, IntRegIndex dest,
                      IntRegIndex op1, IntRegIndex op2, bool wide)
 {
diff --git a/src/arch/hsail/insts/decl.hh b/src/arch/hsail/insts/decl.hh
index f84cb61..3132a42 100644
--- a/src/arch/hsail/insts/decl.hh
+++ b/src/arch/hsail/insts/decl.hh
@@ -1272,6 +1272,27 @@

     template<typename T> T heynot(T arg) { return ~arg; }
     template<> inline bool heynot<bool>(bool arg) { return !arg; }
+
+
+    /* Explicitly declare template static member variables to avoid
+     * warnings in some clang versions
+     */
+    template<> const char *B1::label;
+    template<> const char *B8::label;
+    template<> const char *B16::label;
+    template<> const char *B32::label;
+    template<> const char *B64::label;
+    template<> const char *S8::label;
+    template<> const char *S16::label;
+    template<> const char *S32::label;
+    template<> const char *S64::label;
+    template<> const char *U8::label;
+    template<> const char *U16::label;
+    template<> const char *U32::label;
+    template<> const char *U64::label;
+    template<> const char *F32::label;
+    template<> const char *F64::label;
+
 } // namespace HsailISA

 #endif // __ARCH_HSAIL_INSTS_DECL_HH__
diff --git a/src/arch/mips/faults.hh b/src/arch/mips/faults.hh
index 1ec726d..dcce764 100644
--- a/src/arch/mips/faults.hh
+++ b/src/arch/mips/faults.hh
@@ -303,6 +303,30 @@
     ExcCode code() const { return MipsFault<TlbModifiedFault>::code(); }
 };

+/*
+ * Explicitly declare template static member variables to avoid warnings
+ * in some clang versions
+ */
+template<> MipsFaultBase::FaultVals MipsFault<SystemCallFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<ReservedInstructionFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<ThreadFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<IntegerOverflowFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<TrapFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<BreakpointFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<DspStateDisabledFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<MachineCheckFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<ResetFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<SoftResetFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<NonMaskableInterrupt>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<CoprocessorUnusableFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<InterruptFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<AddressErrorFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<TlbInvalidFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<TlbRefillFault>::vals;
+template<> MipsFaultBase::FaultVals MipsFault<TlbModifiedFault>::vals;
+
+
+
 } // namespace MipsISA

 #endif // __MIPS_FAULTS_HH__
diff --git a/src/arch/sparc/faults.hh b/src/arch/sparc/faults.hh
index 9d5f7e0..42c8b71 100644
--- a/src/arch/sparc/faults.hh
+++ b/src/arch/sparc/faults.hh
@@ -276,6 +276,70 @@
                 StaticInst::nullStaticInstPtr);
 };

+/*
+ * Explicitly declare template static member variables to avoid warnings
+ * in some clang versions
+ */
+template<> SparcFaultBase::FaultVals SparcFault<PowerOnReset>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<WatchDogReset>::vals;
+template<> SparcFaultBase::FaultVals
+    SparcFault<ExternallyInitiatedReset>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<SoftwareInitiatedReset>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<REDStateException>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<StoreError>::vals;
+template<> SparcFaultBase::FaultVals
+    SparcFault<InstructionAccessException>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<InstructionAccessError>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<IllegalInstruction>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<PrivilegedOpcode>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<FpDisabled>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<FpExceptionIEEE754>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<FpExceptionOther>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<TagOverflow>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<CleanWindow>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<DivisionByZero>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<InternalProcessorError>::vals;
+template<> SparcFaultBase::FaultVals
+    SparcFault<InstructionInvalidTSBEntry>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<DataInvalidTSBEntry>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<DataAccessException>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<DataAccessError>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<DataAccessProtection>::vals; +template<> SparcFaultBase::FaultVals SparcFault<MemAddressNotAligned>::vals;
+template<> SparcFaultBase::FaultVals
+    SparcFault<LDDFMemAddressNotAligned>::vals;
+template<> SparcFaultBase::FaultVals
+    SparcFault<STDFMemAddressNotAligned>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<PrivilegedAction>::vals;
+template<> SparcFaultBase::FaultVals
+    SparcFault<LDQFMemAddressNotAligned>::vals;
+template<> SparcFaultBase::FaultVals
+    SparcFault<STQFMemAddressNotAligned>::vals;
+template<> SparcFaultBase::FaultVals
+    SparcFault<InstructionRealTranslationMiss>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<DataRealTranslationMiss>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<InterruptLevelN>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<HstickMatch>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<TrapLevelZero>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<InterruptVector>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<PAWatchpoint>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<VAWatchpoint>::vals;
+template<> SparcFaultBase::FaultVals
+    SparcFault<FastInstructionAccessMMUMiss>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<FastDataAccessMMUMiss>::vals;
+template<>
+     SparcFaultBase::FaultVals SparcFault<FastDataAccessProtection>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<InstructionBreakpoint>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<CpuMondo>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<DevMondo>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<ResumableError>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<SpillNNormal>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<SpillNOther>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<FillNNormal>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<FillNOther>::vals;
+template<> SparcFaultBase::FaultVals SparcFault<TrapInstruction>::vals;
+
+
 void enterREDState(ThreadContext *tc);

 void doREDFault(ThreadContext *tc, TrapType tt);
diff --git a/src/base/circlebuf.hh b/src/base/circlebuf.hh
index 2ab14e2..bf6f9e2 100644
--- a/src/base/circlebuf.hh
+++ b/src/base/circlebuf.hh
@@ -247,7 +247,7 @@


 template <typename T>
-static void
+void
 arrayParamOut(CheckpointOut &cp, const std::string &name,
               const CircleBuf<T> &param)
 {
@@ -257,7 +257,7 @@
 }

 template <typename T>
-static void
+void
 arrayParamIn(CheckpointIn &cp, const std::string &name,
              CircleBuf<T> &param)
 {
@@ -269,7 +269,7 @@
 }

 template <typename T>
-static void
+void
 arrayParamOut(CheckpointOut &cp, const std::string &name,
               const Fifo<T> &param)
 {
@@ -279,7 +279,7 @@
 }

 template <typename T>
-static void
+void
 arrayParamIn(CheckpointIn &cp, const std::string &name,
              Fifo<T> &param)
 {
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
index 53c053f..7efd7c7 100644
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -429,7 +429,7 @@
 //// memory space.  Used by stat(), fstat(), and lstat().

 template <typename target_stat, typename host_stat>
-static void
+void
 convertStatBuf(target_stat &tgt, host_stat *host, bool fakeTTY = false)
 {
     using namespace TheISA;
@@ -478,7 +478,7 @@
 // Same for stat64

 template <typename target_stat, typename host_stat64>
-static void
+void
 convertStat64Buf(target_stat &tgt, host_stat64 *host, bool fakeTTY = false)
 {
     using namespace TheISA;
@@ -500,7 +500,7 @@

 // Here are a couple of convenience functions
 template<class OS>
-static void
+void
 copyOutStatBuf(SETranslatingPortProxy &mem, Addr addr,
                hst_stat *host, bool fakeTTY = false)
 {
@@ -511,7 +511,7 @@
 }

 template<class OS>
-static void
+void
 copyOutStat64Buf(SETranslatingPortProxy &mem, Addr addr,
                  hst_stat64 *host, bool fakeTTY = false)
 {
@@ -522,7 +522,7 @@
 }

 template <class OS>
-static void
+void
 copyOutStatfsBuf(SETranslatingPortProxy &mem, Addr addr,
                  hst_statfs *host)
 {

--
To view, visit https://gem5-review.googlesource.com/3420
To unsubscribe, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie8261144836e94ebab7ea04ccccb90927672c257
Gerrit-Change-Number: 3420
Gerrit-PatchSet: 2
Gerrit-Owner: Andreas Sandberg <andreas.sandb...@arm.com>
Gerrit-Reviewer: Andreas Hansson <andreas.hans...@arm.com>
Gerrit-Reviewer: Andreas Sandberg <andreas.sandb...@arm.com>
Gerrit-Reviewer: Curtis Dunham <curtis.dun...@arm.com>
Gerrit-Reviewer: Gabe Black <gabebl...@google.com>
Gerrit-Reviewer: Jason Lowe-Power <ja...@lowepower.com>
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to