Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 29 Jan 2017 20:59:02 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r312962 - in vendor/libc++/dist: include test/libcxx/test test/std/containers/container.adaptors/queue/queue.defn test/std/containers/container.adaptors/stack/stack.defn test/std/contai...
Message-ID:  <201701292059.v0TKx27W075242@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Sun Jan 29 20:59:02 2017
New Revision: 312962
URL: https://svnweb.freebsd.org/changeset/base/312962

Log:
  Vendor import of libc++ release_40 branch r293443:
  https://llvm.org/svn/llvm-project/libcxx/branches/release_40@293443

Modified:
  vendor/libc++/dist/include/__config
  vendor/libc++/dist/include/__string
  vendor/libc++/dist/include/__threading_support
  vendor/libc++/dist/include/deque
  vendor/libc++/dist/include/forward_list
  vendor/libc++/dist/include/list
  vendor/libc++/dist/include/queue
  vendor/libc++/dist/include/stack
  vendor/libc++/dist/include/vector
  vendor/libc++/dist/test/libcxx/test/config.py
  vendor/libc++/dist/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp
  vendor/libc++/dist/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp
  vendor/libc++/dist/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp
  vendor/libc++/dist/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp
  vendor/libc++/dist/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp
  vendor/libc++/dist/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp
  vendor/libc++/dist/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp
  vendor/libc++/dist/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp
  vendor/libc++/dist/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp
  vendor/libc++/dist/www/cxx1z_status.html

Modified: vendor/libc++/dist/include/__config
==============================================================================
--- vendor/libc++/dist/include/__config	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/include/__config	Sun Jan 29 20:59:02 2017	(r312962)
@@ -403,15 +403,6 @@ namespace std {
 #define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK __attribute__((__no_sanitize__("unsigned-integer-overflow")))
 #endif 
 
-// A constexpr version of __builtin_memcmp was added in clang 4.0
-#if __has_builtin(__builtin_memcmp)
-# ifdef __apple_build_version__
-// No shipping version of Apple's clang has constexpr __builtin_memcmp
-# elif __clang_major__ > 3
-#  define _LIBCPP_BUILTIN_MEMCMP_ISCONSTEXPR
-# endif
-#endif
-
 #elif defined(_LIBCPP_COMPILER_GCC)
 
 #define _ALIGNAS(x) __attribute__((__aligned__(x)))

Modified: vendor/libc++/dist/include/__string
==============================================================================
--- vendor/libc++/dist/include/__string	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/include/__string	Sun Jan 29 20:59:02 2017	(r312962)
@@ -243,7 +243,7 @@ char_traits<char>::compare(const char_ty
 {
     if (__n == 0)
         return 0;
-#ifdef _LIBCPP_BUILTIN_MEMCMP_ISCONSTEXPR
+#if __has_feature(cxx_constexpr_string_builtins)
     return __builtin_memcmp(__s1, __s2, __n);
 #elif _LIBCPP_STD_VER <= 14
     return memcmp(__s1, __s2, __n);
@@ -265,7 +265,9 @@ char_traits<char>::find(const char_type*
 {
     if (__n == 0)
         return NULL;
-#if _LIBCPP_STD_VER <= 14
+#if __has_feature(cxx_constexpr_string_builtins)
+    return __builtin_char_memchr(__s, to_int_type(__a), __n);
+#elif _LIBCPP_STD_VER <= 14
     return (const char_type*) memchr(__s, to_int_type(__a), __n);
 #else
     for (; __n; --__n)
@@ -331,7 +333,7 @@ char_traits<wchar_t>::compare(const char
 {
     if (__n == 0)
         return 0;
-#if __has_builtin(__builtin_wmemcmp)
+#if __has_feature(cxx_constexpr_string_builtins)
     return __builtin_wmemcmp(__s1, __s2, __n);
 #elif _LIBCPP_STD_VER <= 14
     return wmemcmp(__s1, __s2, __n);
@@ -351,7 +353,7 @@ inline _LIBCPP_CONSTEXPR_AFTER_CXX14
 size_t
 char_traits<wchar_t>::length(const char_type* __s) _NOEXCEPT
 {
-#if __has_builtin(__builtin_wcslen)
+#if __has_feature(cxx_constexpr_string_builtins)
     return __builtin_wcslen(__s);
 #elif _LIBCPP_STD_VER <= 14
     return wcslen(__s);
@@ -369,7 +371,7 @@ char_traits<wchar_t>::find(const char_ty
 {
     if (__n == 0)
         return NULL;
-#if __has_builtin(__builtin_wmemchr)
+#if __has_feature(cxx_constexpr_string_builtins)
         return __builtin_wmemchr(__s, __a, __n);
 #elif _LIBCPP_STD_VER <= 14
     return wmemchr(__s, __a, __n);

Modified: vendor/libc++/dist/include/__threading_support
==============================================================================
--- vendor/libc++/dist/include/__threading_support	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/include/__threading_support	Sun Jan 29 20:59:02 2017	(r312962)
@@ -40,6 +40,12 @@
 #define _LIBCPP_THREAD_ABI_VISIBILITY inline _LIBCPP_INLINE_VISIBILITY
 #endif
 
+#if defined(__FreeBSD__) && defined(__clang__) && __has_attribute(no_thread_safety_analysis)
+#define _LIBCPP_NO_THREAD_SAFETY_ANALYSIS __attribute__((no_thread_safety_analysis))
+#else
+#define _LIBCPP_NO_THREAD_SAFETY_ANALYSIS
+#endif
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 #if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
@@ -98,25 +104,25 @@ typedef DWORD __libcpp_tls_key;
 _LIBCPP_THREAD_ABI_VISIBILITY
 int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t *__m);
 
-_LIBCPP_THREAD_ABI_VISIBILITY
+_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS
 int __libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t *__m);
 
-_LIBCPP_THREAD_ABI_VISIBILITY
+_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS
 int __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t *__m);
 
-_LIBCPP_THREAD_ABI_VISIBILITY
+_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS
 int __libcpp_recursive_mutex_unlock(__libcpp_recursive_mutex_t *__m);
 
 _LIBCPP_THREAD_ABI_VISIBILITY
 int __libcpp_recursive_mutex_destroy(__libcpp_recursive_mutex_t *__m);
 
-_LIBCPP_THREAD_ABI_VISIBILITY
+_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS
 int __libcpp_mutex_lock(__libcpp_mutex_t *__m);
 
-_LIBCPP_THREAD_ABI_VISIBILITY
+_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS
 int __libcpp_mutex_trylock(__libcpp_mutex_t *__m);
 
-_LIBCPP_THREAD_ABI_VISIBILITY
+_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS
 int __libcpp_mutex_unlock(__libcpp_mutex_t *__m);
 
 _LIBCPP_THREAD_ABI_VISIBILITY
@@ -129,10 +135,10 @@ int __libcpp_condvar_signal(__libcpp_con
 _LIBCPP_THREAD_ABI_VISIBILITY
 int __libcpp_condvar_broadcast(__libcpp_condvar_t* __cv);
 
-_LIBCPP_THREAD_ABI_VISIBILITY
+_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS
 int __libcpp_condvar_wait(__libcpp_condvar_t* __cv, __libcpp_mutex_t* __m);
 
-_LIBCPP_THREAD_ABI_VISIBILITY
+_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS
 int __libcpp_condvar_timedwait(__libcpp_condvar_t *__cv, __libcpp_mutex_t *__m,
                                timespec *__ts);
 

Modified: vendor/libc++/dist/include/deque
==============================================================================
--- vendor/libc++/dist/include/deque	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/include/deque	Sun Jan 29 20:59:02 2017	(r312962)
@@ -110,8 +110,8 @@ public:
     void push_front(value_type&& v);
     void push_back(const value_type& v);
     void push_back(value_type&& v);
-    template <class... Args> reference emplace_front(Args&&... args);
-    template <class... Args> reference emplace_back(Args&&... args);
+    template <class... Args> reference emplace_front(Args&&... args);  // reference in C++17
+    template <class... Args> reference emplace_back(Args&&... args);   // reference in C++17
     template <class... Args> iterator emplace(const_iterator p, Args&&... args);
     iterator insert(const_iterator p, const value_type& v);
     iterator insert(const_iterator p, value_type&& v);
@@ -1342,8 +1342,13 @@ public:
     void push_back(const value_type& __v);
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 #ifndef _LIBCPP_HAS_NO_VARIADICS
+#if _LIBCPP_STD_VER > 14
     template <class... _Args> reference emplace_front(_Args&&... __args);
-    template <class... _Args> reference emplace_back(_Args&&... __args);
+    template <class... _Args> reference emplace_back (_Args&&... __args);
+#else
+    template <class... _Args> void      emplace_front(_Args&&... __args);
+    template <class... _Args> void      emplace_back (_Args&&... __args);
+#endif
     template <class... _Args> iterator emplace(const_iterator __p, _Args&&... __args);
 #endif  // _LIBCPP_HAS_NO_VARIADICS
     void push_front(value_type&& __v);
@@ -1822,7 +1827,11 @@ deque<_Tp, _Allocator>::push_back(value_
 
 template <class _Tp, class _Allocator>
 template <class... _Args>
+#if _LIBCPP_STD_VER > 14
 typename deque<_Tp, _Allocator>::reference
+#else
+void
+#endif
 deque<_Tp, _Allocator>::emplace_back(_Args&&... __args)
 {
     allocator_type& __a = __base::__alloc();
@@ -1832,7 +1841,9 @@ deque<_Tp, _Allocator>::emplace_back(_Ar
     __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()),
                               _VSTD::forward<_Args>(__args)...);
     ++__base::size();
+#if _LIBCPP_STD_VER > 14
     return *--__base::end();
+#endif
 }
 
 #endif  // _LIBCPP_HAS_NO_VARIADICS
@@ -1870,7 +1881,11 @@ deque<_Tp, _Allocator>::push_front(value
 
 template <class _Tp, class _Allocator>
 template <class... _Args>
+#if _LIBCPP_STD_VER > 14
 typename deque<_Tp, _Allocator>::reference
+#else
+void
+#endif
 deque<_Tp, _Allocator>::emplace_front(_Args&&... __args)
 {
     allocator_type& __a = __base::__alloc();
@@ -1880,7 +1895,9 @@ deque<_Tp, _Allocator>::emplace_front(_A
     __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), _VSTD::forward<_Args>(__args)...);
     --__base::__start_;
     ++__base::size();
+#if _LIBCPP_STD_VER > 14
     return *__base::begin();
+#endif
 }
 
 #endif  // _LIBCPP_HAS_NO_VARIADICS

Modified: vendor/libc++/dist/include/forward_list
==============================================================================
--- vendor/libc++/dist/include/forward_list	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/include/forward_list	Sun Jan 29 20:59:02 2017	(r312962)
@@ -87,7 +87,7 @@ public:
     reference       front();
     const_reference front() const;
 
-    template <class... Args> reference emplace_front(Args&&... args);
+    template <class... Args> reference emplace_front(Args&&... args);  // reference in C++17
     void push_front(const value_type& v);
     void push_front(value_type&& v);
 
@@ -747,7 +747,11 @@ public:
 
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 #ifndef _LIBCPP_HAS_NO_VARIADICS
+#if _LIBCPP_STD_VER > 14
     template <class... _Args> reference emplace_front(_Args&&... __args);
+#else
+    template <class... _Args> void      emplace_front(_Args&&... __args);
+#endif
 #endif
     void push_front(value_type&& __v);
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
@@ -1103,7 +1107,11 @@ forward_list<_Tp, _Alloc>::assign(initia
 
 template <class _Tp, class _Alloc>
 template <class... _Args>
+#if _LIBCPP_STD_VER > 14
 typename forward_list<_Tp, _Alloc>::reference
+#else
+void
+#endif
 forward_list<_Tp, _Alloc>::emplace_front(_Args&&... __args)
 {
     __node_allocator& __a = base::__alloc();
@@ -1113,7 +1121,9 @@ forward_list<_Tp, _Alloc>::emplace_front
                                   _VSTD::forward<_Args>(__args)...);
     __h->__next_ = base::__before_begin()->__next_;
     base::__before_begin()->__next_ = __h.release();
+#if _LIBCPP_STD_VER > 14
     return base::__before_begin()->__next_->__value_;
+#endif
 }
 
 #endif  // _LIBCPP_HAS_NO_VARIADICS

Modified: vendor/libc++/dist/include/list
==============================================================================
--- vendor/libc++/dist/include/list	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/include/list	Sun Jan 29 20:59:02 2017	(r312962)
@@ -93,10 +93,10 @@ public:
     size_type max_size() const noexcept;
 
     template <class... Args>
-        reference emplace_front(Args&&... args);
+        reference emplace_front(Args&&... args); // reference in C++17
     void pop_front();
     template <class... Args>
-        reference emplace_back(Args&&... args);
+        reference emplace_back(Args&&... args);  // reference in C++17
     void pop_back();
     void push_front(const value_type& x);
     void push_front(value_type&& x);
@@ -969,9 +969,17 @@ public:
     void push_back(value_type&& __x);
 #ifndef _LIBCPP_HAS_NO_VARIADICS
     template <class... _Args>
+#if _LIBCPP_STD_VER > 14
        reference emplace_front(_Args&&... __args);
+#else
+       void      emplace_front(_Args&&... __args);
+#endif
     template <class... _Args>
+#if _LIBCPP_STD_VER > 14
         reference emplace_back(_Args&&... __args);
+#else
+       void       emplace_back(_Args&&... __args);
+#endif
     template <class... _Args>
         iterator emplace(const_iterator __p, _Args&&... __args);
 #endif  // _LIBCPP_HAS_NO_VARIADICS
@@ -1600,7 +1608,11 @@ list<_Tp, _Alloc>::push_back(value_type&
 
 template <class _Tp, class _Alloc>
 template <class... _Args>
+#if _LIBCPP_STD_VER > 14
 typename list<_Tp, _Alloc>::reference
+#else
+void
+#endif
 list<_Tp, _Alloc>::emplace_front(_Args&&... __args)
 {
     __node_allocator& __na = base::__node_alloc();
@@ -1609,12 +1621,20 @@ list<_Tp, _Alloc>::emplace_front(_Args&&
     __node_alloc_traits::construct(__na, _VSTD::addressof(__hold->__value_), _VSTD::forward<_Args>(__args)...);
     __link_nodes_at_front(__hold.get()->__as_link(), __hold.get()->__as_link());
     ++base::__sz();
+#if _LIBCPP_STD_VER > 14
     return __hold.release()->__value_;
+#else
+    __hold.release();
+#endif
 }
 
 template <class _Tp, class _Alloc>
 template <class... _Args>
+#if _LIBCPP_STD_VER > 14
 typename list<_Tp, _Alloc>::reference
+#else
+void
+#endif
 list<_Tp, _Alloc>::emplace_back(_Args&&... __args)
 {
     __node_allocator& __na = base::__node_alloc();
@@ -1624,7 +1644,11 @@ list<_Tp, _Alloc>::emplace_back(_Args&&.
     __link_pointer __nl = __hold->__as_link();
     __link_nodes_at_back(__nl, __nl);
     ++base::__sz();
+#if _LIBCPP_STD_VER > 14
     return __hold.release()->__value_;
+#else
+    __hold.release();
+#endif
 }
 
 template <class _Tp, class _Alloc>

Modified: vendor/libc++/dist/include/queue
==============================================================================
--- vendor/libc++/dist/include/queue	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/include/queue	Sun Jan 29 20:59:02 2017	(r312962)
@@ -63,7 +63,7 @@ public:
 
     void push(const value_type& v);
     void push(value_type&& v);
-    template <class... Args> reference emplace(Args&&... args);
+    template <class... Args> reference emplace(Args&&... args); // reference in C++17
     void pop();
 
     void swap(queue& q) noexcept(is_nothrow_swappable_v<Container>)
@@ -292,8 +292,13 @@ public:
 #ifndef _LIBCPP_HAS_NO_VARIADICS
     template <class... _Args>
         _LIBCPP_INLINE_VISIBILITY
+#if _LIBCPP_STD_VER > 14
         reference emplace(_Args&&... __args)
             { return c.emplace_back(_VSTD::forward<_Args>(__args)...);}
+#else
+        void     emplace(_Args&&... __args)
+            {        c.emplace_back(_VSTD::forward<_Args>(__args)...);}
+#endif
 #endif  // _LIBCPP_HAS_NO_VARIADICS
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
     _LIBCPP_INLINE_VISIBILITY

Modified: vendor/libc++/dist/include/stack
==============================================================================
--- vendor/libc++/dist/include/stack	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/include/stack	Sun Jan 29 20:59:02 2017	(r312962)
@@ -55,7 +55,7 @@ public:
 
     void push(const value_type& x);
     void push(value_type&& x);
-    template <class... Args> reference emplace(Args&&... args);
+    template <class... Args> reference emplace(Args&&... args); // reference in C++17
     void pop();
 
     void swap(stack& c) noexcept(is_nothrow_swappable_v<Container>)
@@ -199,8 +199,13 @@ public:
 #ifndef _LIBCPP_HAS_NO_VARIADICS
     template <class... _Args>
         _LIBCPP_INLINE_VISIBILITY
+#if _LIBCPP_STD_VER > 14
         reference emplace(_Args&&... __args)
         { return c.emplace_back(_VSTD::forward<_Args>(__args)...);}
+#else
+        void      emplace(_Args&&... __args)
+        {        c.emplace_back(_VSTD::forward<_Args>(__args)...);}
+#endif
 #endif  // _LIBCPP_HAS_NO_VARIADICS
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
     _LIBCPP_INLINE_VISIBILITY

Modified: vendor/libc++/dist/include/vector
==============================================================================
--- vendor/libc++/dist/include/vector	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/include/vector	Sun Jan 29 20:59:02 2017	(r312962)
@@ -99,7 +99,7 @@ public:
     void push_back(const value_type& x);
     void push_back(value_type&& x);
     template <class... Args>
-        reference emplace_back(Args&&... args);
+        reference emplace_back(Args&&... args); // reference in C++17
     void pop_back();
 
     template <class... Args> iterator emplace(const_iterator position, Args&&... args);
@@ -218,7 +218,7 @@ public:
     const_reference back() const;
 
     void push_back(const value_type& x);
-    template <class... Args> reference emplace_back(Args&&... args);  // C++14
+    template <class... Args> reference emplace_back(Args&&... args);  // C++14; reference in C++17
     void pop_back();
 
     template <class... Args> iterator emplace(const_iterator position, Args&&... args);  // C++14
@@ -679,7 +679,11 @@ public:
 #ifndef _LIBCPP_HAS_NO_VARIADICS
     template <class... _Args>
         _LIBCPP_INLINE_VISIBILITY
+#if _LIBCPP_STD_VER > 14
         reference emplace_back(_Args&&... __args);
+#else
+        void      emplace_back(_Args&&... __args);
+#endif
 #endif  // _LIBCPP_HAS_NO_VARIADICS
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
     _LIBCPP_INLINE_VISIBILITY
@@ -1625,7 +1629,11 @@ vector<_Tp, _Allocator>::__emplace_back_
 template <class _Tp, class _Allocator>
 template <class... _Args>
 inline
+#if _LIBCPP_STD_VER > 14
 typename vector<_Tp, _Allocator>::reference
+#else
+void
+#endif
 vector<_Tp, _Allocator>::emplace_back(_Args&&... __args)
 {
     if (this->__end_ < this->__end_cap())
@@ -1639,7 +1647,9 @@ vector<_Tp, _Allocator>::emplace_back(_A
     }
     else
         __emplace_back_slow_path(_VSTD::forward<_Args>(__args)...);
+#if _LIBCPP_STD_VER > 14
     return this->back();
+#endif
 }
 
 #endif  // _LIBCPP_HAS_NO_VARIADICS
@@ -2336,9 +2346,16 @@ public:
     void push_back(const value_type& __x);
 #if _LIBCPP_STD_VER > 11
     template <class... _Args>
-    _LIBCPP_INLINE_VISIBILITY reference emplace_back(_Args&&... __args) {
+#if _LIBCPP_STD_VER > 14
+    _LIBCPP_INLINE_VISIBILITY reference emplace_back(_Args&&... __args)
+#else
+    _LIBCPP_INLINE_VISIBILITY void      emplace_back(_Args&&... __args)
+#endif
+    {
         push_back ( value_type ( _VSTD::forward<_Args>(__args)... ));
+#if _LIBCPP_STD_VER > 14
         return this->back();
+#endif
     }
 #endif
 

Modified: vendor/libc++/dist/test/libcxx/test/config.py
==============================================================================
--- vendor/libc++/dist/test/libcxx/test/config.py	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/test/libcxx/test/config.py	Sun Jan 29 20:59:02 2017	(r312962)
@@ -403,6 +403,15 @@ class Configuration(object):
         if not std:
             # Choose the newest possible language dialect if none is given.
             possible_stds = ['c++1z', 'c++14', 'c++11', 'c++03']
+            if self.cxx.type == 'gcc':
+                maj_v, _, _ = self.cxx.version
+                maj_v = int(maj_v)
+                if maj_v < 7:
+                    possible_stds.remove('c++1z')
+                # FIXME: How many C++14 tests actually fail under GCC 5 and 6?
+                # Should we XFAIL them individually instead?
+                if maj_v <= 6:
+                    possible_stds.remove('c++14')
             for s in possible_stds:
                 if self.cxx.hasCompileFlag('-std=%s' % s):
                     std = s

Modified: vendor/libc++/dist/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp
==============================================================================
--- vendor/libc++/dist/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp	Sun Jan 29 20:59:02 2017	(r312962)
@@ -12,25 +12,35 @@
 // <queue>
 
 // template <class... Args> reference emplace(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
+
 
 #include <queue>
 #include <cassert>
 
+#include "test_macros.h"
+
 #include "../../../Emplaceable.h"
 
 int main()
 {
     typedef Emplaceable T;
     std::queue<Emplaceable> q;
+#if TEST_STD_VER > 14
     T& r1 = q.emplace(1, 2.5);
     assert(&r1 == &q.back());
     T& r2 = q.emplace(2, 3.5);
     assert(&r2 == &q.back());
     T& r3 = q.emplace(3, 4.5);
     assert(&r3 == &q.back());
+    assert(&r1 == &q.front());
+#else
+    q.emplace(1, 2.5);
+    q.emplace(2, 3.5);
+    q.emplace(3, 4.5);
+#endif
+
     assert(q.size() == 3);
     assert(q.front() == Emplaceable(1, 2.5));
     assert(q.back() == Emplaceable(3, 4.5));
-    assert(&r3 == &q.back());
-    assert(&r1 == &q.front());
 }

Modified: vendor/libc++/dist/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp
==============================================================================
--- vendor/libc++/dist/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp	Sun Jan 29 20:59:02 2017	(r312962)
@@ -12,22 +12,31 @@
 // <stack>
 
 // template <class... Args> reference emplace(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
 
 #include <stack>
 #include <cassert>
 
+#include "test_macros.h"
+
 #include "../../../Emplaceable.h"
 
 int main()
 {
     typedef Emplaceable T;
     std::stack<Emplaceable> q;
+#if TEST_STD_VER > 14
     T& r1 = q.emplace(1, 2.5);
     assert(&r1 == &q.top());
     T& r2 = q.emplace(2, 3.5);
     assert(&r2 == &q.top());
     T& r3 = q.emplace(3, 4.5);
     assert(&r3 == &q.top());
+#else
+    q.emplace(1, 2.5);
+    q.emplace(2, 3.5);
+    q.emplace(3, 4.5);
+#endif
     assert(q.size() == 3);
     assert(q.top() == Emplaceable(3, 4.5));
 }

Modified: vendor/libc++/dist/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp
==============================================================================
--- vendor/libc++/dist/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp	Sun Jan 29 20:59:02 2017	(r312962)
@@ -12,6 +12,7 @@
 // <deque>
 
 // template <class... Args> reference emplace_back(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
 
 #include <deque>
 #include <cstddef>
@@ -49,15 +50,21 @@ void
 test(C& c1)
 {
     typedef typename C::iterator I;
-    typedef typename C::reference Ref;
     std::size_t c1_osize = c1.size();
+#if TEST_STD_VER > 14
+    typedef typename C::reference Ref;
     Ref ref = c1.emplace_back(Emplaceable(1, 2.5));
+#else
+              c1.emplace_back(Emplaceable(1, 2.5));
+#endif
     assert(c1.size() == c1_osize + 1);
     assert(distance(c1.begin(), c1.end())
                == static_cast<std::ptrdiff_t>(c1.size()));
     I i = c1.end();
     assert(*--i == Emplaceable(1, 2.5));
+#if TEST_STD_VER > 14
     assert(&(*i) == &ref);
+#endif
 }
 
 template <class C>

Modified: vendor/libc++/dist/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp
==============================================================================
--- vendor/libc++/dist/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp	Sun Jan 29 20:59:02 2017	(r312962)
@@ -12,6 +12,7 @@
 // <deque>
 
 // template <class... Args> reference emplace_front(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
 
 #include <deque>
 #include <cstddef>
@@ -20,6 +21,7 @@
 #include "test_macros.h"
 #include "../../../Emplaceable.h"
 #include "min_allocator.h"
+#include "test_allocator.h"
 
 template <class C>
 C
@@ -48,15 +50,21 @@ void
 test(C& c1)
 {
     typedef typename C::iterator I;
-    typedef typename C::reference Ref;
     std::size_t c1_osize = c1.size();
+#if TEST_STD_VER > 14
+    typedef typename C::reference Ref;
     Ref res_ref = c1.emplace_front(Emplaceable(1, 2.5));
+#else
+                  c1.emplace_front(Emplaceable(1, 2.5));
+#endif
     assert(c1.size() == c1_osize + 1);
     assert(distance(c1.begin(), c1.end())
                == static_cast<std::ptrdiff_t>(c1.size()));
     I i = c1.begin();
     assert(*i == Emplaceable(1, 2.5));
+#if TEST_STD_VER > 14
     assert(&res_ref == &(*i));
+#endif
 }
 
 template <class C>
@@ -84,4 +92,15 @@ int main()
         for (int j = 0; j < N; ++j)
             testN<std::deque<Emplaceable, min_allocator<Emplaceable>> >(rng[i], rng[j]);
     }
+    {
+        std::deque<Tag_X, TaggingAllocator<Tag_X>> c;
+        c.emplace_front();
+        assert(c.size() == 1);
+        c.emplace_front(1, 2, 3);
+        assert(c.size() == 2);
+        c.emplace_front();
+        assert(c.size() == 3);
+        c.emplace_front(1, 2, 3);
+        assert(c.size() == 4);
+    }
 }

Modified: vendor/libc++/dist/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp
==============================================================================
--- vendor/libc++/dist/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp	Sun Jan 29 20:59:02 2017	(r312962)
@@ -12,10 +12,13 @@
 // <forward_list>
 
 // template <class... Args> reference emplace_front(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
 
 #include <forward_list>
 #include <cassert>
 
+#include "test_macros.h"
+
 #include "../../../Emplaceable.h"
 #include "min_allocator.h"
 
@@ -25,6 +28,7 @@ int main()
         typedef Emplaceable T;
         typedef std::forward_list<T> C;
         C c;
+#if TEST_STD_VER > 14
         T& r1 = c.emplace_front();
         assert(c.front() == Emplaceable());
         assert(&r1 == &c.front());
@@ -32,6 +36,13 @@ int main()
         T& r2 = c.emplace_front(1, 2.5);
         assert(c.front() == Emplaceable(1, 2.5));
         assert(&r2 == &c.front());
+#else
+        c.emplace_front();
+        assert(c.front() == Emplaceable());
+        assert(distance(c.begin(), c.end()) == 1);
+        c.emplace_front(1, 2.5);
+        assert(c.front() == Emplaceable(1, 2.5));
+#endif
         assert(*next(c.begin()) == Emplaceable());
         assert(distance(c.begin(), c.end()) == 2);
     }
@@ -39,6 +50,7 @@ int main()
         typedef Emplaceable T;
         typedef std::forward_list<T, min_allocator<T>> C;
         C c;
+#if TEST_STD_VER > 14
         T& r1 = c.emplace_front();
         assert(c.front() == Emplaceable());
         assert(&r1 == &c.front());
@@ -46,6 +58,13 @@ int main()
         T& r2 = c.emplace_front(1, 2.5);
         assert(c.front() == Emplaceable(1, 2.5));
         assert(&r2 == &c.front());
+#else
+        c.emplace_front();
+        assert(c.front() == Emplaceable());
+        assert(distance(c.begin(), c.end()) == 1);
+        c.emplace_front(1, 2.5);
+        assert(c.front() == Emplaceable(1, 2.5));
+#endif
         assert(*next(c.begin()) == Emplaceable());
         assert(distance(c.begin(), c.end()) == 2);
     }

Modified: vendor/libc++/dist/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp
==============================================================================
--- vendor/libc++/dist/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp	Sun Jan 29 20:59:02 2017	(r312962)
@@ -12,10 +12,12 @@
 // <list>
 
 // template <class... Args> reference emplace_back(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
 
 #include <list>
 #include <cassert>
 
+#include "test_macros.h"
 #include "min_allocator.h"
 
 class A
@@ -37,6 +39,7 @@ int main()
 {
     {
     std::list<A> c;
+#if TEST_STD_VER > 14
     A& r1 = c.emplace_back(2, 3.5);
     assert(c.size() == 1);
     assert(&r1 == &c.back());
@@ -45,6 +48,14 @@ int main()
     A& r2 = c.emplace_back(3, 4.5);
     assert(c.size() == 2);
     assert(&r2 == &c.back());
+#else
+    c.emplace_back(2, 3.5);
+    assert(c.size() == 1);
+    assert(c.front().geti() == 2);
+    assert(c.front().getd() == 3.5);
+    c.emplace_back(3, 4.5);
+    assert(c.size() == 2);
+#endif
     assert(c.front().geti() == 2);
     assert(c.front().getd() == 3.5);
     assert(c.back().geti() == 3);
@@ -52,6 +63,7 @@ int main()
     }
     {
     std::list<A, min_allocator<A>> c;
+#if TEST_STD_VER > 14
     A& r1 = c.emplace_back(2, 3.5);
     assert(c.size() == 1);
     assert(&r1 == &c.back());
@@ -60,6 +72,14 @@ int main()
     A& r2 = c.emplace_back(3, 4.5);
     assert(c.size() == 2);
     assert(&r2 == &c.back());
+#else
+    c.emplace_back(2, 3.5);
+    assert(c.size() == 1);
+    assert(c.front().geti() == 2);
+    assert(c.front().getd() == 3.5);
+    c.emplace_back(3, 4.5);
+    assert(c.size() == 2);
+#endif
     assert(c.front().geti() == 2);
     assert(c.front().getd() == 3.5);
     assert(c.back().geti() == 3);

Modified: vendor/libc++/dist/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp
==============================================================================
--- vendor/libc++/dist/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp	Sun Jan 29 20:59:02 2017	(r312962)
@@ -12,6 +12,7 @@
 // <list>
 
 // template <class... Args> reference emplace_front(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
 
 #include <list>
 #include <cassert>
@@ -37,6 +38,7 @@ int main()
 {
     {
     std::list<A> c;
+#if TEST_STD_VER > 14
     A& r1 = c.emplace_front(2, 3.5);
     assert(c.size() == 1);
     assert(&r1 == &c.front());
@@ -45,13 +47,23 @@ int main()
     A& r2 = c.emplace_front(3, 4.5);
     assert(c.size() == 2);
     assert(&r2 == &c.front());
+#else
+    c.emplace_front(2, 3.5);
+    assert(c.size() == 1);
+    assert(c.front().geti() == 2);
+    assert(c.front().getd() == 3.5);
+    c.emplace_front(3, 4.5);
+    assert(c.size() == 2);
+#endif
     assert(c.front().geti() == 3);
     assert(c.front().getd() == 4.5);
     assert(c.back().geti() == 2);
     assert(c.back().getd() == 3.5);
     }
+
     {
     std::list<A, min_allocator<A>> c;
+#if TEST_STD_VER > 14
     A& r1 = c.emplace_front(2, 3.5);
     assert(c.size() == 1);
     assert(&r1 == &c.front());
@@ -60,6 +72,14 @@ int main()
     A& r2 = c.emplace_front(3, 4.5);
     assert(c.size() == 2);
     assert(&r2 == &c.front());
+#else
+    c.emplace_front(2, 3.5);
+    assert(c.size() == 1);
+    assert(c.front().geti() == 2);
+    assert(c.front().getd() == 3.5);
+    c.emplace_front(3, 4.5);
+    assert(c.size() == 2);
+#endif
     assert(c.front().geti() == 3);
     assert(c.front().getd() == 4.5);
     assert(c.back().geti() == 2);

Modified: vendor/libc++/dist/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp
==============================================================================
--- vendor/libc++/dist/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp	Sun Jan 29 20:59:02 2017	(r312962)
@@ -12,17 +12,20 @@
 //  vector.bool
 
 // template <class... Args> reference emplace_back(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
 
 #include <vector>
 #include <cassert>
+#include "test_macros.h"
 #include "min_allocator.h"
 
 int main()
 {
     {
         typedef std::vector<bool> C;
-        typedef C::reference Ref;
         C c;
+#if TEST_STD_VER > 14
+        typedef C::reference Ref;
         Ref r1 = c.emplace_back();
         assert(c.size() == 1);
         assert(c.front() == false);
@@ -36,19 +39,27 @@ int main()
         r2 = false;
         assert(c.back() == false);
         r2 = true;
-        Ref r3 = c.emplace_back(1 == 1);
+#else
+        c.emplace_back();
+        assert(c.size() == 1);
+        assert(c.front() == false);
+        c.emplace_back(true);
+        assert(c.size() == 2);
+        assert(c.front() == false);
+        assert(c.back() == true);
+#endif
+        c.emplace_back(1 == 1);
         assert(c.size() == 3);
         assert(c.front() == false);
         assert(c[1] == true);
         assert(c.back() == true);
-        r3 = false;
-        assert(c.back() == false);
     }
     {
         typedef std::vector<bool, min_allocator<bool>> C;
-        typedef C::reference Ref;
         C c;
 
+#if TEST_STD_VER > 14
+        typedef C::reference Ref;
         Ref r1 = c.emplace_back();
         assert(c.size() == 1);
         assert(c.front() == false);
@@ -62,6 +73,15 @@ int main()
         r2 = false;
         assert(c.back() == false);
         r2 = true;
+#else
+        c.emplace_back();
+        assert(c.size() == 1);
+        assert(c.front() == false);
+        c.emplace_back(true);
+        assert(c.size() == 2);
+        assert(c.front() == false);
+        assert(c.back() == true);
+#endif
         c.emplace_back(1 == 1);
         assert(c.size() == 3);
         assert(c.front() == false);

Modified: vendor/libc++/dist/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp
==============================================================================
--- vendor/libc++/dist/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp	Sun Jan 29 20:59:02 2017	(r312962)
@@ -12,9 +12,11 @@
 // <vector>
 
 // template <class... Args> reference emplace_back(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
 
 #include <vector>
 #include <cassert>
+#include "test_macros.h"
 #include "test_allocator.h"
 #include "min_allocator.h"
 #include "test_allocator.h"
@@ -56,6 +58,7 @@ int main()
 {
     {
         std::vector<A> c;
+#if TEST_STD_VER > 14
         A& r1 = c.emplace_back(2, 3.5);
         assert(c.size() == 1);
         assert(&r1 == &c.back());
@@ -65,6 +68,15 @@ int main()
         A& r2 = c.emplace_back(3, 4.5);
         assert(c.size() == 2);
         assert(&r2 == &c.back());
+#else
+        c.emplace_back(2, 3.5);
+        assert(c.size() == 1);
+        assert(c.front().geti() == 2);
+        assert(c.front().getd() == 3.5);
+        assert(is_contiguous_container_asan_correct(c));
+        c.emplace_back(3, 4.5);
+        assert(c.size() == 2);
+#endif
         assert(c.front().geti() == 2);
         assert(c.front().getd() == 3.5);
         assert(c.back().geti() == 3);
@@ -73,6 +85,7 @@ int main()
     }
     {
         std::vector<A, limited_allocator<A, 4> > c;
+#if TEST_STD_VER > 14
         A& r1 = c.emplace_back(2, 3.5);
         assert(c.size() == 1);
         assert(&r1 == &c.back());
@@ -82,6 +95,15 @@ int main()
         A& r2 = c.emplace_back(3, 4.5);
         assert(c.size() == 2);
         assert(&r2 == &c.back());
+#else
+        c.emplace_back(2, 3.5);
+        assert(c.size() == 1);
+        assert(c.front().geti() == 2);
+        assert(c.front().getd() == 3.5);
+        assert(is_contiguous_container_asan_correct(c));
+        c.emplace_back(3, 4.5);
+        assert(c.size() == 2);
+#endif
         assert(c.front().geti() == 2);
         assert(c.front().getd() == 3.5);
         assert(c.back().geti() == 3);
@@ -90,6 +112,7 @@ int main()
     }
     {
         std::vector<A, min_allocator<A>> c;
+#if TEST_STD_VER > 14
         A& r1 = c.emplace_back(2, 3.5);
         assert(c.size() == 1);
         assert(&r1 == &c.back());
@@ -99,6 +122,15 @@ int main()
         A& r2 = c.emplace_back(3, 4.5);
         assert(c.size() == 2);
         assert(&r2 == &c.back());
+#else
+        c.emplace_back(2, 3.5);
+        assert(c.size() == 1);
+        assert(c.front().geti() == 2);
+        assert(c.front().getd() == 3.5);
+        assert(is_contiguous_container_asan_correct(c));
+        c.emplace_back(3, 4.5);
+        assert(c.size() == 2);
+#endif
         assert(c.front().geti() == 2);
         assert(c.front().getd() == 3.5);
         assert(c.back().geti() == 3);

Modified: vendor/libc++/dist/www/cxx1z_status.html
==============================================================================
--- vendor/libc++/dist/www/cxx1z_status.html	Sun Jan 29 20:58:58 2017	(r312961)
+++ vendor/libc++/dist/www/cxx1z_status.html	Sun Jan 29 20:59:02 2017	(r312962)
@@ -376,10 +376,10 @@
 	<tr><td><a href="http://wg21.link/LWG2680">2680</a></td><td>Add "Equivalent to" to filesystem</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="http://wg21.link/LWG2681">2681</a></td><td>filesystem::copy() cannot copy symlinks</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="http://wg21.link/LWG2682">2682</a></td><td>filesystem::copy() won't create a symlink to a directory</td><td>Issaquah</td><td>Complete</td></tr>
-	<tr><td><a href="http://wg21.link/LWG2686">2686</a></td><td>Why is std::hash specialized for error_code, but not error_condition?</td><td>Issaquah</td><td>Patch ready</td></tr>
+	<tr><td><a href="http://wg21.link/LWG2686">2686</a></td><td>Why is std::hash specialized for error_code, but not error_condition?</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="http://wg21.link/LWG2694">2694</a></td><td>Application of LWG 436 accidentally deleted definition of "facet"</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="http://wg21.link/LWG2696">2696</a></td><td>Interaction between make_shared and enable_shared_from_this is underspecified</td><td>Issaquah</td><td></td></tr>
-	<tr><td><a href="http://wg21.link/LWG2699">2699</a></td><td>Missing restriction in [numeric.requirements]</td><td>Issaquah</td><td></td></tr>
+	<tr><td><a href="http://wg21.link/LWG2699">2699</a></td><td>Missing restriction in [numeric.requirements]</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="http://wg21.link/LWG2712">2712</a></td><td>copy_file(from, to, ...) has a number of unspecified error conditions</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="http://wg21.link/LWG2722">2722</a></td><td>equivalent incorrectly specifies throws clause</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="http://wg21.link/LWG2729">2729</a></td><td>Missing SFINAE on std::pair::operator=</td><td>Issaquah</td><td></td></tr>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201701292059.v0TKx27W075242>