Reverted attempt to avoid warnings. Just suppressed them instead.

Revert "Attempting to work around a GCC warning."

This reverts commit 3fe92086f1bdde06eb3e9bd812fc19a279154458.
This commit is contained in:
Daviw Williams 2013-10-24 14:37:18 +02:00
parent 3fe92086f1
commit afddb59d69
2 changed files with 32 additions and 9 deletions

View File

@ -48,7 +48,12 @@ freely, subject to the following restrictions:
// Macros cannot contain #ifdefs, but some of our macros need to disable warnings and such warning supression is
// platform specific. But macros can contain other macros, so we create macros to control the warnings and use
// those instead. This set of warning supression macros can be extended to GCC/Clang when required.
// those instead.
//
// Note that we have seperate macros for POLYVOX_MSC_..., POLYVOX_GCC_..., etc. In princpiple we could have just one
// as compilers should ignore pragmas they don't recognise, but in practice at least MSVC complains about this as
// well. So in practice it's just eaier to have seperate macros. We could look into the compiler switch to not warn
// on unrecognised pragmas though.
#if defined(_MSC_VER)
#define POLYVOX_MSC_WARNING_PUSH __pragma(warning(push))
#define POLYVOX_DISABLE_MSC_WARNING(x) __pragma(warning(disable:x))
@ -59,6 +64,16 @@ freely, subject to the following restrictions:
#define POLYVOX_MSC_WARNING_POP
#endif
#if defined(__GNUC__)
#define POLYVOX_GCC_WARNING_PUSH #pragma GCC diagnostic push
#define POLYVOX_DISABLE_GCC_WARNING(x) #pragma GCC diagnostic ignored x
#define POLYVOX_GCC_WARNING_POP #pragma GCC diagnostic pop
#else
#define POLYVOX_GCC_WARNING_PUSH
#define POLYVOX_DISABLE_GCC_WARNING(x)
#define POLYVOX_GCC_WARNING_POP
#endif
#define POLYVOX_UNUSED(x) do { (void)sizeof(x); } while(0)
/*

View File

@ -77,19 +77,27 @@ namespace PolyVox
void setDensity(Type uDensity)
{
// Validate range of parameters. The casts are used to bypass a GCC warning 'comparison
// is always true due to limited range of data type' which is not helpful in this case.
POLYVOX_ASSERT(static_cast<int32_t>(uDensity) >= static_cast<int32_t>(getMinDensity()), "Density out of range");
POLYVOX_ASSERT(static_cast<int32_t>(uDensity) <= static_cast<int32_t>(getMaxDensity()), "Density out of range");
// Depending on our underlying type it may be impossible for the assert below to be triggered (i.e. if density is stored as
// Type, rather than just using a few bits of Type). GCC will warn about this but it's redundant so we diable the warning.
POLYVOX_GCC_WARNING_PUSH
POLYVOX_DISABLE_GCC_WARNING("-Wtype-limits")
POLYVOX_ASSERT(uDensity >= getMinDensity(), "Density out of range");
POLYVOX_ASSERT(uDensity <= getMaxDensity(), "Density out of range");
POLYVOX_GCC_WARNING_POP
m_uDensity = uDensity;
}
void setMaterial(Type uMaterial)
{
// Validate range of parameters. The casts are used to bypass a GCC warning 'comparison
// is always true due to limited range of data type' which is not helpful in this case.
POLYVOX_ASSERT(static_cast<int32_t>(uMaterial) >= static_cast<int32_t>(0), "Material out of range");
POLYVOX_ASSERT(static_cast<int32_t>(uMaterial) <= static_cast<int32_t>((0x01 << NoOfMaterialBits) - 1), "Material out of range");
// Depending on our underlying type it may be impossible for the assert below to be triggered (i.e. if material is stored as
// Type, rather than just using a few bits of Type). GCC will warn about this but it's redundant so we diable the warning.
POLYVOX_GCC_WARNING_PUSH
POLYVOX_DISABLE_GCC_WARNING("-Wtype-limits")
POLYVOX_ASSERT(uMaterial >= 0, "Material out of range");
POLYVOX_ASSERT(uMaterial <= (0x01 << NoOfMaterialBits) - 1, "Material out of range");
POLYVOX_GCC_WARNING_POP
m_uMaterial = uMaterial;
}