diff --git a/llvm/include/llvm/ADT/APInt.h b/llvm/include/llvm/ADT/APInt.h --- a/llvm/include/llvm/ADT/APInt.h +++ b/llvm/include/llvm/ADT/APInt.h @@ -765,8 +765,8 @@ /// Move assignment operator. APInt &operator=(APInt &&that) { -#ifdef _MSC_VER - // The MSVC std::shuffle implementation still does self-assignment. +#ifdef EXPENSIVE_CHECKS + // Some std::shuffle implementations still do self-assignment. if (this == &that) return *this; #endif diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp --- a/llvm/unittests/ADT/APIntTest.cpp +++ b/llvm/unittests/ADT/APIntTest.cpp @@ -1783,8 +1783,9 @@ } } -// Test that self-move works, but only when we're using MSVC. -#if defined(_MSC_VER) +// Test that self-move works with EXPENSIVE_CHECKS. It calls std::shuffle which +// does self-move on some platforms. +#ifdef EXPENSIVE_CHECKS #if defined(__clang__) // Disable the pragma warning from versions of Clang without -Wself-move #pragma clang diagnostic push @@ -1813,7 +1814,7 @@ #pragma clang diagnostic pop #pragma clang diagnostic pop #endif -#endif // _MSC_VER +#endif // EXPENSIVE_CHECKS TEST(APIntTest, byteSwap) { EXPECT_EQ(0x00000000, APInt(16, 0x0000).byteSwap());