aboutsummaryrefslogtreecommitdiff
path: root/test/libcxx/utilities
diff options
context:
space:
mode:
Diffstat (limited to 'test/libcxx/utilities')
-rw-r--r--test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp46
-rw-r--r--test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_new_abi.pass.cpp38
-rw-r--r--test/libcxx/utilities/variant/variant.variant/variant.assign/copy.pass.cpp31
-rw-r--r--test/libcxx/utilities/variant/variant.variant/variant.assign/move.pass.cpp28
-rw-r--r--test/libcxx/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp36
-rw-r--r--test/libcxx/utilities/variant/variant.variant/variant.ctor/move.pass.cpp24
6 files changed, 144 insertions, 59 deletions
diff --git a/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp b/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp
new file mode 100644
index 000000000000..6d49cea8ba1f
--- /dev/null
+++ b/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp
@@ -0,0 +1,46 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <memory>
+
+// pointer_safety get_pointer_safety();
+
+#include <memory>
+#include <cassert>
+
+#include "test_macros.h"
+
+// libc++ doesn't offer std::pointer_safety in C++03 under the new ABI
+#if TEST_STD_VER < 11 && defined(_LIBCPP_ABI_POINTER_SAFETY_ENUM_TYPE)
+#define TEST_IS_UNSUPPORTED
+#endif
+
+#ifndef TEST_IS_UNSUPPORTED
+void test_pr26961() {
+ std::pointer_safety d;
+ d = std::get_pointer_safety();
+ assert(d == std::get_pointer_safety());
+}
+#endif
+
+int main()
+{
+#ifndef TEST_IS_UNSUPPORTED
+ {
+ // Test that std::pointer_safety is still offered in C++03 under the old ABI.
+ std::pointer_safety r = std::get_pointer_safety();
+ assert(r == std::pointer_safety::relaxed ||
+ r == std::pointer_safety::preferred ||
+ r == std::pointer_safety::strict);
+ }
+ {
+ test_pr26961();
+ }
+#endif
+}
diff --git a/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_new_abi.pass.cpp b/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_new_abi.pass.cpp
new file mode 100644
index 000000000000..752edb6dadd9
--- /dev/null
+++ b/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_new_abi.pass.cpp
@@ -0,0 +1,38 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <memory>
+
+// pointer_safety get_pointer_safety();
+
+// The pointer_safety interface is no longer provided in C++03 in the new ABI.
+// XFAIL: c++98, c++03
+
+// MODULES_DEFINES: _LIBCPP_ABI_POINTER_SAFETY_ENUM_TYPE
+#define _LIBCPP_ABI_POINTER_SAFETY_ENUM_TYPE
+#include <memory>
+#include <cassert>
+
+int main()
+{
+ {
+ static_assert(std::is_enum<std::pointer_safety>::value, "");
+ static_assert(!std::is_convertible<std::pointer_safety, int>::value, "");
+ static_assert(std::is_same<
+ std::underlying_type<std::pointer_safety>::type,
+ unsigned char
+ >::value, "");
+ }
+ {
+ std::pointer_safety r = std::get_pointer_safety();
+ assert(r == std::pointer_safety::relaxed ||
+ r == std::pointer_safety::preferred ||
+ r == std::pointer_safety::strict);
+ }
+}
diff --git a/test/libcxx/utilities/variant/variant.variant/variant.assign/copy.pass.cpp b/test/libcxx/utilities/variant/variant.variant/variant.assign/copy.pass.cpp
index a94aa2f78299..cb17dfeb071a 100644
--- a/test/libcxx/utilities/variant/variant.variant/variant.assign/copy.pass.cpp
+++ b/test/libcxx/utilities/variant/variant.variant/variant.assign/copy.pass.cpp
@@ -10,8 +10,9 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
-// Clang 3.8 doesn't generate constexpr special members correctly.
-// XFAIL: clang-3.8, apple-clang-7, apple-clang-8
+// The following compilers don't generate constexpr special members correctly.
+// XFAIL: clang-3.5, clang-3.6, clang-3.7, clang-3.8
+// XFAIL: apple-clang-6, apple-clang-7, apple-clang-8
// <variant>
@@ -63,7 +64,7 @@ struct TCopyAssignNTMoveAssign {
int value;
};
-static_assert(std::is_trivially_copy_assignable_v<TCopyAssignNTMoveAssign>);
+static_assert(std::is_trivially_copy_assignable_v<TCopyAssignNTMoveAssign>, "");
void test_copy_assignment_sfinae() {
{
@@ -99,8 +100,8 @@ void test_copy_assignment_same_index() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 0);
- static_assert(result.value == 42);
+ static_assert(result.index == 0, "");
+ static_assert(result.value == 42, "");
}
{
struct {
@@ -113,8 +114,8 @@ void test_copy_assignment_same_index() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value == 42l);
+ static_assert(result.index == 1, "");
+ static_assert(result.value == 42l, "");
}
{
struct {
@@ -127,8 +128,8 @@ void test_copy_assignment_same_index() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value == 42);
+ static_assert(result.index == 1, "");
+ static_assert(result.value == 42, "");
}
{
struct {
@@ -141,8 +142,8 @@ void test_copy_assignment_same_index() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value == 42);
+ static_assert(result.index == 1, "");
+ static_assert(result.value == 42, "");
}
}
@@ -158,8 +159,8 @@ void test_copy_assignment_different_index() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value == 42l);
+ static_assert(result.index == 1, "");
+ static_assert(result.value == 42l, "");
}
{
struct {
@@ -172,8 +173,8 @@ void test_copy_assignment_different_index() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value == 42);
+ static_assert(result.index == 1, "");
+ static_assert(result.value == 42, "");
}
}
diff --git a/test/libcxx/utilities/variant/variant.variant/variant.assign/move.pass.cpp b/test/libcxx/utilities/variant/variant.variant/variant.assign/move.pass.cpp
index a3d92472dd5e..286a623882fe 100644
--- a/test/libcxx/utilities/variant/variant.variant/variant.assign/move.pass.cpp
+++ b/test/libcxx/utilities/variant/variant.variant/variant.assign/move.pass.cpp
@@ -10,9 +10,9 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
-// Clang 3.8 doesn't generate constexpr special members correctly.
-// XFAIL: clang-3.8, apple-clang-7, apple-clang-8
-
+// The following compilers don't generate constexpr special members correctly.
+// XFAIL: clang-3.5, clang-3.6, clang-3.7, clang-3.8
+// XFAIL: apple-clang-6, apple-clang-7, apple-clang-8
// <variant>
@@ -64,7 +64,7 @@ struct TMoveAssignNTCopyAssign {
int value;
};
-static_assert(std::is_trivially_move_assignable_v<TMoveAssignNTCopyAssign>);
+static_assert(std::is_trivially_move_assignable_v<TMoveAssignNTCopyAssign>, "");
void test_move_assignment_sfinae() {
{
@@ -100,8 +100,8 @@ void test_move_assignment_same_index() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 0);
- static_assert(result.value == 42);
+ static_assert(result.index == 0, "");
+ static_assert(result.value == 42, "");
}
{
struct {
@@ -114,8 +114,8 @@ void test_move_assignment_same_index() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value == 42l);
+ static_assert(result.index == 1, "");
+ static_assert(result.value == 42l, "");
}
{
struct {
@@ -128,8 +128,8 @@ void test_move_assignment_same_index() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value == 42);
+ static_assert(result.index == 1, "");
+ static_assert(result.value == 42, "");
}
}
@@ -145,8 +145,8 @@ void test_move_assignment_different_index() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value == 42l);
+ static_assert(result.index == 1, "");
+ static_assert(result.value == 42l, "");
}
{
struct {
@@ -159,8 +159,8 @@ void test_move_assignment_different_index() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value == 42);
+ static_assert(result.index == 1, "");
+ static_assert(result.value == 42, "");
}
}
diff --git a/test/libcxx/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp b/test/libcxx/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp
index 59c433050590..0d30a78a48ac 100644
--- a/test/libcxx/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp
+++ b/test/libcxx/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp
@@ -72,45 +72,45 @@ void test_copy_ctor_sfinae() {
void test_copy_ctor_basic() {
{
constexpr std::variant<int> v(std::in_place_index<0>, 42);
- static_assert(v.index() == 0);
+ static_assert(v.index() == 0, "");
constexpr std::variant<int> v2 = v;
- static_assert(v2.index() == 0);
- static_assert(std::get<0>(v2) == 42);
+ static_assert(v2.index() == 0, "");
+ static_assert(std::get<0>(v2) == 42, "");
}
{
constexpr std::variant<int, long> v(std::in_place_index<1>, 42);
- static_assert(v.index() == 1);
+ static_assert(v.index() == 1, "");
constexpr std::variant<int, long> v2 = v;
- static_assert(v2.index() == 1);
- static_assert(std::get<1>(v2) == 42);
+ static_assert(v2.index() == 1, "");
+ static_assert(std::get<1>(v2) == 42, "");
}
{
constexpr std::variant<TCopy> v(std::in_place_index<0>, 42);
- static_assert(v.index() == 0);
+ static_assert(v.index() == 0, "");
constexpr std::variant<TCopy> v2(v);
- static_assert(v2.index() == 0);
- static_assert(std::get<0>(v2).value == 42);
+ static_assert(v2.index() == 0, "");
+ static_assert(std::get<0>(v2).value == 42, "");
}
{
constexpr std::variant<int, TCopy> v(std::in_place_index<1>, 42);
- static_assert(v.index() == 1);
+ static_assert(v.index() == 1, "");
constexpr std::variant<int, TCopy> v2(v);
- static_assert(v2.index() == 1);
- static_assert(std::get<1>(v2).value == 42);
+ static_assert(v2.index() == 1, "");
+ static_assert(std::get<1>(v2).value == 42, "");
}
{
constexpr std::variant<TCopyNTMove> v(std::in_place_index<0>, 42);
- static_assert(v.index() == 0);
+ static_assert(v.index() == 0, "");
constexpr std::variant<TCopyNTMove> v2(v);
- static_assert(v2.index() == 0);
- static_assert(std::get<0>(v2).value == 42);
+ static_assert(v2.index() == 0, "");
+ static_assert(std::get<0>(v2).value == 42, "");
}
{
constexpr std::variant<int, TCopyNTMove> v(std::in_place_index<1>, 42);
- static_assert(v.index() == 1);
+ static_assert(v.index() == 1, "");
constexpr std::variant<int, TCopyNTMove> v2(v);
- static_assert(v2.index() == 1);
- static_assert(std::get<1>(v2).value == 42);
+ static_assert(v2.index() == 1, "");
+ static_assert(std::get<1>(v2).value == 42, "");
}
}
diff --git a/test/libcxx/utilities/variant/variant.variant/variant.ctor/move.pass.cpp b/test/libcxx/utilities/variant/variant.variant/variant.ctor/move.pass.cpp
index e67a495d9799..91e8c194d144 100644
--- a/test/libcxx/utilities/variant/variant.variant/variant.ctor/move.pass.cpp
+++ b/test/libcxx/utilities/variant/variant.variant/variant.ctor/move.pass.cpp
@@ -82,8 +82,8 @@ void test_move_ctor_basic() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 0);
- static_assert(result.value == 42);
+ static_assert(result.index == 0, "");
+ static_assert(result.value == 42, "");
}
{
struct {
@@ -94,8 +94,8 @@ void test_move_ctor_basic() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value == 42);
+ static_assert(result.index == 1, "");
+ static_assert(result.value == 42, "");
}
{
struct {
@@ -106,8 +106,8 @@ void test_move_ctor_basic() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 0);
- static_assert(result.value.value == 42);
+ static_assert(result.index == 0, "");
+ static_assert(result.value.value == 42, "");
}
{
struct {
@@ -118,8 +118,8 @@ void test_move_ctor_basic() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value.value == 42);
+ static_assert(result.index == 1, "");
+ static_assert(result.value.value == 42, "");
}
{
struct {
@@ -130,8 +130,8 @@ void test_move_ctor_basic() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 0);
- static_assert(result.value.value == 42);
+ static_assert(result.index == 0, "");
+ static_assert(result.value.value == 42, "");
}
{
struct {
@@ -142,8 +142,8 @@ void test_move_ctor_basic() {
}
} test;
constexpr auto result = test();
- static_assert(result.index == 1);
- static_assert(result.value.value == 42);
+ static_assert(result.index == 1, "");
+ static_assert(result.value.value == 42, "");
}
}