[libcxx-commits] [libcxx] r352561 - [libc++] Fix Windows build error in <functional>

Thomas Anderson via libcxx-commits libcxx-commits at lists.llvm.org
Tue Jan 29 15:19:45 PST 2019


Author: thomasanderson
Date: Tue Jan 29 15:19:45 2019
New Revision: 352561

URL: http://llvm.org/viewvc/llvm-project?rev=352561&view=rev
Log:
[libc++] Fix Windows build error in <functional>

On my Windows system, __allocator is defined to nothing.  This change fixes build errors of the below form:

    In file included from algorithm:644:
    functional(1492,31):  error: expected member name or ';' after declaration specifiers
        const _Alloc& __allocator() const { return __f_.second(); }

Differential Revision: https://reviews.llvm.org/D57355

Modified:
    libcxx/trunk/include/functional
    libcxx/trunk/test/support/nasty_macros.hpp

Modified: libcxx/trunk/include/functional
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/functional?rev=352561&r1=352560&r2=352561&view=diff
==============================================================================
--- libcxx/trunk/include/functional (original)
+++ libcxx/trunk/include/functional Tue Jan 29 15:19:45 2019
@@ -1488,8 +1488,9 @@ class __alloc_func<_Fp, _Ap, _Rp(_ArgTyp
     _LIBCPP_INLINE_VISIBILITY
     const _Target& __target() const { return __f_.first(); }
 
+    // WIN32 APIs may define __allocator, so use __get_allocator instead.
     _LIBCPP_INLINE_VISIBILITY
-    const _Alloc& __allocator() const { return __f_.second(); }
+    const _Alloc& __get_allocator() const { return __f_.second(); }
 
     _LIBCPP_INLINE_VISIBILITY
     explicit __alloc_func(_Target&& __f)
@@ -1611,7 +1612,7 @@ __func<_Fp, _Alloc, _Rp(_ArgTypes...)>::
 {
     typedef allocator_traits<_Alloc> __alloc_traits;
     typedef typename __rebind_alloc_helper<__alloc_traits, __func>::type _Ap;
-    _Ap __a(__f_.__allocator());
+    _Ap __a(__f_.__get_allocator());
     typedef __allocator_destructor<_Ap> _Dp;
     unique_ptr<__func, _Dp> __hold(__a.allocate(1), _Dp(__a, 1));
     ::new ((void*)__hold.get()) __func(__f_.__target(), _Alloc(__a));
@@ -1622,7 +1623,7 @@ template<class _Fp, class _Alloc, class
 void
 __func<_Fp, _Alloc, _Rp(_ArgTypes...)>::__clone(__base<_Rp(_ArgTypes...)>* __p) const
 {
-    ::new (__p) __func(__f_.__target(), __f_.__allocator());
+    ::new (__p) __func(__f_.__target(), __f_.__get_allocator());
 }
 
 template<class _Fp, class _Alloc, class _Rp, class ..._ArgTypes>
@@ -1638,7 +1639,7 @@ __func<_Fp, _Alloc, _Rp(_ArgTypes...)>::
 {
     typedef allocator_traits<_Alloc> __alloc_traits;
     typedef typename __rebind_alloc_helper<__alloc_traits, __func>::type _Ap;
-    _Ap __a(__f_.__allocator());
+    _Ap __a(__f_.__get_allocator());
     __f_.destroy();
     __a.deallocate(this, 1);
 }
@@ -1924,7 +1925,7 @@ struct __policy
         typedef typename __rebind_alloc_helper<__alloc_traits, _Fun>::type
             _FunAlloc;
         _Fun* __f = static_cast<_Fun*>(__s);
-        _FunAlloc __a(__f->__allocator());
+        _FunAlloc __a(__f->__get_allocator());
         __f->destroy();
         __a.deallocate(__f, 1);
     }

Modified: libcxx/trunk/test/support/nasty_macros.hpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/support/nasty_macros.hpp?rev=352561&r1=352560&r2=352561&view=diff
==============================================================================
--- libcxx/trunk/test/support/nasty_macros.hpp (original)
+++ libcxx/trunk/test/support/nasty_macros.hpp Tue Jan 29 15:19:45 2019
@@ -54,6 +54,7 @@
 // Test that libc++ doesn't use names reserved by WIN32 API Macros.
 // NOTE: Obviously we can only define these on non-windows platforms.
 #ifndef _WIN32
+#define __allocator NASTY_MACRO
 #define __deallocate NASTY_MACRO
 #define __out NASTY_MACRO
 #endif




More information about the libcxx-commits mailing list