summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/include/__config4
-rw-r--r--libcxx/include/atomic6
-rw-r--r--libcxx/test/std/atomics/atomics.types.generic/trivially_copyable.fail.cpp6
-rw-r--r--libcxx/test/std/utilities/meta/meta.unary.prop.query/void_t.pass.cpp9
4 files changed, 16 insertions, 9 deletions
diff --git a/libcxx/include/__config b/libcxx/include/__config
index 211b5e9ff5a..ec44f763910 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -472,7 +472,9 @@ namespace std {
#endif
// GCC 5 will support variable templates
+#if !defined(__cpp_variable_templates) || __cpp_variable_templates < 201304L
#define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES
+#endif
#define _NOEXCEPT throw()
#define _NOEXCEPT_(x)
@@ -494,7 +496,6 @@ namespace std {
#else // __GXX_EXPERIMENTAL_CXX0X__
-#define _LIBCPP_HAS_NO_TRAILING_RETURN
#define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS
#if _GNUC_VER < 403
@@ -508,6 +509,7 @@ namespace std {
#if _GNUC_VER < 404
#define _LIBCPP_HAS_NO_DECLTYPE
#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
+#define _LIBCPP_HAS_NO_TRAILING_RETURN
#define _LIBCPP_HAS_NO_UNICODE_CHARS
#define _LIBCPP_HAS_NO_VARIADICS
#define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
diff --git a/libcxx/include/atomic b/libcxx/include/atomic
index b5d5a27b041..abec2a0b565 100644
--- a/libcxx/include/atomic
+++ b/libcxx/include/atomic
@@ -552,6 +552,12 @@ typedef enum memory_order
namespace __gcc_atomic {
template <typename _Tp>
struct __gcc_atomic_t {
+
+#if _GNUC_VER >= 501
+ static_assert(is_trivially_copyable<_Tp>::value,
+ "std::atomic<Tp> requires that 'Tp' be a trivially copyable type");
+#endif
+
_LIBCPP_INLINE_VISIBILITY
#ifndef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
__gcc_atomic_t() _NOEXCEPT = default;
diff --git a/libcxx/test/std/atomics/atomics.types.generic/trivially_copyable.fail.cpp b/libcxx/test/std/atomics/atomics.types.generic/trivially_copyable.fail.cpp
index f2bf4db0de4..d940980e32f 100644
--- a/libcxx/test/std/atomics/atomics.types.generic/trivially_copyable.fail.cpp
+++ b/libcxx/test/std/atomics/atomics.types.generic/trivially_copyable.fail.cpp
@@ -57,12 +57,12 @@ struct NotTriviallyCopyable {
NotTriviallyCopyable ( int i ) : i_(i) {}
NotTriviallyCopyable ( const NotTriviallyCopyable &rhs) : i_(rhs.i_) {}
int i_;
- };
+};
-template <class T>
+template <class T, class >
void test ( T t ) {
std::atomic<T> t0(t);
- }
+}
int main()
{
diff --git a/libcxx/test/std/utilities/meta/meta.unary.prop.query/void_t.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary.prop.query/void_t.pass.cpp
index 5deeeff110d..ccec65fec39 100644
--- a/libcxx/test/std/utilities/meta/meta.unary.prop.query/void_t.pass.cpp
+++ b/libcxx/test/std/utilities/meta/meta.unary.prop.query/void_t.pass.cpp
@@ -11,11 +11,11 @@
// void_t
-#include <type_traits>
+// UNSUPPORTED: c++98, c++03, c++11, c++14
+
+// XFAIL: gcc-5.1 gcc-5.2
-#if _LIBCPP_STD_VER <= 14
-int main () {}
-#else
+#include <type_traits>
template <class T>
void test1()
@@ -66,4 +66,3 @@ int main()
static_assert( std::is_same<void, std::void_t<int, double const &, Class, volatile int[], void>>::value, "");
}
-#endif
OpenPOWER on IntegriCloud