[libcxx-commits] [libcxx] 634a0ac - Cleanup some test issues:

Casey Carter via libcxx-commits libcxx-commits at lists.llvm.org
Fri May 15 15:16:00 PDT 2020


Author: Casey Carter
Date: 2020-05-15T15:15:47-07:00
New Revision: 634a0acb307ddad21c5542dc313e02b4df9b216e

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

LOG: Cleanup some test issues:

* improve coverage in `span`'s "conversion from `std::array`" test, while eliminating MSVC diagnostics about `testConstructorArray<T>() && testConstructorArray<const T, T>()` being redundant when `T` is already `const`.

* Remove use of `is_assignable` that triggers UB due to an insufficiently-complete type argument in `std::function`'s assignment operator test.

* Don't test that `shared_ptr` initialization from an rvalue triggers the lvalue aliasing constructor on non-libc++; this is not the case for Standard Libraries that implement LWG-2996. (Ditto, I'd simply remove this but it's your library ;).)

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

Added: 
    

Modified: 
    libcxx/test/std/containers/views/span.cons/stdarray.pass.cpp
    libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp
    libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/test/std/containers/views/span.cons/stdarray.pass.cpp b/libcxx/test/std/containers/views/span.cons/stdarray.pass.cpp
index a59825310b66..e6d9a9f4f245 100644
--- a/libcxx/test/std/containers/views/span.cons/stdarray.pass.cpp
+++ b/libcxx/test/std/containers/views/span.cons/stdarray.pass.cpp
@@ -68,41 +68,43 @@ void checkCV()
     }
 }
 
-template <typename T, typename U = T>
-constexpr bool testConstructorArray()
-{
-    std::array<U,2> val = { U(), U() };
-    ASSERT_NOEXCEPT(std::span<T>   {val});
-    ASSERT_NOEXCEPT(std::span<T, 2>{val});
-    std::span<T>    s1{val};
-    std::span<T, 2> s2{val};
-    return s1.data() == &val[0] && s1.size() == 2
-        && s2.data() == &val[0] && s2.size() == 2;
+template <typename T, typename U>
+constexpr bool testConstructorArray() {
+  std::array<U, 2> val = {U(), U()};
+  ASSERT_NOEXCEPT(std::span<T>{val});
+  ASSERT_NOEXCEPT(std::span<T, 2>{val});
+  std::span<T> s1{val};
+  std::span<T, 2> s2{val};
+  return s1.data() == &val[0] && s1.size() == 2 && s2.data() == &val[0] &&
+         s2.size() == 2;
 }
 
-template <typename T, typename U = T>
-constexpr bool testConstructorConstArray()
-{
-    const std::array<U,2> val = { U(), U() };
-    ASSERT_NOEXCEPT(std::span<const T>   {val});
-    ASSERT_NOEXCEPT(std::span<const T, 2>{val});
-    std::span<const T>    s1{val};
-    std::span<const T, 2> s2{val};
-    return s1.data() == &val[0] && s1.size() == 2
-        && s2.data() == &val[0] && s2.size() == 2;
+template <typename T, typename U>
+constexpr bool testConstructorConstArray() {
+  const std::array<U, 2> val = {U(), U()};
+  ASSERT_NOEXCEPT(std::span<const T>{val});
+  ASSERT_NOEXCEPT(std::span<const T, 2>{val});
+  std::span<const T> s1{val};
+  std::span<const T, 2> s2{val};
+  return s1.data() == &val[0] && s1.size() == 2 && s2.data() == &val[0] &&
+         s2.size() == 2;
 }
 
 template <typename T>
 constexpr bool testConstructors() {
-    static_assert(testConstructorArray<T>(), "");
-    static_assert(testConstructorArray<const T, T>(), "");
-    static_assert(testConstructorConstArray<T>(), "");
-    static_assert(testConstructorConstArray<const T, T>(), "");
-
-    return testConstructorArray<T>()
-        && testConstructorArray<const T, T>()
-        && testConstructorConstArray<T>()
-        && testConstructorConstArray<const T, T>();
+  static_assert(testConstructorArray<T, T>(), "");
+  static_assert(testConstructorArray<const T, const T>(), "");
+  static_assert(testConstructorArray<const T, T>(), "");
+  static_assert(testConstructorConstArray<T, T>(), "");
+  static_assert(testConstructorConstArray<const T, const T>(), "");
+  static_assert(testConstructorConstArray<const T, T>(), "");
+
+  return testConstructorArray<T, T>() &&
+         testConstructorArray<const T, const T>() &&
+         testConstructorArray<const T, T>() &&
+         testConstructorConstArray<T, T>() &&
+         testConstructorConstArray<const T, const T>() &&
+         testConstructorConstArray<const T, T>();
 }
 
 struct A{};
@@ -115,9 +117,7 @@ int main(int, char**)
     assert(testConstructors<A>());
 
     assert(testConstructors<int*>());
-    assert(testConstructors<int* const>());
     assert(testConstructors<const int*>());
-    assert(testConstructors<const int* const>());
 
     checkCV();
 

diff  --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp
index 4fc7bcfc4871..b3a374e21a2f 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp
@@ -133,11 +133,6 @@ int main(int, char**)
         static_assert(!std::is_assignable<F1&, F2&&>::value, "");
         static_assert(!std::is_assignable<F2&, F1&&>::value, "");
     }
-    {
-        using F1 = std::function<void(int, int)>;
-        using F2 = std::function<void(int, int)&&>;
-        static_assert(!std::is_assignable<F1&, F2&&>::value, "");
-    }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp
index f32503fc05fe..580ab3d35f1b 100644
--- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp
+++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp
@@ -74,7 +74,8 @@ int main(int, char**)
       assert(p2.get() == nullptr);
     }
 
-#if TEST_STD_VER > 17
+#if TEST_STD_VER > 17 && defined(_LIBCPP_VERSION)
+    // This won't pass when LWG-2996 is implemented.
     {
       std::shared_ptr<A> pA(new A);
       assert(pA.use_count() == 1);


        


More information about the libcxx-commits mailing list