Fix PR26961 - Add default constructor to std::pointer_safety struct.

In ABI v1 libc++ implements std::pointer_safety as a class type instead
of an enumeration. However this class type does not provide
a default constructor as it should. This patch adds that default constructor.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291059 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Fiselier
2017-01-05 01:28:40 +00:00
parent 46a0c2ef0c
commit c3dfeced41
3 changed files with 37 additions and 2 deletions

View File

@@ -5636,6 +5636,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

View File

@@ -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
}

View File

@@ -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();
}
}