[libcxx] r291059 - Fix PR26961 - Add default constructor to std::pointer_safety struct.
Eric Fiselier via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 4 17:28:40 PST 2017
Author: ericwf
Date: Wed Jan 4 19:28:40 2017
New Revision: 291059
URL: http://llvm.org/viewvc/llvm-project?rev=291059&view=rev
Log:
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.
Modified:
libcxx/trunk/include/memory
libcxx/trunk/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp
libcxx/trunk/test/std/utilities/memory/util.dynamic.safety/get_pointer_safety.pass.cpp
Modified: libcxx/trunk/include/memory
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/memory?rev=291059&r1=291058&r2=291059&view=diff
==============================================================================
--- libcxx/trunk/include/memory (original)
+++ libcxx/trunk/include/memory Wed Jan 4 19:28:40 2017
@@ -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_;}
Modified: libcxx/trunk/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp?rev=291059&r1=291058&r2=291059&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp (original)
+++ libcxx/trunk/test/libcxx/utilities/memory/util.dynamic.safety/get_pointer_safety_cxx03.pass.cpp Wed Jan 4 19:28:40 2017
@@ -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
}
Modified: libcxx/trunk/test/std/utilities/memory/util.dynamic.safety/get_pointer_safety.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/util.dynamic.safety/get_pointer_safety.pass.cpp?rev=291059&r1=291058&r2=291059&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/memory/util.dynamic.safety/get_pointer_safety.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/memory/util.dynamic.safety/get_pointer_safety.pass.cpp Wed Jan 4 19:28:40 2017
@@ -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();
+ }
}
More information about the cfe-commits
mailing list