summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas.sandberg@arm.com>2017-05-18 15:11:23 +0100
committerAndreas Sandberg <andreas.sandberg@arm.com>2017-05-19 08:00:45 +0000
commitc4b85d5f9854abeee6d1dbe15ae65a7a1aada6b2 (patch)
tree521b54e172ab547cd2147502bdb0015be924bb73 /src/arch
parent41ab3e6e7e9b5a5f4427949f9a981cdf2186c88a (diff)
downloadgem5-c4b85d5f9854abeee6d1dbe15ae65a7a1aada6b2.tar.xz
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.sandberg@arm.com> Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> Reviewed-on: https://gem5-review.googlesource.com/3420 Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/arm/faults.hh3
-rw-r--r--src/arch/arm/insts/vfp.hh2
-rw-r--r--src/arch/arm/isa/insts/fp.isa8
-rw-r--r--src/arch/hsail/insts/decl.hh21
-rw-r--r--src/arch/mips/faults.hh24
-rw-r--r--src/arch/sparc/faults.hh64
6 files changed, 116 insertions, 6 deletions
diff --git a/src/arch/arm/faults.hh b/src/arch/arm/faults.hh
index ab4c67552..6e7c92cf6 100644
--- a/src/arch/arm/faults.hh
+++ b/src/arch/arm/faults.hh
@@ -567,7 +567,8 @@ class IllegalInstSetStateFault : public ArmFaultVals<IllegalInstSetStateFault>
};
/*
- * 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 de0c62161..caa22376e 100644
--- a/src/arch/arm/insts/vfp.hh
+++ b/src/arch/arm/insts/vfp.hh
@@ -201,7 +201,7 @@ bitsToFp(uint64_t bits, double junk)
}
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 0f10a05af..dc2f30701 100644
--- a/src/arch/arm/isa/insts/fp.isa
+++ b/src/arch/arm/isa/insts/fp.isa
@@ -65,7 +65,7 @@ class VfpMacroRegRegOp : public VfpMacroOp
};
template <class VfpOp>
-static StaticInstPtr
+StaticInstPtr
decodeVfpRegRegOp(ExtMachInst machInst,
IntRegIndex dest, IntRegIndex op1, bool wide)
{
@@ -101,7 +101,7 @@ class VfpMacroRegImmOp : public VfpMacroOp
};
template <class VfpOp>
-static StaticInstPtr
+StaticInstPtr
decodeVfpRegImmOp(ExtMachInst machInst,
IntRegIndex dest, uint64_t imm, bool wide)
{
@@ -137,7 +137,7 @@ class VfpMacroRegRegImmOp : public VfpMacroOp
};
template <class VfpOp>
-static StaticInstPtr
+StaticInstPtr
decodeVfpRegRegImmOp(ExtMachInst machInst, IntRegIndex dest,
IntRegIndex op1, uint64_t imm, bool wide)
{
@@ -173,7 +173,7 @@ class VfpMacroRegRegRegOp : public VfpMacroOp
};
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 f84cb61e9..3132a425a 100644
--- a/src/arch/hsail/insts/decl.hh
+++ b/src/arch/hsail/insts/decl.hh
@@ -1272,6 +1272,27 @@ namespace HsailISA
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 1ec726d17..dcce764ca 100644
--- a/src/arch/mips/faults.hh
+++ b/src/arch/mips/faults.hh
@@ -303,6 +303,30 @@ class TlbModifiedFault : public TlbFault<TlbModifiedFault>
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 9d5f7e01d..42c8b7149 100644
--- a/src/arch/sparc/faults.hh
+++ b/src/arch/sparc/faults.hh
@@ -276,6 +276,70 @@ class TrapInstruction : public EnumeratedFault<TrapInstruction>
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);