Skip to content

Commit

Permalink
Workaround use of private constant _Snan no longer being present in <…
Browse files Browse the repository at this point in the history
…limits>.
  • Loading branch information
BillyONeal committed Aug 13, 2018
1 parent 3f96f96 commit a0af0bf
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions Source/Core/Common/FloatUtils.h
Expand Up @@ -10,6 +10,18 @@
#include "Common/BitUtils.h"
#include "Common/CommonTypes.h"

#ifdef _MSC_VER

// MSVC needs a workaround, because its std::numeric_limits<double>::signaling_NaN()
// will use __builtin_nans, which is improperly handled by the compiler and generates
// a bad constant. Here we go back to the version MSVC used before the builtin.
// TODO: Remove this and use numeric_limits directly whenever this bug is fixed.
// See Visual Studio bug # 128935 "std::numeric_limits<float>::signaling_NaN() is broken"

#include <ymath.h>

#endif // _MSC_VER

namespace Common
{
template <typename T>
Expand All @@ -20,10 +32,7 @@ constexpr T SNANConstant()

#ifdef _MSC_VER

// MSVC needs a workaround, because its std::numeric_limits<double>::signaling_NaN()
// will use __builtin_nans, which is improperly handled by the compiler and generates
// a bad constant. Here we go back to the version MSVC used before the builtin.
// TODO: Remove this and use numeric_limits directly whenever this bug is fixed.
// See workaround note above.

template <>
constexpr double SNANConstant()
Expand All @@ -36,7 +45,7 @@ constexpr float SNANConstant()
return (_CSTD _Snan._Float);
}

#endif
#endif // _MSC_VER

// The most significant bit of the fraction is an is-quiet bit on all architectures we care about.
enum : u64
Expand Down

0 comments on commit a0af0bf

Please sign in to comment.