diff --git a/llvm/cmake/config-ix.cmake b/llvm/cmake/config-ix.cmake --- a/llvm/cmake/config-ix.cmake +++ b/llvm/cmake/config-ix.cmake @@ -398,15 +398,6 @@ check_symbol_exists(proc_pid_rusage "libproc.h" HAVE_PROC_PID_RUSAGE) -# Whether we can use std::is_trivially_copyable to verify llvm::is_trivially_copyable. -CHECK_CXX_SOURCE_COMPILES(" -#include -struct T { int val; }; -static_assert(std::is_trivially_copyable::value, \"ok\"); -int main() { return 0;} -" HAVE_STD_IS_TRIVIALLY_COPYABLE) - - # Define LLVM_HAS_ATOMICS if gcc or MSVC atomic builtins are supported. include(CheckAtomic) diff --git a/llvm/include/llvm/ADT/PointerIntPair.h b/llvm/include/llvm/ADT/PointerIntPair.h --- a/llvm/include/llvm/ADT/PointerIntPair.h +++ b/llvm/include/llvm/ADT/PointerIntPair.h @@ -128,19 +128,6 @@ } }; -// Specialize is_trivially_copyable to avoid limitation of llvm::is_trivially_copyable -// when compiled with gcc 4.9. -template -struct is_trivially_copyable> : std::true_type { -#ifdef HAVE_STD_IS_TRIVIALLY_COPYABLE - static_assert(std::is_trivially_copyable>::value, - "inconsistent behavior between llvm:: and std:: implementation of is_trivially_copyable"); -#endif -}; - - template struct PointerIntPairInfo { static_assert(PtrTraits::NumLowBitsAvailable < diff --git a/llvm/include/llvm/Config/config.h.cmake b/llvm/include/llvm/Config/config.h.cmake --- a/llvm/include/llvm/Config/config.h.cmake +++ b/llvm/include/llvm/Config/config.h.cmake @@ -320,9 +320,6 @@ /* Define to the vendor of this package. */ #cmakedefine PACKAGE_VENDOR "${PACKAGE_VENDOR}" -/* Define if std::is_trivially_copyable is supported */ -#cmakedefine HAVE_STD_IS_TRIVIALLY_COPYABLE ${HAVE_STD_IS_TRIVIALLY_COPYABLE} - /* Define to a function implementing stricmp */ #cmakedefine stricmp ${stricmp} diff --git a/llvm/include/llvm/Support/type_traits.h b/llvm/include/llvm/Support/type_traits.h --- a/llvm/include/llvm/Support/type_traits.h +++ b/llvm/include/llvm/Support/type_traits.h @@ -93,61 +93,6 @@ static constexpr bool value = decltype(get((T*)nullptr))::value; }; - -// An implementation of `std::is_trivially_copyable` since STL version -// is not equally supported by all compilers, especially GCC 4.9. -// Uniform implementation of this trait is important for ABI compatibility -// as it has an impact on SmallVector's ABI (among others). -template -class is_trivially_copyable { - - // copy constructors - static constexpr bool has_trivial_copy_constructor = - std::is_copy_constructible>::value; - static constexpr bool has_deleted_copy_constructor = - !std::is_copy_constructible::value; - - // move constructors - static constexpr bool has_trivial_move_constructor = - std::is_move_constructible>::value; - static constexpr bool has_deleted_move_constructor = - !std::is_move_constructible::value; - - // copy assign - static constexpr bool has_trivial_copy_assign = - is_copy_assignable>::value; - static constexpr bool has_deleted_copy_assign = - !is_copy_assignable::value; - - // move assign - static constexpr bool has_trivial_move_assign = - is_move_assignable>::value; - static constexpr bool has_deleted_move_assign = - !is_move_assignable::value; - - // destructor - static constexpr bool has_trivial_destructor = - std::is_destructible>::value; - - public: - - static constexpr bool value = - has_trivial_destructor && - (has_deleted_move_assign || has_trivial_move_assign) && - (has_deleted_move_constructor || has_trivial_move_constructor) && - (has_deleted_copy_assign || has_trivial_copy_assign) && - (has_deleted_copy_constructor || has_trivial_copy_constructor); - -#ifdef HAVE_STD_IS_TRIVIALLY_COPYABLE - static_assert(value == std::is_trivially_copyable::value, - "inconsistent behavior between llvm:: and std:: implementation of is_trivially_copyable"); -#endif -}; -template -class is_trivially_copyable : public std::true_type { -}; - - } // end namespace llvm #endif // LLVM_SUPPORT_TYPE_TRAITS_H diff --git a/llvm/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn b/llvm/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn --- a/llvm/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn @@ -95,7 +95,6 @@ "HAVE_LIBPSAPI=", "HAVE_MALLCTL=", "HAVE_SIGNAL_H=1", - "HAVE_STD_IS_TRIVIALLY_COPYABLE=1", "HAVE_STRERROR=1", "HAVE_SYS_STAT_H=1", "HAVE_SYS_TYPES_H=1", diff --git a/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h b/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h --- a/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h +++ b/utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h @@ -333,9 +333,6 @@ /* Define to the vendor of this package. */ /* #undef PACKAGE_VENDOR */ -/* Define if std::is_trivially_copyable is supported */ -#define HAVE_STD_IS_TRIVIALLY_COPYABLE 1 - /* Define to a function implementing stricmp */ /* stricmp defined conditionally below. */ diff --git a/utils/bazel/llvm_configs/config.h.cmake b/utils/bazel/llvm_configs/config.h.cmake --- a/utils/bazel/llvm_configs/config.h.cmake +++ b/utils/bazel/llvm_configs/config.h.cmake @@ -320,9 +320,6 @@ /* Define to the vendor of this package. */ #cmakedefine PACKAGE_VENDOR "${PACKAGE_VENDOR}" -/* Define if std::is_trivially_copyable is supported */ -#cmakedefine HAVE_STD_IS_TRIVIALLY_COPYABLE ${HAVE_STD_IS_TRIVIALLY_COPYABLE} - /* Define to a function implementing stricmp */ #cmakedefine stricmp ${stricmp}