[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