Permalink
Browse files

Merge pull request #7327 from BillyONeal/master

Workaround use of private constant _Snan no longer being present in <limits>
  • Loading branch information...
delroth committed Aug 13, 2018
2 parents 3f96f96 + 6640d1e commit 60f12e1d4c868a13723cb6568b04374ebc73b5f7
Showing with 14 additions and 5 deletions.
  1. +14 −5 Source/Core/Common/FloatUtils.h
@@ -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>
@@ -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()
@@ -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

0 comments on commit 60f12e1

Please sign in to comment.