[libcxx] r291332 - [libc++] Tolerate presence of __deallocate macro
Eric Fiselier via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 6 19:01:24 PST 2017
Author: ericwf
Date: Fri Jan 6 21:01:24 2017
New Revision: 291332
URL: http://llvm.org/viewvc/llvm-project?rev=291332&view=rev
Log:
[libc++] Tolerate presence of __deallocate macro
Summary:
On Windows the identifier `__deallocate` is defined as a macro by one of the Windows system headers. Previously libc++ worked around this by `#undef __deallocate` and generating a warning. However this causes the WIN32 version of `__threading_support` to always generate a warning on Windows. This is not OK.
This patch renames all usages of `__deallocate` internally as to not conflict with the macro.
Reviewers: mclow.lists, majnemer, rnk, rsmith, smeenai, compnerd
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D28426
Removed:
libcxx/trunk/include/__undef___deallocate
Modified:
libcxx/trunk/include/__hash_table
libcxx/trunk/include/__sso_allocator
libcxx/trunk/include/experimental/dynarray
libcxx/trunk/include/memory
libcxx/trunk/include/module.modulemap
libcxx/trunk/include/new
libcxx/trunk/include/valarray
libcxx/trunk/src/experimental/memory_resource.cpp
Modified: libcxx/trunk/include/__hash_table
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__hash_table?rev=291332&r1=291331&r2=291332&view=diff
==============================================================================
--- libcxx/trunk/include/__hash_table (original)
+++ libcxx/trunk/include/__hash_table Fri Jan 6 21:01:24 2017
@@ -20,7 +20,6 @@
#include <utility>
#include <__undef_min_max>
-#include <__undef___deallocate>
#include <__debug>
@@ -1321,7 +1320,7 @@ private:
void __move_assign_alloc(__hash_table&, false_type) _NOEXCEPT {}
#endif // _LIBCPP_CXX03_LANG
- void __deallocate(__next_pointer __np) _NOEXCEPT;
+ void __deallocate_node(__next_pointer __np) _NOEXCEPT;
__next_pointer __detach() _NOEXCEPT;
template <class, class, class, class, class> friend class _LIBCPP_TEMPLATE_VIS unordered_map;
@@ -1454,7 +1453,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>
"Predicate must be copy-constructible.");
static_assert((is_copy_constructible<hasher>::value),
"Hasher must be copy-constructible.");
- __deallocate(__p1_.first().__next_);
+ __deallocate_node(__p1_.first().__next_);
#if _LIBCPP_DEBUG_LEVEL >= 2
__get_db()->__erase_c(this);
#endif
@@ -1492,7 +1491,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>
template <class _Tp, class _Hash, class _Equal, class _Alloc>
void
-__hash_table<_Tp, _Hash, _Equal, _Alloc>::__deallocate(__next_pointer __np)
+__hash_table<_Tp, _Hash, _Equal, _Alloc>::__deallocate_node(__next_pointer __np)
_NOEXCEPT
{
__node_allocator& __na = __node_alloc();
@@ -1599,11 +1598,11 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>
}
catch (...)
{
- __deallocate(__cache);
+ __deallocate_node(__cache);
throw;
}
#endif // _LIBCPP_NO_EXCEPTIONS
- __deallocate(__cache);
+ __deallocate_node(__cache);
}
const_iterator __i = __u.begin();
while (__u.size() != 0)
@@ -1661,11 +1660,11 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>
}
catch (...)
{
- __deallocate(__cache);
+ __deallocate_node(__cache);
throw;
}
#endif // _LIBCPP_NO_EXCEPTIONS
- __deallocate(__cache);
+ __deallocate_node(__cache);
}
for (; __first != __last; ++__first)
__insert_unique(*__first);
@@ -1701,11 +1700,11 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>
}
catch (...)
{
- __deallocate(__cache);
+ __deallocate_node(__cache);
throw;
}
#endif // _LIBCPP_NO_EXCEPTIONS
- __deallocate(__cache);
+ __deallocate_node(__cache);
}
for (; __first != __last; ++__first)
__insert_multi(_NodeTypes::__get_value(*__first));
@@ -1765,7 +1764,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>
{
if (size() > 0)
{
- __deallocate(__p1_.first().__next_);
+ __deallocate_node(__p1_.first().__next_);
__p1_.first().__next_ = nullptr;
size_type __bc = bucket_count();
for (size_type __i = 0; __i < __bc; ++__i)
Modified: libcxx/trunk/include/__sso_allocator
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__sso_allocator?rev=291332&r1=291331&r2=291332&view=diff
==============================================================================
--- libcxx/trunk/include/__sso_allocator (original)
+++ libcxx/trunk/include/__sso_allocator Fri Jan 6 21:01:24 2017
@@ -15,8 +15,6 @@
#include <type_traits>
#include <new>
-#include <__undef___deallocate>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
@@ -64,7 +62,7 @@ public:
if (__p == (pointer)&buf_)
__allocated_ = false;
else
- _VSTD::__deallocate(__p);
+ _VSTD::__libcpp_deallocate(__p);
}
_LIBCPP_INLINE_VISIBILITY size_type max_size() const throw() {return size_type(~0) / sizeof(_Tp);}
Removed: libcxx/trunk/include/__undef___deallocate
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__undef___deallocate?rev=291331&view=auto
==============================================================================
--- libcxx/trunk/include/__undef___deallocate (original)
+++ libcxx/trunk/include/__undef___deallocate (removed)
@@ -1,20 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// 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.
-//
-//===----------------------------------------------------------------------===//
-
-#ifdef __deallocate
-#if !defined(_LIBCPP_DISABLE_MACRO_CONFLICT_WARNINGS)
-#if defined(_MSC_VER) && !defined(__clang__)
-_LIBCPP_WARNING("macro __deallocate is incompatible with C++. #undefining __deallocate")
-#else
-#warning: macro __deallocate is incompatible with C++. #undefining __deallocate
-#endif
-#endif
-#undef __deallocate
-#endif
Modified: libcxx/trunk/include/experimental/dynarray
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/experimental/dynarray?rev=291332&r1=291331&r2=291332&view=diff
==============================================================================
--- libcxx/trunk/include/experimental/dynarray (original)
+++ libcxx/trunk/include/experimental/dynarray Fri Jan 6 21:01:24 2017
@@ -11,9 +11,6 @@
#ifndef _LIBCPP_DYNARRAY
#define _LIBCPP_DYNARRAY
-#include <__config>
-#if _LIBCPP_STD_VER > 11
-
/*
dynarray synopsis
@@ -96,6 +93,8 @@ public:
}} // std::experimental
*/
+#include <__config>
+#if _LIBCPP_STD_VER > 11
#include <__functional_base>
#include <iterator>
@@ -104,8 +103,6 @@ public:
#include <new>
#include <algorithm>
-#include <__undef___deallocate>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
@@ -143,9 +140,9 @@ private:
return static_cast<value_type *> (_VSTD::__allocate (sizeof(value_type) * count));
}
- static inline _LIBCPP_INLINE_VISIBILITY void __deallocate ( value_type* __ptr ) noexcept
+ static inline _LIBCPP_INLINE_VISIBILITY void __deallocate_value( value_type* __ptr ) noexcept
{
- _VSTD::__deallocate (static_cast<void *> (__ptr));
+ _VSTD::__libcpp_deallocate (static_cast<void *> (__ptr));
}
public:
@@ -265,7 +262,7 @@ dynarray<_Tp>::~dynarray()
value_type *__data = data () + __size_;
for ( size_t i = 0; i < __size_; ++i )
(--__data)->value_type::~value_type();
- __deallocate ( __base_ );
+ __deallocate_value( __base_ );
}
template <class _Tp>
Modified: libcxx/trunk/include/memory
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/memory?rev=291332&r1=291331&r2=291332&view=diff
==============================================================================
--- libcxx/trunk/include/memory (original)
+++ libcxx/trunk/include/memory Fri Jan 6 21:01:24 2017
@@ -644,7 +644,6 @@ void* align(size_t alignment, size_t siz
#endif
#include <__undef_min_max>
-#include <__undef___deallocate>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
@@ -1772,7 +1771,7 @@ public:
return static_cast<pointer>(_VSTD::__allocate(__n * sizeof(_Tp)));
}
_LIBCPP_INLINE_VISIBILITY void deallocate(pointer __p, size_type) _NOEXCEPT
- {_VSTD::__deallocate((void*)__p);}
+ {_VSTD::__libcpp_deallocate((void*)__p);}
_LIBCPP_INLINE_VISIBILITY size_type max_size() const _NOEXCEPT
{return size_type(~0) / sizeof(_Tp);}
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
@@ -1868,7 +1867,7 @@ public:
return static_cast<pointer>(_VSTD::__allocate(__n * sizeof(_Tp)));
}
_LIBCPP_INLINE_VISIBILITY void deallocate(pointer __p, size_type) _NOEXCEPT
- {_VSTD::__deallocate((void*)__p);}
+ {_VSTD::__libcpp_deallocate((void*)__p);}
_LIBCPP_INLINE_VISIBILITY size_type max_size() const _NOEXCEPT
{return size_type(~0) / sizeof(_Tp);}
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
Modified: libcxx/trunk/include/module.modulemap
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/module.modulemap?rev=291332&r1=291331&r2=291332&view=diff
==============================================================================
--- libcxx/trunk/include/module.modulemap (original)
+++ libcxx/trunk/include/module.modulemap Fri Jan 6 21:01:24 2017
@@ -485,7 +485,6 @@ module std [system] {
module __tree { header "__tree" export * }
module __tuple { header "__tuple" export * }
module __undef_min_max { header "__undef_min_max" export * }
- module __undef___deallocate { header "__undef___deallocate" export * }
module experimental {
requires cplusplus11
Modified: libcxx/trunk/include/new
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/new?rev=291332&r1=291331&r2=291332&view=diff
==============================================================================
--- libcxx/trunk/include/new (original)
+++ libcxx/trunk/include/new Fri Jan 6 21:01:24 2017
@@ -92,8 +92,6 @@ void operator delete[](void* ptr, void*
#include <cstdlib>
#endif
-#include <__undef___deallocate>
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
@@ -217,7 +215,7 @@ inline _LIBCPP_INLINE_VISIBILITY void *_
#endif
}
-inline _LIBCPP_INLINE_VISIBILITY void __deallocate(void *__ptr) {
+inline _LIBCPP_INLINE_VISIBILITY void __libcpp_deallocate(void *__ptr) {
#ifdef _LIBCPP_HAS_NO_BUILTIN_OPERATOR_NEW_DELETE
::operator delete(__ptr);
#else
Modified: libcxx/trunk/include/valarray
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/valarray?rev=291332&r1=291331&r2=291332&view=diff
==============================================================================
--- libcxx/trunk/include/valarray (original)
+++ libcxx/trunk/include/valarray Fri Jan 6 21:01:24 2017
@@ -348,7 +348,6 @@ template <class T> unspecified2 end(cons
#include <new>
#include <__undef_min_max>
-#include <__undef___deallocate>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
@@ -3697,7 +3696,7 @@ valarray<_Tp>::resize(size_t __n, value_
{
while (__end_ != __begin_)
(--__end_)->~value_type();
- _VSTD::__deallocate(__begin_);
+ _VSTD::__libcpp_deallocate(__begin_);
__begin_ = __end_ = nullptr;
}
if (__n)
Modified: libcxx/trunk/src/experimental/memory_resource.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/experimental/memory_resource.cpp?rev=291332&r1=291331&r2=291332&view=diff
==============================================================================
--- libcxx/trunk/src/experimental/memory_resource.cpp (original)
+++ libcxx/trunk/src/experimental/memory_resource.cpp Fri Jan 6 21:01:24 2017
@@ -34,7 +34,7 @@ protected:
{ return __allocate(__size); }
virtual void do_deallocate(void * __p, size_t, size_t)
- { __deallocate(__p); }
+ { _VSTD::__libcpp_deallocate(__p); }
virtual bool do_is_equal(memory_resource const & __other) const _NOEXCEPT
{ return &__other == this; }
More information about the cfe-commits
mailing list