From 846da275166c876ac3384ae2267b564b9219b361 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Thu, 14 Dec 2017 19:59:10 +0000 Subject: [PATCH] Revert "Fix isPodLike for MSVC and use it in TypeHashing." This reverts commit ac5edc198eb612f82293850c3488042708b1c5fa. Apparently this doesn't cover all the bases, so some compilers and standard libraries still think this is not trivially copyable even though it is. Reverting this back to an MSVC-only check for now so that at least we have some coverage. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320739 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/DebugInfo/CodeView/TypeHashing.h | 7 ++++++- include/llvm/Support/type_traits.h | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/include/llvm/DebugInfo/CodeView/TypeHashing.h b/include/llvm/DebugInfo/CodeView/TypeHashing.h index 6b675e27036..74133753370 100644 --- a/include/llvm/DebugInfo/CodeView/TypeHashing.h +++ b/include/llvm/DebugInfo/CodeView/TypeHashing.h @@ -132,10 +132,15 @@ struct GloballyHashedType { return Hashes; } }; -static_assert(isPodLike::value, +#if defined(_MSC_VER) +// is_trivially_copyable is not available in older versions of libc++, but it is +// available in all supported versions of MSVC, so at least this gives us some +// coverage. +static_assert(std::is_trivially_copyable::value, "GloballyHashedType must be trivially copyable so that we can " "reinterpret_cast arrays of hash data to arrays of " "GloballyHashedType"); +#endif } // namespace codeview template <> struct DenseMapInfo { diff --git a/include/llvm/Support/type_traits.h b/include/llvm/Support/type_traits.h index 4f1295f1b48..cc087835880 100644 --- a/include/llvm/Support/type_traits.h +++ b/include/llvm/Support/type_traits.h @@ -30,9 +30,9 @@ namespace llvm { template struct isPodLike { // std::is_trivially_copyable is available in libc++ with clang, libstdc++ - // that comes with GCC 5, and MSVC. + // that comes with GCC 5. #if (__has_feature(is_trivially_copyable) && defined(_LIBCPP_VERSION)) || \ - (defined(__GNUC__) && __GNUC__ >= 5) || defined(_MSC_VER) + (defined(__GNUC__) && __GNUC__ >= 5) // If the compiler supports the is_trivially_copyable trait use it, as it // matches the definition of isPodLike closely. static const bool value = std::is_trivially_copyable::value;