Skip to content

Commit 30adaa7

Browse files
committed
[libc++] Granularize the rest of memory
Reviewed By: ldionne, #libc Spies: libcxx-commits, mgorny Differential Revision: https://reviews.llvm.org/D132790
1 parent 2f7da9d commit 30adaa7

File tree

113 files changed

+571
-183
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+571
-183
lines changed

libcxx/include/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,22 +379,26 @@ set(files
379379
__locale
380380
__mbstate_t.h
381381
__memory/addressof.h
382+
__memory/align.h
382383
__memory/allocate_at_least.h
383384
__memory/allocation_guard.h
384385
__memory/allocator.h
385386
__memory/allocator_arg_t.h
386387
__memory/allocator_traits.h
387388
__memory/assume_aligned.h
388389
__memory/auto_ptr.h
390+
__memory/builtin_new_allocator.h
389391
__memory/compressed_pair.h
390392
__memory/concepts.h
391393
__memory/construct_at.h
394+
__memory/destruct_n.h
392395
__memory/pointer_traits.h
393396
__memory/ranges_construct_at.h
394397
__memory/ranges_uninitialized_algorithms.h
395398
__memory/raw_storage_iterator.h
396399
__memory/shared_ptr.h
397400
__memory/swap_allocator.h
401+
__memory/temp_value.h
398402
__memory/temporary_buffer.h
399403
__memory/uninitialized_algorithms.h
400404
__memory/unique_ptr.h
@@ -537,6 +541,7 @@ set(files
537541
__type_traits/integral_constant.h
538542
__type_traits/is_abstract.h
539543
__type_traits/is_aggregate.h
544+
__type_traits/is_allocator.h
540545
__type_traits/is_arithmetic.h
541546
__type_traits/is_array.h
542547
__type_traits/is_assignable.h
@@ -619,6 +624,7 @@ set(files
619624
__type_traits/maybe_const.h
620625
__type_traits/nat.h
621626
__type_traits/negation.h
627+
__type_traits/noexcept_move_assign_container.h
622628
__type_traits/promote.h
623629
__type_traits/rank.h
624630
__type_traits/remove_all_extents.h

libcxx/include/__algorithm/inplace_merge.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@
2323
#include <__iterator/distance.h>
2424
#include <__iterator/iterator_traits.h>
2525
#include <__iterator/reverse_iterator.h>
26-
#include <memory>
26+
#include <__memory/destruct_n.h>
27+
#include <__memory/temporary_buffer.h>
28+
#include <__memory/unique_ptr.h>
29+
#include <__utility/pair.h>
30+
#include <new>
2731

2832
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2933
# pragma GCC system_header

libcxx/include/__algorithm/ranges_copy.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <__ranges/concepts.h>
1919
#include <__ranges/dangling.h>
2020
#include <__utility/move.h>
21+
#include <__utility/pair.h>
2122

2223
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2324
# pragma GCC system_header

libcxx/include/__algorithm/ranges_equal_range.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <__ranges/subrange.h>
2525
#include <__utility/forward.h>
2626
#include <__utility/move.h>
27+
#include <__utility/pair.h>
2728

2829
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2930
# pragma GCC system_header

libcxx/include/__algorithm/ranges_find_end.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <__ranges/access.h>
2222
#include <__ranges/concepts.h>
2323
#include <__ranges/subrange.h>
24+
#include <__utility/pair.h>
2425

2526
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2627
# pragma GCC system_header

libcxx/include/__algorithm/ranges_minmax.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <__ranges/concepts.h>
2424
#include <__utility/forward.h>
2525
#include <__utility/move.h>
26+
#include <__utility/pair.h>
2627
#include <initializer_list>
2728

2829
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)

libcxx/include/__algorithm/ranges_next_permutation.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <__ranges/concepts.h>
2323
#include <__ranges/dangling.h>
2424
#include <__utility/move.h>
25+
#include <__utility/pair.h>
2526

2627
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2728
# pragma GCC system_header

libcxx/include/__algorithm/ranges_partial_sort.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <__ranges/dangling.h>
2828
#include <__utility/forward.h>
2929
#include <__utility/move.h>
30+
#include <__utility/pair.h>
3031

3132
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
3233
# pragma GCC system_header

libcxx/include/__algorithm/ranges_partial_sort_copy.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <__ranges/concepts.h>
2525
#include <__ranges/dangling.h>
2626
#include <__utility/move.h>
27+
#include <__utility/pair.h>
2728

2829
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2930
# pragma GCC system_header

libcxx/include/__algorithm/ranges_partition.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <__ranges/subrange.h>
2727
#include <__utility/forward.h>
2828
#include <__utility/move.h>
29+
#include <__utility/pair.h>
2930
#include <type_traits>
3031

3132
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)

libcxx/include/__algorithm/ranges_prev_permutation.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <__ranges/concepts.h>
2323
#include <__ranges/dangling.h>
2424
#include <__utility/move.h>
25+
#include <__utility/pair.h>
2526

2627
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2728
# pragma GCC system_header

libcxx/include/__algorithm/ranges_search.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <__ranges/concepts.h>
2323
#include <__ranges/size.h>
2424
#include <__ranges/subrange.h>
25+
#include <__utility/pair.h>
2526

2627
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2728
# pragma GCC system_header

libcxx/include/__algorithm/ranges_search_n.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <__ranges/size.h>
2626
#include <__ranges/subrange.h>
2727
#include <__utility/move.h>
28+
#include <__utility/pair.h>
2829

2930
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
3031
# pragma GCC system_header

libcxx/include/__algorithm/ranges_set_difference.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <__ranges/dangling.h>
2424
#include <__type_traits/decay.h>
2525
#include <__utility/move.h>
26+
#include <__utility/pair.h>
2627

2728
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2829
# pragma GCC system_header

libcxx/include/__algorithm/ranges_unique.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <__ranges/subrange.h>
2727
#include <__utility/forward.h>
2828
#include <__utility/move.h>
29+
#include <__utility/pair.h>
2930

3031
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
3132
# pragma GCC system_header

libcxx/include/__algorithm/ranges_unique_copy.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <__ranges/dangling.h>
2828
#include <__utility/forward.h>
2929
#include <__utility/move.h>
30+
#include <__utility/pair.h>
3031

3132
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
3233
# pragma GCC system_header

libcxx/include/__algorithm/set_symmetric_difference.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <__config>
1616
#include <__iterator/iterator_traits.h>
1717
#include <__utility/move.h>
18+
#include <__utility/pair.h>
1819

1920
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2021
# pragma GCC system_header

libcxx/include/__algorithm/set_union.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <__config>
1616
#include <__iterator/iterator_traits.h>
1717
#include <__utility/move.h>
18+
#include <__utility/pair.h>
1819

1920
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2021
# pragma GCC system_header

libcxx/include/__algorithm/sort.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@
2222
#include <__functional/operations.h>
2323
#include <__functional/ranges_operations.h>
2424
#include <__iterator/iterator_traits.h>
25+
#include <__memory/destruct_n.h>
26+
#include <__memory/unique_ptr.h>
2527
#include <climits>
26-
#include <memory>
2728

2829
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2930
# pragma GCC system_header

libcxx/include/__algorithm/stable_partition.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515
#include <__iterator/advance.h>
1616
#include <__iterator/distance.h>
1717
#include <__iterator/iterator_traits.h>
18-
#include <memory>
18+
#include <__memory/destruct_n.h>
19+
#include <__memory/temporary_buffer.h>
20+
#include <__memory/unique_ptr.h>
21+
#include <__utility/pair.h>
22+
#include <new>
1923
#include <type_traits>
2024

2125
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)

libcxx/include/__algorithm/stable_sort.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@
1616
#include <__algorithm/sort.h>
1717
#include <__config>
1818
#include <__iterator/iterator_traits.h>
19+
#include <__memory/destruct_n.h>
20+
#include <__memory/temporary_buffer.h>
21+
#include <__memory/unique_ptr.h>
1922
#include <__utility/move.h>
20-
#include <memory>
23+
#include <__utility/pair.h>
24+
#include <new>
2125
#include <type_traits>
2226

2327
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)

libcxx/include/__bsd_locale_fallbacks.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#ifndef _LIBCPP___BSD_LOCALE_FALLBACKS_H
1414
#define _LIBCPP___BSD_LOCALE_FALLBACKS_H
1515

16-
#include <memory>
1716
#include <stdarg.h>
1817
#include <stdlib.h>
1918

libcxx/include/__filesystem/filesystem_error.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <__config>
1515
#include <__filesystem/path.h>
1616
#include <__memory/shared_ptr.h>
17+
#include <__utility/forward.h>
1718
#include <iosfwd>
1819
#include <new>
1920
#include <system_error>

libcxx/include/__format/format_arg_store.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <__config>
2020
#include <__format/concepts.h>
2121
#include <__format/format_arg.h>
22+
#include <__utility/forward.h>
2223
#include <cstring>
2324
#include <string>
2425
#include <string_view>

libcxx/include/__functional/function.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,20 @@
1717
#include <__functional/unary_function.h>
1818
#include <__iterator/iterator_traits.h>
1919
#include <__memory/addressof.h>
20+
#include <__memory/allocator.h>
2021
#include <__memory/allocator_traits.h>
22+
#include <__memory/builtin_new_allocator.h>
2123
#include <__memory/compressed_pair.h>
2224
#include <__memory/shared_ptr.h>
25+
#include <__memory/unique_ptr.h>
2326
#include <__utility/forward.h>
2427
#include <__utility/move.h>
28+
#include <__utility/piecewise_construct.h>
2529
#include <__utility/swap.h>
2630
#include <exception>
27-
#include <memory> // TODO: replace with <__memory/__builtin_new_allocator.h>
31+
#include <tuple>
2832
#include <type_traits>
33+
#include <typeinfo>
2934

3035
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
3136
# pragma GCC system_header

libcxx/include/__hash_table

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,20 @@
1818
#include <__debug>
1919
#include <__functional/hash.h>
2020
#include <__iterator/iterator_traits.h>
21+
#include <__memory/addressof.h>
22+
#include <__memory/allocator_traits.h>
23+
#include <__memory/compressed_pair.h>
24+
#include <__memory/pointer_traits.h>
2125
#include <__memory/swap_allocator.h>
26+
#include <__memory/unique_ptr.h>
2227
#include <__type_traits/can_extract_key.h>
28+
#include <__utility/forward.h>
29+
#include <__utility/move.h>
30+
#include <__utility/pair.h>
2331
#include <__utility/swap.h>
2432
#include <cmath>
33+
#include <cstring>
2534
#include <initializer_list>
26-
#include <memory>
2735
#include <type_traits>
2836

2937
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)

libcxx/include/__locale

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212

1313
#include <__availability>
1414
#include <__config>
15+
#include <__memory/shared_ptr.h>
1516
#include <cctype>
1617
#include <cstdint>
1718
#include <locale.h>
18-
#include <memory>
1919
#include <mutex>
2020
#include <string>
2121

libcxx/include/__memory/align.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef _LIBCPP___MEMORY_ALIGN_H
10+
#define _LIBCPP___MEMORY_ALIGN_H
11+
12+
#include <__config>
13+
#include <cstddef>
14+
15+
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
16+
# pragma GCC system_header
17+
#endif
18+
19+
_LIBCPP_BEGIN_NAMESPACE_STD
20+
21+
_LIBCPP_FUNC_VIS void* align(size_t __align, size_t __sz, void*& __ptr, size_t& __space);
22+
23+
_LIBCPP_END_NAMESPACE_STD
24+
25+
#endif // _LIBCPP___MEMORY_ALIGN_H
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef _LIBCPP___MEMORY_BUILTIN_NEW_ALLOCATOR_H
10+
#define _LIBCPP___MEMORY_BUILTIN_NEW_ALLOCATOR_H
11+
12+
#include <__config>
13+
#include <__memory/unique_ptr.h>
14+
#include <cstddef>
15+
#include <new>
16+
17+
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
18+
# pragma GCC system_header
19+
#endif
20+
21+
_LIBCPP_BEGIN_NAMESPACE_STD
22+
23+
// __builtin_new_allocator -- A non-templated helper for allocating and
24+
// deallocating memory using __builtin_operator_new and
25+
// __builtin_operator_delete. It should be used in preference to
26+
// `std::allocator<T>` to avoid additional instantiations.
27+
struct __builtin_new_allocator {
28+
struct __builtin_new_deleter {
29+
typedef void* pointer_type;
30+
31+
_LIBCPP_CONSTEXPR explicit __builtin_new_deleter(size_t __size, size_t __align)
32+
: __size_(__size), __align_(__align) {}
33+
34+
void operator()(void* __p) const _NOEXCEPT {
35+
_VSTD::__libcpp_deallocate(__p, __size_, __align_);
36+
}
37+
38+
private:
39+
size_t __size_;
40+
size_t __align_;
41+
};
42+
43+
typedef unique_ptr<void, __builtin_new_deleter> __holder_t;
44+
45+
static __holder_t __allocate_bytes(size_t __s, size_t __align) {
46+
return __holder_t(_VSTD::__libcpp_allocate(__s, __align),
47+
__builtin_new_deleter(__s, __align));
48+
}
49+
50+
static void __deallocate_bytes(void* __p, size_t __s,
51+
size_t __align) _NOEXCEPT {
52+
_VSTD::__libcpp_deallocate(__p, __s, __align);
53+
}
54+
55+
template <class _Tp>
56+
_LIBCPP_NODEBUG _LIBCPP_ALWAYS_INLINE
57+
static __holder_t __allocate_type(size_t __n) {
58+
return __allocate_bytes(__n * sizeof(_Tp), _LIBCPP_ALIGNOF(_Tp));
59+
}
60+
61+
template <class _Tp>
62+
_LIBCPP_NODEBUG _LIBCPP_ALWAYS_INLINE
63+
static void __deallocate_type(void* __p, size_t __n) _NOEXCEPT {
64+
__deallocate_bytes(__p, __n * sizeof(_Tp), _LIBCPP_ALIGNOF(_Tp));
65+
}
66+
};
67+
68+
_LIBCPP_END_NAMESPACE_STD
69+
70+
#endif // _LIBCPP___MEMORY_BUILTIN_NEW_ALLOCATOR_H

0 commit comments

Comments
 (0)