diff options
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(); + } } |