]> granicus.if.org Git - llvm/commitdiff
Revert "Fix isPodLike for MSVC and use it in TypeHashing."
authorZachary Turner <zturner@google.com>
Thu, 14 Dec 2017 19:59:10 +0000 (19:59 +0000)
committerZachary Turner <zturner@google.com>
Thu, 14 Dec 2017 19:59:10 +0000 (19:59 +0000)
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
include/llvm/Support/type_traits.h

index 6b675e27036ce01287ce8b201b913074b65475e7..741337533701ce415a0e310ce17e1dd2b9c11e12 100644 (file)
@@ -132,10 +132,15 @@ struct GloballyHashedType {
     return Hashes;
   }
 };
-static_assert(isPodLike<GloballyHashedType>::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<GloballyHashedType>::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<codeview::LocallyHashedType> {
index 4f1295f1b482ab882f24d134c30bbcc64859098b..cc08783588009698eff5f8acabc3d5c96301abd6 100644 (file)
@@ -30,9 +30,9 @@ namespace llvm {
 template <typename T>
 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<T>::value;