[llvm-branch-commits] [llvm] c8d406c - Switch to std::is_trivially_move_constructible and std::is_trivially_copy_constructible

Fangrui Song via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Dec 3 09:20:26 PST 2020


Author: Fangrui Song
Date: 2020-12-03T09:15:40-08:00
New Revision: c8d406c93c5bb01599990201f78d8428dd29d289

URL: https://github.com/llvm/llvm-project/commit/c8d406c93c5bb01599990201f78d8428dd29d289
DIFF: https://github.com/llvm/llvm-project/commit/c8d406c93c5bb01599990201f78d8428dd29d289.diff

LOG: Switch to std::is_trivially_move_constructible and std::is_trivially_copy_constructible

Differential Revision: https://reviews.llvm.org/D92543

Added: 
    

Modified: 
    llvm/include/llvm/ADT/FunctionExtras.h
    llvm/include/llvm/ADT/SmallVector.h
    llvm/include/llvm/Support/type_traits.h
    llvm/unittests/Support/CMakeLists.txt
    llvm/utils/gn/secondary/llvm/unittests/Support/BUILD.gn

Removed: 
    llvm/unittests/Support/TypeTraitsTest.cpp


################################################################################
diff  --git a/llvm/include/llvm/ADT/FunctionExtras.h b/llvm/include/llvm/ADT/FunctionExtras.h
index 7f8fb103f148..c6ce4eb5c3be 100644
--- a/llvm/include/llvm/ADT/FunctionExtras.h
+++ b/llvm/include/llvm/ADT/FunctionExtras.h
@@ -57,7 +57,7 @@ namespace detail {
 
 template <typename T>
 using EnableIfTrivial =
-    std::enable_if_t<llvm::is_trivially_move_constructible<T>::value &&
+    std::enable_if_t<std::is_trivially_move_constructible<T>::value &&
                      std::is_trivially_destructible<T>::value>;
 
 template <typename ReturnT, typename... ParamTs> class UniqueFunctionBase {
@@ -83,8 +83,8 @@ template <typename ReturnT, typename... ParamTs> class UniqueFunctionBase {
   template <typename T>
   using AdjustedParamT = typename std::conditional<
       !std::is_reference<T>::value &&
-          llvm::is_trivially_copy_constructible<T>::value &&
-          llvm::is_trivially_move_constructible<T>::value &&
+          std::is_trivially_copy_constructible<T>::value &&
+          std::is_trivially_move_constructible<T>::value &&
           IsSizeLessThanThresholdT<T>::value,
       T, T &>::type;
 

diff  --git a/llvm/include/llvm/ADT/SmallVector.h b/llvm/include/llvm/ADT/SmallVector.h
index c5bb1ece0667..f288f4bd106e 100644
--- a/llvm/include/llvm/ADT/SmallVector.h
+++ b/llvm/include/llvm/ADT/SmallVector.h
@@ -278,8 +278,8 @@ class SmallVectorTemplateCommon
 /// copy these types with memcpy, there is no way for the type to observe this.
 /// This catches the important case of std::pair<POD, POD>, which is not
 /// trivially assignable.
-template <typename T, bool = (is_trivially_copy_constructible<T>::value) &&
-                             (is_trivially_move_constructible<T>::value) &&
+template <typename T, bool = (std::is_trivially_copy_constructible<T>::value) &&
+                             (std::is_trivially_move_constructible<T>::value) &&
                              std::is_trivially_destructible<T>::value>
 class SmallVectorTemplateBase : public SmallVectorTemplateCommon<T> {
 protected:

diff  --git a/llvm/include/llvm/Support/type_traits.h b/llvm/include/llvm/Support/type_traits.h
index 7b7d5d991f3f..14d9d06c50ad 100644
--- a/llvm/include/llvm/Support/type_traits.h
+++ b/llvm/include/llvm/Support/type_traits.h
@@ -70,20 +70,6 @@ struct const_pointer_or_const_ref<T,
 };
 
 namespace detail {
-/// Internal utility to detect trivial copy construction.
-template<typename T> union copy_construction_triviality_helper {
-    T t;
-    copy_construction_triviality_helper() = default;
-    copy_construction_triviality_helper(const copy_construction_triviality_helper&) = default;
-    ~copy_construction_triviality_helper() = default;
-};
-/// Internal utility to detect trivial move construction.
-template<typename T> union move_construction_triviality_helper {
-    T t;
-    move_construction_triviality_helper() = default;
-    move_construction_triviality_helper(move_construction_triviality_helper&&) = default;
-    ~move_construction_triviality_helper() = default;
-};
 
 template<class T>
 union trivial_helper {
@@ -92,29 +78,6 @@ union trivial_helper {
 
 } // end namespace detail
 
-/// An implementation of `std::is_trivially_copy_constructible` since we have
-/// users with STLs that don't yet include it.
-template <typename T>
-struct is_trivially_copy_constructible
-    : std::is_copy_constructible<
-          ::llvm::detail::copy_construction_triviality_helper<T>> {};
-template <typename T>
-struct is_trivially_copy_constructible<T &> : std::true_type {};
-template <typename T>
-struct is_trivially_copy_constructible<T &&> : std::false_type {};
-
-/// An implementation of `std::is_trivially_move_constructible` since we have
-/// users with STLs that don't yet include it.
-template <typename T>
-struct is_trivially_move_constructible
-    : std::is_move_constructible<
-          ::llvm::detail::move_construction_triviality_helper<T>> {};
-template <typename T>
-struct is_trivially_move_constructible<T &> : std::true_type {};
-template <typename T>
-struct is_trivially_move_constructible<T &&> : std::true_type {};
-
-
 template <typename T>
 struct is_copy_assignable {
   template<class F>

diff  --git a/llvm/unittests/Support/CMakeLists.txt b/llvm/unittests/Support/CMakeLists.txt
index 86a25faa7d78..48941b6d4d50 100644
--- a/llvm/unittests/Support/CMakeLists.txt
+++ b/llvm/unittests/Support/CMakeLists.txt
@@ -80,7 +80,6 @@ add_llvm_unittest(SupportTests
   TimerTest.cpp
   ToolOutputFileTest.cpp
   TypeNameTest.cpp
-  TypeTraitsTest.cpp
   TrailingObjectsTest.cpp
   TrigramIndexTest.cpp
   UnicodeTest.cpp

diff  --git a/llvm/unittests/Support/TypeTraitsTest.cpp b/llvm/unittests/Support/TypeTraitsTest.cpp
deleted file mode 100644
index e7a102543e66..000000000000
--- a/llvm/unittests/Support/TypeTraitsTest.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-//===- TypeTraitsTest.cpp -------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Support/type_traits.h"
-#include "gtest/gtest.h"
-
-namespace {
-
-// Compile-time tests using static assert.
-namespace triviality {
-
-// Helper for compile time checking trivially copy constructible and trivially
-// move constructible type traits.
-template <typename T, bool IsTriviallyCopyConstructible,
-          bool IsTriviallyMoveConstructible>
-void TrivialityTester() {
-  static_assert(llvm::is_trivially_copy_constructible<T>::value ==
-                    IsTriviallyCopyConstructible,
-                "Mismatch in expected trivial copy construction!");
-  static_assert(llvm::is_trivially_move_constructible<T>::value ==
-                    IsTriviallyMoveConstructible,
-                "Mismatch in expected trivial move construction!");
-
-#if defined(_LIBCPP_VERSION) || defined(_MSC_VER)
-  // On compilers with support for the standard traits, make sure they agree.
-  static_assert(std::is_trivially_copy_constructible<T>::value ==
-                    IsTriviallyCopyConstructible,
-                "Mismatch in expected trivial copy construction!");
-  static_assert(std::is_trivially_move_constructible<T>::value ==
-                    IsTriviallyMoveConstructible,
-                "Mismatch in expected trivial move construction!");
-#endif
-}
-
-template void TrivialityTester<int, true, true>();
-template void TrivialityTester<void *, true, true>();
-template void TrivialityTester<int &, true, true>();
-template void TrivialityTester<int &&, false, true>();
-
-struct X {};
-struct Y {
-  Y(const Y &);
-};
-struct Z {
-  Z(const Z &);
-  Z(Z &&);
-};
-struct A {
-  A(const A &) = default;
-  A(A &&);
-};
-struct B {
-  B(const B &);
-  B(B &&) = default;
-};
-
-template void TrivialityTester<X, true, true>();
-template void TrivialityTester<Y, false, false>();
-template void TrivialityTester<Z, false, false>();
-template void TrivialityTester<A, true, false>();
-template void TrivialityTester<B, false, true>();
-
-template void TrivialityTester<Z &, true, true>();
-template void TrivialityTester<A &, true, true>();
-template void TrivialityTester<B &, true, true>();
-template void TrivialityTester<Z &&, false, true>();
-template void TrivialityTester<A &&, false, true>();
-template void TrivialityTester<B &&, false, true>();
-
-TEST(Triviality, Tester) {
-  TrivialityTester<int, true, true>();
-  TrivialityTester<void *, true, true>();
-  TrivialityTester<int &, true, true>();
-  TrivialityTester<int &&, false, true>();
-
-  TrivialityTester<X, true, true>();
-  TrivialityTester<Y, false, false>();
-  TrivialityTester<Z, false, false>();
-  TrivialityTester<A, true, false>();
-  TrivialityTester<B, false, true>();
-
-  TrivialityTester<Z &, true, true>();
-  TrivialityTester<A &, true, true>();
-  TrivialityTester<B &, true, true>();
-  TrivialityTester<Z &&, false, true>();
-  TrivialityTester<A &&, false, true>();
-  TrivialityTester<B &&, false, true>();
-}
-
-} // namespace triviality
-
-} // end anonymous namespace

diff  --git a/llvm/utils/gn/secondary/llvm/unittests/Support/BUILD.gn b/llvm/utils/gn/secondary/llvm/unittests/Support/BUILD.gn
index cd9af3bc20b2..48ddeb7ed0ec 100644
--- a/llvm/utils/gn/secondary/llvm/unittests/Support/BUILD.gn
+++ b/llvm/utils/gn/secondary/llvm/unittests/Support/BUILD.gn
@@ -85,7 +85,6 @@ unittest("SupportTests") {
     "TrailingObjectsTest.cpp",
     "TrigramIndexTest.cpp",
     "TypeNameTest.cpp",
-    "TypeTraitsTest.cpp",
     "UnicodeTest.cpp",
     "VersionTupleTest.cpp",
     "VirtualFileSystemTest.cpp",


        


More information about the llvm-branch-commits mailing list