summaryrefslogtreecommitdiffstats
path: root/libcxx
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-06-14 01:36:15 +0000
committerEric Fiselier <eric@efcs.ca>2016-06-14 01:36:15 +0000
commitfbe79c9d250cfa98fd3285009317b48150d1f1cf (patch)
treec6e118637afc7bdfe767a34f6de6c8a0923fbba7 /libcxx
parent85c55319187e92cf9be2527aac1cfaaea78573af (diff)
downloadbcm5719-llvm-fbe79c9d250cfa98fd3285009317b48150d1f1cf.tar.gz
bcm5719-llvm-fbe79c9d250cfa98fd3285009317b48150d1f1cf.zip
Remove _LIBCPP_TRIVIAL_PAIR_COPY_CTOR option.
llvm-svn: 272613
Diffstat (limited to 'libcxx')
-rw-r--r--libcxx/include/__config8
-rw-r--r--libcxx/include/utility28
-rw-r--r--libcxx/test/std/utilities/utility/pairs/pairs.pair/copy_ctor.pass.cpp6
-rw-r--r--libcxx/test/std/utilities/utility/pairs/pairs.pair/move_ctor.pass.cpp44
-rw-r--r--libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp50
5 files changed, 102 insertions, 34 deletions
diff --git a/libcxx/include/__config b/libcxx/include/__config
index 91fb1c0f84f..26deb674400 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -745,8 +745,8 @@ template <unsigned> struct __static_assert_check {};
#define _LIBCPP_WCTYPE_IS_MASK
#endif
-#ifndef _LIBCPP_TRIVIAL_PAIR_COPY_CTOR
-# define _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 1
+#ifdef _LIBCPP_TRIVIAL_PAIR_COPY_CTOR
+# error the "_LIBCPP_TRIVIAL_PAIR_COPY_CTOR" option is no longer supported
#endif
#ifndef _LIBCPP_STD_VER
@@ -879,7 +879,9 @@ extern "C" void __sanitizer_annotate_contiguous_container(
#if __cplusplus < 201103L
#define _LIBCPP_CXX03_LANG
#else
-#if defined(_LIBCPP_HAS_NO_VARIADIC_TEMPLATES) || defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES)
+#if defined(_LIBCPP_HAS_NO_VARIADIC_TEMPLATES) \
+ || defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) \
+ || defined(_LIBCPP_HAS_NO_DEFAULTED_FUNCTION)
#error Libc++ requires a feature complete C++11 compiler in C++11 or greater.
#endif
#endif
diff --git a/libcxx/include/utility b/libcxx/include/utility
index 27b81a0305e..d9d57a7d780 100644
--- a/libcxx/include/utility
+++ b/libcxx/include/utility
@@ -310,18 +310,9 @@ struct _LIBCPP_TYPE_VIS_ONLY pair
)
: first(__p.first), second(__p.second) {}
-#if !defined(_LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS) && _LIBCPP_TRIVIAL_PAIR_COPY_CTOR
- _LIBCPP_INLINE_VISIBILITY
- pair(const pair& __p) = default;
-#elif !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) || !_LIBCPP_TRIVIAL_PAIR_COPY_CTOR
- _LIBCPP_INLINE_VISIBILITY
- pair(const pair& __p)
- _NOEXCEPT_(is_nothrow_copy_constructible<first_type>::value &&
- is_nothrow_copy_constructible<second_type>::value)
- : first(__p.first),
- second(__p.second)
- {
- }
+#if !defined(_LIBCPP_CXX03_LANG)
+ _LIBCPP_INLINE_VISIBILITY pair(const pair& __p) = default;
+ _LIBCPP_INLINE_VISIBILITY pair(pair&& __p) = default;
#endif
_LIBCPP_INLINE_VISIBILITY
@@ -353,19 +344,6 @@ struct _LIBCPP_TYPE_VIS_ONLY pair
: first(_VSTD::forward<_U1>(__p.first)),
second(_VSTD::forward<_U2>(__p.second)) {}
-#ifndef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
- _LIBCPP_INLINE_VISIBILITY
- pair(pair&& __p) = default;
-#else
- _LIBCPP_INLINE_VISIBILITY
- pair(pair&& __p) _NOEXCEPT_(is_nothrow_move_constructible<first_type>::value &&
- is_nothrow_move_constructible<second_type>::value)
- : first(_VSTD::forward<first_type>(__p.first)),
- second(_VSTD::forward<second_type>(__p.second))
- {
- }
-#endif
-
_LIBCPP_INLINE_VISIBILITY
pair&
operator=(pair&& __p) _NOEXCEPT_(is_nothrow_move_assignable<first_type>::value &&
diff --git a/libcxx/test/std/utilities/utility/pairs/pairs.pair/copy_ctor.pass.cpp b/libcxx/test/std/utilities/utility/pairs/pairs.pair/copy_ctor.pass.cpp
index d16313fe7eb..1117db3297b 100644
--- a/libcxx/test/std/utilities/utility/pairs/pairs.pair/copy_ctor.pass.cpp
+++ b/libcxx/test/std/utilities/utility/pairs/pairs.pair/copy_ctor.pass.cpp
@@ -13,9 +13,6 @@
// pair(const pair&) = default;
-// Doesn't pass due to use of is_trivially_* trait.
-// XFAIL: gcc-4.9
-
#include <utility>
#include <cassert>
@@ -30,9 +27,6 @@ int main()
assert(p2.first == 3);
assert(p2.second == 4);
}
-
- static_assert((std::is_trivially_copy_constructible<std::pair<int, int> >::value), "");
-
#if TEST_STD_VER > 11
{
typedef std::pair<int, short> P1;
diff --git a/libcxx/test/std/utilities/utility/pairs/pairs.pair/move_ctor.pass.cpp b/libcxx/test/std/utilities/utility/pairs/pairs.pair/move_ctor.pass.cpp
new file mode 100644
index 00000000000..06cb5e5658c
--- /dev/null
+++ b/libcxx/test/std/utilities/utility/pairs/pairs.pair/move_ctor.pass.cpp
@@ -0,0 +1,44 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++98, c++03
+
+// <utility>
+
+// template <class T1, class T2> struct pair
+
+// pair(pair&&) = default;
+
+#include <utility>
+#include <memory>
+#include <cassert>
+
+#include "test_macros.h"
+
+struct Dummy {
+ Dummy(Dummy const&) = delete;
+ Dummy(Dummy &&) = default;
+};
+
+int main()
+{
+ {
+ typedef std::pair<int, short> P1;
+ static_assert(std::is_move_constructible<P1>::value, "");
+ P1 p1(3, 4);
+ P1 p2 = std::move(p1);
+ assert(p2.first == 3);
+ assert(p2.second == 4);
+ }
+ {
+ using P = std::pair<Dummy, int>;
+ static_assert(!std::is_copy_constructible<P>::value, "");
+ static_assert(std::is_move_constructible<P>::value, "");
+ }
+}
diff --git a/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp b/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp
new file mode 100644
index 00000000000..53cf56700df
--- /dev/null
+++ b/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp
@@ -0,0 +1,50 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <utility>
+
+// template <class T1, class T2> struct pair
+
+// pair(pair const&) = default;
+// pair(pair&&) = default;
+
+// Doesn't pass due to use of is_trivially_* trait.
+// XFAIL: gcc-4.9
+
+#include <utility>
+#include <cassert>
+
+#include "test_macros.h"
+
+struct Dummy {
+ Dummy(Dummy const&) = delete;
+ Dummy(Dummy &&) = default;
+};
+
+int main()
+{
+ typedef std::pair<int, short> P;
+ {
+ static_assert(std::is_copy_constructible<P>::value, "");
+ static_assert(std::is_trivially_copy_constructible<P>::value, "");
+ }
+#if TEST_STD_VER >= 11
+ {
+ static_assert(std::is_move_constructible<P>::value, "");
+ static_assert(std::is_trivially_move_constructible<P>::value, "");
+ }
+ {
+ using P1 = std::pair<Dummy, int>;
+ static_assert(!std::is_copy_constructible<P1>::value, "");
+ static_assert(!std::is_trivially_copy_constructible<P1>::value, "");
+ static_assert(std::is_move_constructible<P1>::value, "");
+ static_assert(std::is_trivially_move_constructible<P1>::value, "");
+ }
+#endif
+}
OpenPOWER on IntegriCloud