Skip to content
Permalink
Browse files
Merge pull request #9778 from shuffle2/msvc-wa
msvc: remove workarounds for old compiler issues
  • Loading branch information
Tilka committed Jun 4, 2021
2 parents 4363f9d + 4ce22c0 commit bd7c5bd
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 39 deletions.
@@ -134,18 +134,13 @@ struct BitField
// so that we can use this within unions
constexpr BitField() = default;

// Visual Studio (as of VS2017) considers BitField to not be trivially
// copyable if we delete this copy assignment operator.
// https://developercommunity.visualstudio.com/content/problem/101208/c-compiler-is-overly-strict-regarding-whether-a-cl.html
#ifndef _MSC_VER
// We explicitly delete the copy assignment operator here, because the
// default copy assignment would copy the full storage value, rather than
// just the bits relevant to this particular bit field.
// Ideally, we would just implement the copy assignment to copy only the
// relevant bits, but we're prevented from doing that because the savestate
// code expects that this class is trivially copyable.
BitField& operator=(const BitField&) = delete;
#endif

DOLPHIN_FORCE_INLINE BitField& operator=(T val)
{
@@ -241,18 +236,13 @@ struct BitFieldArray
// so that we can use this within unions
constexpr BitFieldArray() = default;

// Visual Studio (as of VS2017) considers BitField to not be trivially
// copyable if we delete this copy assignment operator.
// https://developercommunity.visualstudio.com/content/problem/101208/c-compiler-is-overly-strict-regarding-whether-a-cl.html
#ifndef _MSC_VER
// We explicitly delete the copy assignment operator here, because the
// default copy assignment would copy the full storage value, rather than
// just the bits relevant to this particular bit field.
// Ideally, we would just implement the copy assignment to copy only the
// relevant bits, but we're prevented from doing that because the savestate
// code expects that this class is trivially copyable.
BitFieldArray& operator=(const BitFieldArray&) = delete;
#endif

public:
constexpr std::size_t StartBit() const { return position; }
@@ -10,18 +10,6 @@
#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>
@@ -30,23 +18,6 @@ constexpr T SNANConstant()
return std::numeric_limits<T>::signaling_NaN();
}

#ifdef _MSC_VER

// See workaround note above.

template <>
constexpr double SNANConstant()
{
return (_CSTD _Snan._Double);
}
template <>
constexpr float SNANConstant()
{
return (_CSTD _Snan._Float);
}

#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 bd7c5bd

Please sign in to comment.