[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