summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/include/memory3
-rw-r--r--libcxx/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp24
-rw-r--r--libcxx/test/std/utilities/memory/util.dynamic.safety/get_pointer_safety.pass.cpp12
3 files changed, 37 insertions, 2 deletions
diff --git a/libcxx/include/memory b/libcxx/include/memory
index 3ea9a77d0d4..a38d95b9446 100644
--- a/libcxx/include/memory
+++ b/libcxx/include/memory
@@ -5637,6 +5637,9 @@ struct _LIBCPP_TYPE_VIS pointer_safety
__lx __v_;
_LIBCPP_INLINE_VISIBILITY
+ pointer_safety() : __v_() {}
+
+ _LIBCPP_INLINE_VISIBILITY
pointer_safety(__lx __v) : __v_(__v) {}
_LIBCPP_INLINE_VISIBILITY
operator int() const {return __v_;}
diff --git a/libcxx/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp b/libcxx/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp
index 04671c3a967..6d49cea8ba1 100644
--- a/libcxx/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp
+++ b/libcxx/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp
@@ -14,13 +14,33 @@
#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()
{
- // Test that std::pointer_safety is still offered in C++03 under the old ABI.
-#ifndef _LIBCPP_ABI_POINTER_SAFETY_ENUM_TYPE
+#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/libcxx/test/std/utilities/memory/util.dynamic.safety/get_pointer_safety.pass.cpp b/libcxx/test/std/utilities/memory/util.dynamic.safety/get_pointer_safety.pass.cpp
index ee2f81713b2..df77be9643d 100644
--- a/libcxx/test/std/utilities/memory/util.dynamic.safety/get_pointer_safety.pass.cpp
+++ b/libcxx/test/std/utilities/memory/util.dynamic.safety/get_pointer_safety.pass.cpp
@@ -16,10 +16,22 @@
#include <memory>
#include <cassert>
+
+void test_pr26961() {
+ std::pointer_safety d;
+ d = std::get_pointer_safety();
+ assert(d == std::get_pointer_safety());
+}
+
int main()
{
+ {
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();
+ }
}
OpenPOWER on IntegriCloud