]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/ChangeLog
libstdc++: Deal with ENOSYS == ENOTSUP
[thirdparty/gcc.git] / libstdc++-v3 / ChangeLog
CommitLineData
28119fba
AK
12020-03-06 Andreas Krebbel <krebbel@linux.ibm.com>
2
3 * src/c++11/system_error.cc: Omit the ENOTSUP case statement if it
4 would match ENOSYS.
5
6a705283
JW
62020-03-05 Jonathan Wakely <jwakely@redhat.com>
7
9412b35a
JW
8 * testsuite/27_io/filesystem/operations/all.cc: Mark unused variable.
9 * testsuite/27_io/filesystem/operations/copy.cc: Fix typo.
10 * testsuite/experimental/filesystem/operations/copy.cc: Likewise.
11 * testsuite/27_io/filesystem/operations/file_size.cc: Use correct type
12 for return value, and in comparison.
13 * testsuite/experimental/filesystem/operations/file_size.cc: Likewise.
14
6a705283
JW
15 PR libstdc++/94051
16 * include/std/string_view: Include <bits/ostream_insert.h>.
17 * testsuite/21_strings/basic_string_view/inserters/94051.cc: New test.
18
94f7d7ec
JW
192020-03-04 Jonathan Wakely <jwakely@redhat.com>
20
21 * include/bits/cpp_type_traits.h (__memcpyable): Fix comment.
22
05779e2c
PP
232020-03-04 Patrick Palka <ppalka@redhat.com>
24
712b182a
PP
25 PR libstdc++/94017
26 * include/bits/ranges_algobase.h (__fill_n_fn::operator()): Refine
27 condition for when to use memset, making sure to additionally check that
28 the output pointer's value type is a non-volatile byte type. Instead of
29 requiring that the fill type is a byte type, just require that it's an
30 integral type.
31 * testsuite/20_util/specialized_algorithms/uninitialized_fill/94017.cc:
32 New test.
33 * testsuite/20_util/specialized_algorithms/uninitialized_fill_n/94017.cc:
34 New test.
35 * testsuite/25_algorithms/fill/94013.cc: Uncomment part of test that was
36 blocked by PR 94017.
37 * testsuite/25_algorithms/fill/94017.cc: New test.
38 * testsuite/25_algorithms/fill_n/94017.cc: New test.
39
144dfc68
PP
40 LWG 3355 The memory algorithms should support move-only input iterators
41 introduced by P1207
42 * include/bits/ranges_uninitialized.h
43 (__uninitialized_copy_fn::operator()): Use std::move to avoid attempting
44 to copy __ifirst, which could be a move-only input iterator. Use
45 operator- instead of ranges::distance to compute distance from a sized
46 sentinel.
47 (__uninitialized_copy_n_fn::operator()): Likewise.
48 (__uninitialized_move_fn::operator()): Likewise.
49 (__uninitialized_move_n_fn::operator()): Likewise.
50 (__uninitialized_destroy_fn::operator()): Use std::move to avoid
51 attempting to copy __first.
52 (__uninitialized_destroy_n_fn::operator()): Likewise.
53 * testsuite/20_util/specialized_algorithms/destroy/constrained.cc:
54 Augment test.
55 * .../specialized_algorithms/uninitialized_copy/constrained.cc:
56 Likewise.
57 * .../specialized_algorithms/uninitialized_move/constrained.cc:
58 Likewise.
59
26af9cd8
PP
60 * testsuite/util/testsuite_iterators.h (test_range::get_iterator): Make
61 protected instead of private.
62 (test_sized_range_sized_sent): New.
63
d6d4b339
PP
64 * testsuite/util/testsuite_iterators.h (input_iterator_wrapper_nocopy):
65 New testsuite iterator.
66 * testsuite/24_iterators/counted_iterator/lwg3389.cc: use it.
67 * testsuite/24_iterators/move_iterator/lwg3390.cc: Likewise.
68
05779e2c
PP
69 * include/bits/ranges_uninitialized.h
70 (uninitialized_copy_fn::operator()): Pass a reference type as the first
71 argument to is_nothrow_assignable_v.
72 (uninitialized_copy_fn::operator()): Likewise.
73 (uninitialized_move_fn::operator()): Likewise. Return an in_out_result
74 with the input iterator stripped of its move_iterator.
75 (uninitialized_move_n_fn::operator()): Likewise.
76 (uninitialized_fill_fn::operator()): Pass a reference type as the first
77 argument to is_nothrow_assignable_v.
78 (uninitialized_fill_n_fn::operator()): Likewise.
79
9b4f00dd
JW
802020-03-03 Jonathan Wakely <jwakely@redhat.com>
81
462f6c20
JW
82 PR libstdc++/94013
83 * include/bits/cpp_type_traits.h (__memcpyable, __memcmpable): New
84 traits to control when to use memmove and memcmp optimizations.
85 (__is_nonvolatile_trivially_copyable): New helper trait.
86 * include/bits/ranges_algo.h (__lexicographical_compare_fn): Do not
87 use memcmp optimization with volatile data.
88 * include/bits/ranges_algobase.h (__equal_fn): Use __memcmpable.
89 (__copy_or_move, __copy_or_move_backward): Use __memcpyable.
90 * include/bits/stl_algobase.h (__copy_move_a2): Use __memcpyable.
91 (__copy_move_backward_a2): Likewise.
92 (__equal_aux1): Use __memcmpable.
93 (__lexicographical_compare_aux): Do not use memcmp optimization with
94 volatile data.
95 * testsuite/25_algorithms/copy/94013.cc: New test.
96 * testsuite/25_algorithms/copy_backward/94013.cc: New test.
97 * testsuite/25_algorithms/equal/94013.cc: New test.
98 * testsuite/25_algorithms/fill/94013.cc: New test.
99 * testsuite/25_algorithms/lexicographical_compare/94013.cc: New test.
100 * testsuite/25_algorithms/move/94013.cc: New test.
101 * testsuite/25_algorithms/move_backward/94013.cc: New test.
102
9b4f00dd
JW
103 * include/bits/stl_algobase.h (lexicographical_compare_three_way):
104 Avoid redundant iterator comparisons (LWG 3410).
105
5fad0003
JW
1062020-03-02 Jonathan Wakely <jwakely@redhat.com>
107
d112e173
JW
108 PR libstdc++/93972
109 * include/bits/stl_algobase.h (__memcmp): Allow pointer types to
110 differ.
111 * testsuite/25_algorithms/lexicographical_compare/uchar.cc: New test.
112
4c391563
JW
113 * include/std/ranges (__detail::__maybe_empty_t): Rename to
114 __maybe_present_t.
115 (__adaptor::_RangeAdaptor, join_view, split_view): Use new name.
116
5fad0003
JW
117 * include/bits/ranges_algo.h (shift_right): Add 'typename' to
118 dependent type.
119
fed76afb
L
1202020-03-01 H.J. Lu <hongjiu.lu@intel.com>
121
122 * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Updated.
123
bd55ce63
JDA
1242020-02-29 John David Anglin <danglin@gcc.gnu.org>
125
566f544c
JDA
126 * testsuite/17_intro/headers/c++1998/charset.cc: Skip on *-*-hpux*.
127 * testsuite/17_intro/headers/c++2011/charset.cc: Likewise.
128 * testsuite/17_intro/headers/c++2014/charset.cc: Likewise.
129 * testsuite/17_intro/headers/c++2017/charset.cc: Likewise.
130 * testsuite/17_intro/headers/c++2020/charset.cc: Likewise.
131
bd55ce63
JDA
132 * testsuite/30_threads/condition_variable_any/stop_token/wait_on.cc:
133 Add libatomic option.
134 * testsuite/30_threads/jthread/jthread.cc: Likewise.
135
44c85722
FD
1362020-02-29 François Dumont <fdumont@gcc.gnu.org>
137
138 * include/bits/stl_algo.h
139 (__find_if, __count_if, __is_permutation, std::is_permutation): Move...
140 * include/bits/stl_algobase.h: ...here.
141 * include/bits/hashtable_policy.h: Remove <bits/stl_algo.h> include.
142
d4912dc7
JDA
1432020-02-29 John David Anglin <danglin@gcc.gnu.org>
144
68a1a11f
JDA
145 * testsuite/30_threads/stop_token/stop_callback.cc: Add libatomic
146 option.
147 * testsuite/30_threads/stop_token/stop_callback/deadlock-mt.cc:
148 Likewise.
149 * testsuite/30_threads/stop_token/stop_callback/deadlock.cc: Likewise.
150 * testsuite/30_threads/stop_token/stop_callback/destroy.cc: Likewise.
151 * testsuite/30_threads/stop_token/stop_callback/invoke.cc: Likewise.
152 * testsuite/30_threads/stop_token/stop_source.cc: Likewise.
153 * testsuite/30_threads/stop_token/stop_source/assign.cc: Likewise.
154 * testsuite/30_threads/stop_token/stop_token.cc: Likewise.
155 * testsuite/30_threads/stop_token/stop_token/stop_possible.cc:
156 Likewise.
157
d4912dc7
JDA
158 PR libstdc++/92906
159 * config/abi/post/hppa-linux-gnu/baseline_symbols.txt: Update.
160
799270b4
PP
1612020-02-28 Patrick Palka <ppalka@redhat.com>
162
ce33801f
PP
163 PR libstdc++/93972
164 * include/bits/ranges_algo.h (__lexicographical_compare_fn::operator()):
165 Fix condition for when to use memcmp, making it consistent with the
166 corresponding condition used in std::lexicographical_compare.
167 * testsuite/25_algorithms/lexicographical_compare/93972.cc: New test.
168
799270b4
PP
169 * testsuite/26_numerics/headers/numeric/synopsis.cc: Add signatures for
170 functions introduced in C++11, C++17 and C++2a. Add 'constexpr' to
171 existing signatures for C++2a.
172
4735f92d
JW
1732020-02-28 Jonathan Wakely <jwakely@redhat.com>
174
175 * testsuite/24_iterators/range_operations/advance_debug_neg.cc: Run
176 test instead of just compiling it.
177
a1535015
PP
1782020-02-28 Patrick Palka <ppalka@redhat.com>
179
77e596cf
PP
180 * include/std/ranges (reverse_view::_S_needs_cached_begin): Set to false
181 whenever the underlying range models common_range.
182
a1535015
PP
183 * include/std/ranges (__detail::_CachedPosition): New struct.
184 (views::filter_view::_S_needs_cached_begin): New member variable.
185 (views::filter_view::_M_cached_begin): New member variable.
186 (views::filter_view::begin): Use _M_cached_begin to cache its
187 result.
188 (views::drop_view::_S_needs_cached_begin): New static member variable.
189 (views::drop_view::_M_cached_begin): New member variable.
190 (views::drop_view::begin): Use _M_cached_begin to cache its result
191 when _S_needs_cached_begin.
192 (views::drop_while_view::_M_cached_begin): New member variable.
193 (views::drop_while_view::begin): Use _M_cached_begin to cache its
194 result.
195 (views::reverse_view::_S_needs_cached_begin): New static member
196 variable.
197 (views::reverse_view::_M_cached_begin): New member variable.
198 (views::reverse_view::begin): Use _M_cached_begin to cache its result
199 when _S_needs_cached_begin.
200 * testsuite/std/ranges/adaptors/drop.cc: Augment test to check that
201 drop_view::begin caches its result.
202 * testsuite/std/ranges/adaptors/drop_while.cc: Augment test to check
203 that drop_while_view::begin caches its result.
204 * testsuite/std/ranges/adaptors/filter.cc: Augment test to check that
205 filter_view::begin caches its result.
206 * testsuite/std/ranges/adaptors/reverse.cc: Augment test to check that
207 reverse_view::begin caches its result.
208
86e2dc22
JW
2092020-02-28 Jonathan Wakely <jwakely@redhat.com>
210
a51a546c
JW
211 * testsuite/27_io/filesystem/operations/last_write_time.cc: Fixes for
212 filesystems that silently truncate timestamps.
213 * testsuite/experimental/filesystem/operations/last_write_time.cc:
214 Likewise.
215
86e2dc22
JW
216 * testsuite/21_strings/basic_string/cons/char/1.cc: Disable
217 -Wstringop-overflow warnings.
218
44949494
JW
2192020-02-27 Jonathan Wakely <jwakely@redhat.com>
220
221 * testsuite/lib/libstdc++.exp (v3_target_compile): Add
222 -fdiagnostics-urls=never to options.
223
10a32d47
PP
2242020-02-27 Patrick Palka <ppalka@redhat.com>
225
ba49e9eb
PP
226 * include/std/ranges (transform_view::_Iterator<_Const>): Befriend
227 _Iterator<!_Const>.
228 (transform_view::_Sentinel<_Const>): Befriend _Sentinel<!_Const>.
229 (take_view::_Sentinel<_Const>): Likewise.
230 (take_while_view::_Sentinel<_Const>): Likewise.
231 (split_view::_OuterIter<_Const>): Befriend _OuterIter<!_Const>.
232 * testsuite/std/ranges/adaptors/split.cc: Augment test.
233 * testsuite/std/ranges/adaptors/take.cc: Augment test.
234 * testsuite/std/ranges/adaptors/take_while.cc: Augment test.
235 * testsuite/std/ranges/adaptors/transform.cc: Augment test.
236
10a32d47
PP
237 * testsuite/25_algorithms/copy/constrained.cc: Don't assume that the
238 base() of a vector<>::iterator is a pointer.
239 * testsuite/25_algorithms/copy_backward/constrained.cc: Likewise.
240 * testsuite/25_algorithms/move/constrained.cc: Likewise.
241 * testsuite/25_algorithms/move_backward/constrained.cc: Likewise.
242 * testsuite/25_algorithms/inplace_merge/constrained.cc: Use foo.data()
243 instead of &foo[0].
244 * testsuite/25_algorithms/partial_sort/constrained.cc: Likewise.
245 * testsuite/25_algorithms/partial_sort_copy/constrained.cc: Likewise.
246 * testsuite/25_algorithms/shuffle/constrained.cc: Likewise.
247 * testsuite/25_algorithms/sort/constrained.cc: Likewise.
248 * testsuite/25_algorithms/stable_sort/constrained.cc: Likewise.
249
eb8e6a30
JW
2502020-02-27 Jonathan Wakely <jwakely@redhat.com>
251
ae705159
JW
252 * include/debug/array (operator<=>): Define for C++20.
253 * testsuite/23_containers/array/tuple_interface/get_debug_neg.cc:
254 Adjust dg-error line numbers.
255 * testsuite/23_containers/array/tuple_interface/
256 tuple_element_debug_neg.cc: Likewise.
257
b112e3cb
JW
258 * testsuite/23_containers/span/back_assert_neg.cc: Add #undef before
259 defining _GLIBCXX_ASSERTIONS.
260 * testsuite/23_containers/span/first_2_assert_neg.cc: Likewise.
261 * testsuite/23_containers/span/first_assert_neg.cc: Likewise.
262 * testsuite/23_containers/span/front_assert_neg.cc: Likewise.
263 * testsuite/23_containers/span/index_op_assert_neg.cc: Likewise.
264 * testsuite/23_containers/span/last_2_assert_neg.cc: Likewise.
265 * testsuite/23_containers/span/last_assert_neg.cc: Likewise.
266 * testsuite/23_containers/span/subspan_2_assert_neg.cc: Likewise.
267 * testsuite/23_containers/span/subspan_3_assert_neg.cc: Likewise.
268 * testsuite/23_containers/span/subspan_4_assert_neg.cc: Likewise.
269 * testsuite/23_containers/span/subspan_5_assert_neg.cc: Likewise.
270 * testsuite/23_containers/span/subspan_6_assert_neg.cc: Likewise.
271 * testsuite/23_containers/span/subspan_assert_neg.cc: Likewise.
272
f32a3662
JW
273 * include/debug/string (__gnu_debug::basic_string::insert): Fix for
274 C++98 where the member function of the base class returns void.
275
e94f2542
JW
276 * testsuite/util/testsuite_iterators.h (forward_iterator_wrapper): Add
277 equality comparisons that support value-initialized iterators.
278
eb8e6a30
JW
279 * include/bits/boost_concept_check.h (__function_requires): Add
280 _GLIBCXX14_CONSTEXPR.
281 * testsuite/25_algorithms/min/concept_checks.cc: New test.
282
fd335985
PP
2832020-02-26 Patrick Palka <ppalka@redhat.com>
284
8ce13842
PP
285 PR libstdc++/93936
286 * include/std/ranges (split_view::_InnerIter::operator==): Compare
287 the operands' _M_i rather than their _M_i.current().
288 * testsuite/std/ranges/adaptors/split.cc: Augment test.
289
fd335985
PP
290 P1645R1 constexpr for <numeric> algorithms
291 * include/bits/stl_numeric.h (iota, accumulate, inner_product,
292 partial_sum, adjacent_difference): Make conditionally constexpr for
293 C++20.
294 * include/std/numeric (__cpp_lib_constexpr_numeric): Define this feature
295 test macro.
296 (reduce, transform_reduce, exclusive_scan, inclusive_scan,
297 transform_exclusive_scan, transform_inclusive_scan): Make conditionally
298 constexpr for C++20.
299 * include/std/version (__cpp_lib_constexpr_numeric): Define.
300 * testsuite/26_numerics/accumulate/constexpr.cc: New test.
301 * testsuite/26_numerics/adjacent_difference/constexpr.cc: Likewise.
302 * testsuite/26_numerics/exclusive_scan/constexpr.cc: Likewise.
303 * testsuite/26_numerics/inclusive_scan/constexpr.cc: Likewise.
304 * testsuite/26_numerics/inner_product/constexpr.cc: Likewise.
305 * testsuite/26_numerics/iota/constexpr.cc: Likewise.
306 * testsuite/26_numerics/partial_sum/constexpr.cc: Likewise.
307 * testsuite/26_numerics/reduce/constexpr.cc: Likewise.
308 * testsuite/26_numerics/transform_exclusive_scan/constexpr.cc: Likewise.
309 * testsuite/26_numerics/transform_inclusive_scan/constexpr.cc: Likewise.
310 * testsuite/26_numerics/transform_reduce/constexpr.cc: Likewise.
311
8017d95c
JW
3122020-02-26 Jonathan Wakely <jwakely@redhat.com>
313
113f0a63
JW
314 * include/bits/ranges_algo.h (__lexicographical_compare_fn): Declare
315 variables in smaller scope and avoid calling ranges::distance when we
316 know they are pointers. Remove statically-unreachable use of
317 __builtin_unreachable().
318 * include/bits/stl_algobase.h (__lexicographical_compare::__lc):
319 Define inline.
320
8017d95c
JW
321 * include/std/ranges (__detail::__maybe_empty_t): Define new helper
322 alias.
323 (__detail::__maybe_const_t): Likewise.
324 (__adaptor::_RangeAdaptor): Use __maybe_empty_t.
325 (transform_view, take_view, take_while_view, elements_view): Use
326 __maybe_const_t.
327 (join_view, split_view): Use both.
328
7f0f1083
PP
3292020-02-25 Patrick Palka <ppalka@redhat.com>
330
76a8c0f6
PP
331 LWG 3397 basic_istream_view::iterator should not provide
332 iterator_category
333 * include/std/ranges (basic_istream_view:_Iterator::iterator_category):
334 Rename to ...
335 (basic_istream_view:_Iterator::iterator_concept): ... this.
336 * testsuite/std/ranges/istream_view.cc: Augment test.
337
ec15da7c
PP
338 LWG 3325 Constrain return type of transformation function for
339 transform_view
340 * include/std/ranges (transform_view): Constrain the return type of the
341 transformation function as per LWG 3325.
342 * testsuite/std/ranges/adaptors/lwg3325_neg.cc: New test.
343
55c4b3f4
PP
344 LWG 3313 join_view::_Iterator::operator-- is incorrectly constrained
345 * include/std/ranges (join_view::_Iterator::operator--): Require that
346 range_reference_t<_Base> models common_range.
347 * testsuite/std/ranges/adaptors/lwg3313_neg.cc: New test.
348
510bd1c1
PP
349 LWG 3301 transform_view::_Iterator has incorrect iterator_category
350 * include/std/ranges (transform_view::_Iterator::_S_iter_cat): Adjust
351 determination of iterator_category as per LWG 3301.
352 * testsuite/std/ranges/adaptors/transform.cc: Augment test.
353
7f0f1083
PP
354 LWG 3292 iota_view is under-constrained
355 * include/std/ranges (iota_view): Require that _Winc models semiregular
356 as per LWG 3292.
357 * testsuite/std/ranges/iota/lwg3292_neg.cc: New test.
358
dfb93d05 3592020-02-25 Jonathan Wakely <jwakely@redhat.com>
5b904f17 360
490350a1
JW
361 * include/bits/ranges_algobase.h (__copy_or_move): Do not use memmove
362 during constant evaluation. Call __builtin_memmove directly instead of
363 __memmove.
364 (__copy_or_move_backward): Likewise.
365 * include/bits/stl_algobase.h (__memmove): Remove.
366 (__copy_move<M, true, random_access_iterator_tag>::__copy_m)
367 (__copy_move_backward<M, true, random_access_iterator_tag>::__copy_m):
368 Use __builtin_memmove directly instead of __memmove.
369 (__copy_move_a2): Do not use memmove during constant evaluation.
370 (__copy_move_backward_a2): Use _IsMove constant to select correct
371 __copy_move_backward specialization.
372 * testsuite/25_algorithms/copy_backward/constexpr.cc: Check for copies
373 begin turned into moves during constant evaluation.
374
6de946e6
JW
375 * testsuite/25_algorithms/move_backward/93872.cc: Add test left out of
376 previous commit.
377
5b904f17
JW
378 PR libstdc++/93872
379 * include/bits/stl_algobase.h (__memmove): Cast away const before
380 doing move assignment.
381 * testsuite/25_algorithms/move/93872.cc: New test.
382 * testsuite/25_algorithms/move_backward/93872.cc: New test.
383
c5eab4ed
PP
3842020-02-24 Patrick Palka <ppalka@redhat.com>
385
85c143d0
PP
386 PR libstdc++/93884
387 * include/bits/ranges_algobase.h (__copy_or_move,
388 __copy_or_move_backward): Don't inspect the iter_value_t of the output
389 iterator, instead inspect its iterator_traits directly.
390 * include/bits/stl_iterator.h (back_insert_iterator::container):
391 Conditionally initialize.
392 (back_insert_iterator::difference_type): Conditionally define.
393 (back_insert_iterator::back_insert_iterator): Conditionally define this
394 default constructor.
395 (front_insert_iterator::container): Conditionally initialize.
396 (front_insert_iterator::difference_type): Conditionally define.
397 (front_insert_iterator::front_insert_iterator): Conditionally define
398 this default constructor.
399 * 24_iterators/back_insert_iterator/pr93884.cc: New test.
400 * 24_iterators/front_insert_iterator/pr93884.cc: New test.
401
c5eab4ed
PP
402 P0769R2 Add shift to <algorithm>
403 * include/bits/ranges_algo.h (shift_left, shift_right): New.
404 * testsuite/25_algorithms/shift_left/1.cc: New test.
405 * testsuite/25_algorithms/shift_right/1.cc: New test.
406
3841739c
JW
4072020-02-24 Jonathan Wakely <jwakely@redhat.com>
408
8566286e
JW
409 * include/bits/stream_iterator.h (istream_iterator(default_sentinel_t)):
410 Make noexcept-specifier conditional.
411 * testsuite/24_iterators/istream_iterator/cons/sentinel.cc: Check
412 noexcept-specifier.
413
120e8734
JW
414 * include/bits/stream_iterator.h (istream_iterator(default_sentinel_t)):
415 Add constructor.
416 (operator==(istream_iterator, default_sentinel_t)): Add operator.
417 (ostream_iterator::difference_type): Define to ptrdiff_t for C++20.
418 * include/bits/streambuf_iterator.h
419 (istreambuf_iterator(default_sentinel_t)): Add constructor.
420 (operator==(istreambuf_iterator, default_sentinel_t)): Add operator.
421 * testsuite/24_iterators/istream_iterator/cons/sentinel.cc:
422 New test.
423 * testsuite/24_iterators/istream_iterator/sentinel.cc: New test.
424 * testsuite/24_iterators/istreambuf_iterator/cons/sentinel.cc:
425 New test.
426 * testsuite/24_iterators/istreambuf_iterator/sentinel.cc: New test.
427
3841739c
JW
428 * include/std/ranges (__deep_const_range, __enable_view_impl): Remove.
429 (ranges::enable_view): Simplify (LWG 3326).
430 * include/bits/range_access.h (ranges::enable_view): Declare.
431 * include/bits/regex.h (__enable_view_impl): Remove partial
432 specialization.
433 * include/bits/stl_multiset.h (__enable_view_impl): Likewise.
434 * include/bits/stl_set.h (__enable_view_impl): Likewise.
435 * include/bits/unordered_set.h (__enable_view_impl): Likewise.
436 * include/debug/multiset.h (__enable_view_impl): Likewise.
437 * include/debug/set.h (__enable_view_impl): Likewise.
438 * include/debug/unordered_set (__enable_view_impl): Likewise.
439 * include/experimental/string_view (ranges::enable_view): Define
440 partial specialization.
441 * include/std/span (ranges::enable_view): Likewise.
442 * include/std/string_view (ranges::enable_view): Likewise.
443 * testsuite/std/ranges/view.cc: Check satisfaction of updated concept.
444
9e589880
JW
4452020-02-21 Jonathan Wakely <jwakely@redhat.com>
446
447 * include/std/optional (operator<=>(optional<T>, optional<U>))
448 (operator<=>(optional<T>, nullopt), operator<=>(optional<T>, U)):
449 Define for C++20.
450 * include/std/tuple (__tuple_cmp): New helper function for <=>.
451 (operator<=>(tuple<T...>, tuple<U>...)): Define for C++20.
452 * include/std/variant (operator<=>(variant<T...>, variant<T...>))
453 (operator<=>(monostate, monostate)): Define for C++20.
454 * testsuite/20_util/optional/relops/three_way.cc: New test.
455 * testsuite/20_util/tuple/comparison_operators/three_way.cc: New test.
456 * testsuite/20_util/variant/89851.cc: Move to ...
457 * testsuite/20_util/variant/relops/89851.cc: ... here.
458 * testsuite/20_util/variant/90008.cc: Move to ...
459 * testsuite/20_util/variant/relops/90008.cc: ... here.
460 * testsuite/20_util/variant/relops/three_way.cc: New test.
461
5586e506
PP
4622020-02-20 Patrick Palka <ppalka@redhat.com>
463
6e63438a
PP
464 * include/std/ranges (views::__adaptor::__maybe_refwrap): New utility
465 function.
466 (views::__adaptor::_RangeAdaptor::operator()): Add comments. Use
467 __maybe_refwrap to capture lvalue references by reference, and then use
468 unwrap_reference_t to forward the by-reference captures as references.
469 * testsuite/std/ranges/adaptors/split.cc: Augment test.
470 * testsuite/std/ranges/adaptors/split_neg.cc: New test.
471
5586e506
PP
472 * include/std/ranges (iota_view): Forward declare _Sentinel.
473 (iota_view::_Iterator): Befriend _Sentinel.
474 (iota_view::_Sentinel::_M_equal): New member function.
475 (iota_view::_Sentinel::operator==): Use it.
476 (views::_Iota::operator()): Forward __f using the correct type.
477 * testsuite/std/ranges/access/ssize.cc (test06): Don't call views::iota
478 with integers of different signedness, to appease iota_view's deduction
479 guide.
480 * testsuite/std/ranges/iota/iota_view.cc: Augment test.
481
c7b591f3
JW
4822020-02-20 Jonathan Wakely <jwakely@redhat.com>
483
e817c23f
JW
484 * include/bits/range_access.h (ranges::begin): Reject array of
485 incomplete type.
486 (ranges::end, ranges::size): Require arrays to be bounded.
487 (ranges::data): Require lvalue or borrowed_range.
488 (ranges::iterator_t): Remove constraint.
489 * testsuite/std/ranges/access/begin.cc: Do not check array of
490 incomplete type.
491 * testsuite/std/ranges/access/begin_neg.cc: New test.
492 * testsuite/std/ranges/access/end_neg.cc: Adjust expected error.
493 * testsuite/std/ranges/access/size_neg.cc: Adjust expected error.
494 * testsuite/std/ranges/access/ssize.cc: Do not check array of
495 incomplete type.
496
4be779f5
JW
497 * include/std/system_error (error_category::operator<=>)
498 (operator<=>(const error_code&, const error_code&))
499 (operator<=>(const error_condition&, const error_condition&)): Define
500 for C++20.
501 * testsuite/19_diagnostics/error_category/operators/less.cc: New test.
502 * testsuite/19_diagnostics/error_category/operators/three_way.cc: New
503 test.
504 * testsuite/19_diagnostics/error_code/operators/equal.cc: Remove
505 incorrect comment.
506 * testsuite/19_diagnostics/error_code/operators/less.cc: New test.
507 * testsuite/19_diagnostics/error_code/operators/not_equal.cc: Remove
508 incorrect comment.
509 * testsuite/19_diagnostics/error_code/operators/three_way.cc: New test.
510 * testsuite/19_diagnostics/error_condition/operators/equal.cc: Remove
511 incorrect comment.
512 * testsuite/19_diagnostics/error_condition/operators/less.cc: New test.
513 * testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
514 Remove incorrect comment.
515 * testsuite/19_diagnostics/error_condition/operators/three_way.cc: New
516 test.
517
20fa41e6
JW
518 * libsupc++/typeinfo (type_info::operator!=): Remove for C++20.
519
c7b591f3
JW
520 * include/std/thread (thread::id::operator<=>): Define for C++20.
521 * testsuite/30_threads/thread/id/70294.cc: Do not take addresses of
522 functions in namespace std.
523 * testsuite/30_threads/thread/id/operators_c++20.cc: New test.
524
38c7b74d
PP
5252020-02-19 Patrick Palka <ppalka@redhat.com>
526
527 * testsuite/std/ranges/adaptors/split.cc (test03): Don't include the
528 null terminator of the underlying string as part of the test_range.
529 (main): Call test03.
530
a45fb21a
JW
5312020-02-19 Jonathan Wakely <jwakely@redhat.com>
532
1b425f3a
JW
533 * include/bits/stl_iterator.h (common_iterator): Add copyable<I>
534 requirement (LWG 3385).
535 * testsuite/24_iterators/headers/iterator/synopsis_c++20.cc: Adjust
536 expected declaration.
537
7433536b
JW
538 * include/std/ranges (take_while_view, drop_view, drop_while_view)
539 (elements_view:_Iterator): Initialize data members (LWG 3364).
540
256f67aa
JW
541 * libsupc++/compare (three_way_comparable): Remove always-false check
542 that should have been removed with weak_equality (P1959R0).
543 (three_way_comparable_with): Likewise. Reorder requirements (LWG 3360).
544
0294dc5f
JW
545 * include/std/concepts (__detail::__partially_ordered_with): Move here
546 from <compare>.
547 (totally_ordered, totally_ordered_with): Use __partially_ordered_with
548 to simplify definition (LWG 3331).
549 * libsupc++/compare (__detail::__partially_ordered_with): Move to
550 <concepts>.
551
241ed965
JW
552 * include/std/concepts (totally_ordered_with): Remove redundant
553 requirement (LWG 3329).
554
77f5310f
JW
555 * include/std/ranges (__detail::__convertible_to_non_slicing): New
556 helper concept.
557 (__detail::__pair_like_convertible_to): Remove.
558 (__detail::__pair_like_convertible_from): Add requirements for
559 non-slicing conversions.
560 (subrange): Constrain constructors with __convertible_to_non_slicing.
561 Remove constructors from pair-like types. Add new deduction guide.
562 * testsuite/std/ranges/subrange/lwg3282_neg.cc: New test.
563
59aa9e57
JW
564 * include/bits/iterator_concepts.h (iter_move): Add declaration to
565 prevent unqualified lookup finding a suitable declaration (LWG 3247).
566
e89100ef
JW
567 * include/std/memory_resource (polymorphic_allocator::allocate)
568 (polymorphic_allocator::allocate_object): Change type of exception to
569 bad_array_new_length (LWG 3237).
570 * testsuite/20_util/polymorphic_allocator/lwg3237.cc: New test.
571
bb54e0b8
JW
572 * include/std/type_traits (__cpp_lib_unwrap_ref): Define (LWG 3348).
573 * include/std/version (__cpp_lib_unwrap_ref): Likewise.
574 * testsuite/20_util/unwrap_reference/1.cc: Check macro.
575 * testsuite/20_util/unwrap_reference/3.cc: New test.
576
5f031f97
JW
577 * include/std/numeric (midpoint(T8, T*)): Do not check for complete
578 type during overload resolution, use static assert instead (LWG 3200).
579 * testsuite/26_numerics/midpoint/pointer.cc: Do not test with
580 incomplete type.
581 * testsuite/26_numerics/midpoint/pointer_neg.cc: New test.
582
66ae31eb
JW
583 * include/std/span (span(T (&)[N])): Use non-deduced context to
584 prevent first parameter from interfering with class template argument
585 deduction (LWG 3369).
586 * testsuite/23_containers/span/deduction.cc: Add missing 'const'.
587 * testsuite/23_containers/span/lwg3255.cc: Check for construction from
588 rvalues.
589
247f410b
JW
590 * include/std/span (span::const_iterator, span::const_reverse_iterator)
591 (span::cbegin(), span::cend(), span::crbegin(), span::crend()):
592 Remove (LWG 3320).
593 * testsuite/23_containers/span/everything.cc: Replace uses of cbegin
594 and cend.
595 * testsuite/20_util/specialized_algorithms/destroy/constrained.cc:
596 Likewise.
597 * testsuite/20_util/specialized_algorithms/uninitialized_copy/
598 constrained.cc: Likewise.
599 * testsuite/20_util/specialized_algorithms/
600 uninitialized_default_construct/constrained.cc: Likewise.
601 * testsuite/20_util/specialized_algorithms/uninitialized_fill/
602 constrained.cc: Likewise.
603 * testsuite/20_util/specialized_algorithms/uninitialized_move/
604 constrained.cc: Likewise.
605 * testsuite/20_util/specialized_algorithms/
606 uninitialized_value_construct/constrained.cc: Likewise.
607
aca60ecf
JW
608 * include/bits/range_access.h (range_size_t): Define alias template.
609 * include/std/ranges (all_view): Rename to views::all_t (LWG 3335).
610 * testsuite/std/ranges/adaptors/filter.cc: Adjust to new name.
611
4cc3b275
JW
612 * include/std/ranges (filter_view, transform_view, take_view)
613 (join_view, split_view, reverse_view): Remove commented-out converting
614 constructors (LWG 3280).
615
5f3641d0
JW
616 * include/std/memory (uninitialized_construct_using_allocator): Use
617 std::construct_at (LWG 3321).
618
020a03ee
JW
619 * include/std/memory_resource (polymorphic_allocator::allocate_bytes)
620 (polymorphic_allocator::allocate_object)
621 (polymorphic_allocator::new_object): Add nodiscard attribute (LWG3304).
622
15411a64
JW
623 LWG 3379. "safe" in several library names is misleading
624 * include/bits/range_access.h (enable_safe_range): Rename to
625 enable_borrowed_range.
626 (__detail::__maybe_safe_range): Rename to __maybe_borrowed_range.
627 (safe_range): Rename to borrowed_range.
628 * include/bits/ranges_algo.h: Adjust to use new names.
629 * include/bits/ranges_algobase.h: Likewise.
630 * include/bits/ranges_uninitialized.h: Likewise.
631 * include/std/ranges: Likewise.
632 (safe_iterator_t): Rename to borrowed_iterator_t.
633 (safe_subrange_t): Rename to borrowed_subrange_t.
634 * include/std/span: Adjust to use new names.
635 * include/std/string_view: Likewise.
636 * include/experimental/string_view: Likewise.
637 * testsuite/std/ranges/access/begin.cc: Likewise.
638 * testsuite/std/ranges/access/cbegin.cc: Likewise.
639 * testsuite/std/ranges/access/cdata.cc: Likewise.
640 * testsuite/std/ranges/access/cend.cc: Likewise.
641 * testsuite/std/ranges/access/crbegin.cc: Likewise.
642 * testsuite/std/ranges/access/crend.cc: Likewise.
643 * testsuite/std/ranges/access/data.cc: Likewise.
644 * testsuite/std/ranges/access/end.cc: Likewise.
645 * testsuite/std/ranges/access/rbegin.cc: Likewise.
646 * testsuite/std/ranges/access/rend.cc: Likewise.
647 * testsuite/std/ranges/safe_range.cc: Likewise.
648 * testsuite/std/ranges/safe_range_types.cc: Likewise.
649 * testsuite/util/testsuite_iterators.h: Likewise.
650
fa89adaa
JW
651 * include/std/ranges (tuple_element<0, const subrange<I, S, K>>)
652 (tuple_element<1, const subrange<I, S, K>>): Add partial
653 specializations (LWG 3398).
654 * testsuite/std/ranges/subrange/tuple_like.cc: New test.
655
a45fb21a
JW
656 * include/bits/ranges_algo.h (__find_fn, __find_first_of_fn)
657 (__adjacent_find_fn, __remove_if_fn, __remove_copy_if_fn)
658 (__unique_fn, __unique_copy_fn): Remove redundant conversions to bool.
659
242b4fb7
PP
6602020-02-18 Patrick Palka <ppalka@redhat.com>
661
662 P1983R0 Wording for GB301, US296, US292, US291, and US283
663 * include/std/ranges (filter_view::pred): New member function.
664 (join_view::_Iterator::_Iterator): Remove now-redundant comment since
665 P1983R0 fixes the highlighted issue in the same way.
666 (join_view::_Iterator<_Const>): Add friend
667 join_view::_Iterator<!_Const>.
668 (join_view::_M_inner): Remove mutable specifier, effectively reverting
669 the proposed wording changes of P3278.
670 (join_view::begin): Refine the condition for when to return a const
671 iterator.
672 (split_view::_OuterIter::_OuterIter): Adjust constraints.
673 * testsuite/std/ranges/adaptors/filter.cc: Test that filter_view::pred
674 exists and works.
675
f5b4dc38
JW
6762020-02-18 Jonathan Wakely <jwakely@redhat.com>
677
a5b213dd
JW
678 PR libstdc++/93818
679 * include/std/ranges (_RangeAdaptor): Add deduction guide.
680 (filter_view::_Iterator): Add alias _Vp_iter and use in place of
681 iterator_t<_Vp>.
682 (filter_view::_Iterator::_S_iter_cat()): Add 'typename'.
683 (transform_view::_Iterator): Add alias _Base_iter and use in place of
684 iterator_t<_Base>.
685 (transform_view::_Iterator::_S_iter_cat()): Add 'typename'.
686 (join_view::_Iterator): Add _Outer_iter and _Inner_iter aliases.
687 (join_view::_Iterator::_S_iter_cat()): Add 'typename'.
688 (split_view::_InnerIter::_S_iter_cat()): Likewise.
689
ce7b39d0
JW
690 * testsuite/20_util/integer_comparisons/equal.cc: Fix invalid
691 assumption that long is wider than int.
692 * testsuite/20_util/integer_comparisons/greater_equal.cc: Likewise.
693 * testsuite/20_util/integer_comparisons/less.cc: Likewise.
694 * testsuite/20_util/integer_comparisons/less_equal.cc: Likewise.
695 * testsuite/20_util/integer_comparisons/not_equal.cc: Likewise.
696
9b8e2dea
JW
697 P1976R2 Fixed-size span construction from dynamic range
698 * include/std/span (__cpp_lib_span): Update value.
699 (span(It, size_type), span(It, End)): Make conditionally explicit. Add
700 assertion.
701 (span(R&&), span(const span<OType, OExtent>&)): Likewise and relax
702 constraints.
703 (span::first<Count>(), span::last<Count>()): Use explicit type in
704 return statement.
705 (as_bytes, as_writable_bytes): Likewise.
706 * include/std/version (__cpp_lib_span): Update value.
707 * testsuite/23_containers/span/1.cc: Check new value.
708 * testsuite/23_containers/span/2.cc: Check new value.
709 * testsuite/23_containers/span/explicit.cc: New test.
710
d6c9e372
JW
711 * include/std/span (span::__is_compatible_array): Simplify alias
712 template by using requires-clause.
713 (span::__is_compatible_ref): New alias template for constraining
714 constructors.
715 (span::__is_compatible_iterator, span::__is_compatible_range): Remove.
716 (span(It, size_type), span(It, End)): Use __is_compatible_ref.
717 (span(T(&)[N], span(array<T, N>&), span(const array<T, N>&)): Remove
718 redundant parentheses.
719 (span(R&&)): Add missing constraints.
720
f09f3242
JW
721 * include/std/span (span): Reorder members and rename template
722 parameters to match declarations in the C++2a working paper.
723
f5b4dc38
JW
724 P2116R0 Remove tuple-like protocol support from fixed-extent span
725 * include/std/span (get, tuple_size, tuple_element): Remove.
726 * testsuite/23_containers/span/everything.cc: Remove checks for
727 tuple-like API.
728 * testsuite/23_containers/span/get_neg.cc: Remove.
729 * testsuite/23_containers/span/tuple_element_dynamic_neg.cc: Remove.
730 * testsuite/23_containers/span/tuple_element_oob_neg.cc: Remove.
731 * testsuite/23_containers/span/tuple_size_neg.cc: Remove.
732
f3169941
PP
7332020-02-17 Patrick Palka <ppalka@redhat.com>
734
aa667c3f
PP
735 P2106R0 Alternative wording for GB315 and GB316
736 * include/bits/ranges_algo.h (in_fun_result): New.
737 (for_each_result, for_each_n_result): Change into an alias of
738 in_fun_result.
739 (in_in_result): New.
740 (mismatch_result): Change into an alias of in_in_result.
741 (copy_if_result): Change into an alias of in_out_result.
742 (swap_ranges_result): Change into an alias of in_in_result.
743 (unary_transform_result): Change into an alias of in_out_result.
744 (in_in_out_result): New.
745 (binary_transform_result): Change into an alias of in_in_out_result.
746 (replace_copy_result, replace_copy_if_result, remove_copy_if_result,
747 remove_copy_result, unique_copy_result, reverse_copy_result,
748 rotate_copy_result, partial_sort_copy_result): Change into an alias of
749 in_out_result.
750 (in_out_out_result): New.
751 (partition_copy_result, merge_result): Change into an alias of
752 in_out_out_result.
753 (set_union_result, set_intersection_result): Change into an alias of
754 in_in_out_result.
755 (set_difference_result): Change into an alias of in_out_result.
756 (set_symmetric_difference): Change into an alias of in_in_out_result.
757 (min_max_result): New.
758 (minmax_result, minmax_element_result): Change into an alias of
759 min_max_result.
760 (in_found_result): New.
761 (next_permutation_result, prev_permutation_result): Change into an alias
762 of in_found_result.
763 (__next_permutation_fn::operator(), __prev_permutation_fn::operator()):
764 Adjust following changes to next_permutation_result and
765 prev_permutation_result.
766 * include/bits/ranges_algobase.h (in_out_result): New.
767 (copy_result, move_result, move_backward_result, copy_backward_result,
768 copy_n_result): Change into an alias of in_out_result.
769 * include/bits/ranges_uninitialized.h (uninitialized_copy_result,
770 uninitialized_copy_n_result, uninitialized_move_result,
771 uninitialized_move_n_result): Likewise.
772 * testsuite/25_algorithms/next_permutation/constrained.cc: Adjust uses of
773 structured bindings.
774 * testsuite/25_algorithms/prev_permutation/constrained.cc: Likewise.
775
f3169941
PP
776 P1243R4 Rangify new algorithms
777 * include/bits/ranges_algo.h (for_each_n_result, __for_each_n_fn,
778 for_each_n, __sample_fn, sample, __clamp_fn, clamp): New.
779 * testsuite/25_algorithms/clamp/constrained.cc: New test.
780 * testsuite/25_algorithms/for_each/constrained.cc: Augment test.
781 * testsuite/25_algorithms/sample/constrained.cc: New test.
782
98cf2c26
JW
7832020-02-17 Jonathan Wakely <jwakely@redhat.com>
784
c5e1c1d3
JW
785 P1964R2 Wording for boolean-testable
786 * include/bits/ranges_algo.h (__find_fn, __find_first_of_fn)
787 (__adjacent_find_fn): Cast result of predicate to bool.
788 * include/std/concepts (__boolean): Remove.
789 (__detail::__boolean_testable_impl, __detail::__boolean_testable): Add
790 new helper concepts.
791 (__detail::__weakly_eq_cmp_with, totally_ordered, totally_ordered_with)
792 (predicate): Use __boolean_testable instead of boolean.
793 * libsupc++/compare (__detail::__partially_ordered, _Synth3way):
794 Likewise.
795
7ab36231
JW
796 P1970R2 Consistency for size() functions: Add ranges::ssize
797 * include/bits/range_access.h (_SSize, ssize): Define for C++20.
798 * testsuite/std/ranges/access/ssize.cc: New test.
799
9866abe3
JW
800 P1956R1 On the names of low-level bit manipulation functions
801 * include/bits/hashtable_policy.h: Update comment.
802 * include/std/bit (__ispow2, __ceil2, __floor2, __log2p1): Rename.
803 (ispow2, ceil2, floor2, log2p1): Likewise.
804 (__cpp_lib_int_pow2): Add feature test macro.
805 * include/std/charconv (__to_chars_len_2): Adjust use of __log2p1.
806 * include/std/memory (assume_aligned): Adjust use of ispow2.
807 * include/std/version (__cpp_lib_int_pow2): Add.
808 * libsupc++/new_opa.cc: Adjust use of __ispow2.
809 * src/c++17/memory_resource.cc: Likewise, and for __ceil2 and __log2p1.
810 * testsuite/17_intro/freestanding.cc: Adjust use of ispow2.
811 * testsuite/26_numerics/bit/bit.pow.two/ceil2.cc: Rename to ...
812 * testsuite/26_numerics/bit/bit.pow.two/bit_ceil.cc: ... here.
813 * testsuite/26_numerics/bit/bit.pow.two/ceil2_neg.cc: Rename to ...
814 * testsuite/26_numerics/bit/bit.pow.two/bit_ceil_neg.cc: ... here.
815 * testsuite/26_numerics/bit/bit.pow.two/floor2.cc: Rename to ...
816 * testsuite/26_numerics/bit/bit.pow.two/bit_floor.cc: ... here.
817 * testsuite/26_numerics/bit/bit.pow.two/log2p1.cc: Rename to ...
818 * testsuite/26_numerics/bit/bit.pow.two/bit_width.cc: ... here.
819 * testsuite/26_numerics/bit/bit.pow.two/ispow2.cc: Rename to ...
820 * testsuite/26_numerics/bit/bit.pow.two/has_single_bit.cc: ... here.
821
cfbc8fbb
JW
822 * include/std/charconv: Add comment.
823
9cd4eeef
JW
824 PR libstdc++/92546 (partial)
825 * include/bits/random.h (uniform_random_bit_generator): Move definition
826 to <bits/uniform_int_dist.h>.
827 * include/bits/ranges_algo.h: Include <bits/uniform_int_dist.h> instead
828 of <bits/random.h>.
829 * include/bits/ranges_algobase.h: Do not include <cmath>.
830 * include/bits/uniform_int_dist.h (uniform_random_bit_generator):
831 Move here.
832 * include/std/ranges: Do not include <limits>.
833 * testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error lineno.
834
c03b53da
JW
835 PR libstdc++/92546 (partial)
836 * include/Makefile.am: Add new header.
837 * include/Makefile.in: Regenerate.
838 * include/bits/int_limits.h: New header.
839 * include/bits/parse_numbers.h (__select_int::_Select_int): Replace
840 numeric_limits with __detail::__int_limits.
841 * include/std/bit (__rotl, __rotr, __countl_zero, __countl_one)
842 (__countr_zero, __countr_one, __popcount, __ceil2, __floor2, __log2p1):
843 Likewise.
844 * include/std/charconv (__to_chars_8, __from_chars_binary)
845 (__from_chars_alpha_to_num, from_chars): Likewise.
846 * include/std/memory_resource (polymorphic_allocator::allocate)
847 (polymorphic_allocator::allocate_object): Likewise.
848 * include/std/string_view (basic_string_view::_S_compare): Likewise.
849 * include/std/utility (in_range): Likewise.
850 * testsuite/20_util/integer_comparisons/in_range_neg.cc: Adjust for
851 extra error about incomplete type __int_limits<bool>.
852 * testsuite/26_numerics/bit/bit.count/countl_one.cc: Include <limits>.
853 * testsuite/26_numerics/bit/bit.count/countl_zero.cc: Likewise.
854 * testsuite/26_numerics/bit/bit.count/countr_one.cc: Likewise.
855 * testsuite/26_numerics/bit/bit.count/countr_zero.cc: Likewise.
856 * testsuite/26_numerics/bit/bit.count/popcount.cc: Likewise.
857 * testsuite/26_numerics/bit/bit.pow.two/ceil2_neg.cc: Likewise.
858 * testsuite/26_numerics/bit/bit.pow.two/ceil2.cc: Likewise.
859 * testsuite/26_numerics/bit/bit.pow.two/floor2.cc: Likewise.
860 * testsuite/26_numerics/bit/bit.pow.two/ispow2.cc: Likewise.
861 * testsuite/26_numerics/bit/bit.pow.two/log2p1.cc: Likewise.
862 * testsuite/26_numerics/bit/bit.rotate/rotl.cc: Likewise.
863 * testsuite/26_numerics/bit/bit.rotate/rotr.cc: Likewise.
864
4540ef78
JW
865 * python/libstdcxx/v6/printers.py (StdCmpCatPrinter.to_string): Update
866 value for partial_ordering::unordered.
867
d6dfa3da
JW
868 * include/bits/iterator_concepts.h (indirectly_copyable_storable): Add
869 const-qualified expression variations.
870 * include/std/concepts (copyable): Likewise.
871
98cf2c26
JW
872 * include/std/type_traits (__is_standard_integer): New helper trait.
873 * include/std/utility (cmp_equal, cmp_not_equal, cmp_less, cmp_greater)
874 (cmp_less_equal, cmp_greater_equal, in_range): Define for C++20.
875 * include/std/version (__cpp_lib_integer_comparison_functions): Define.
876 * testsuite/20_util/integer_comparisons/1.cc: New test.
877 * testsuite/20_util/integer_comparisons/2.cc: New test.
878 * testsuite/20_util/integer_comparisons/equal.cc: New test.
879 * testsuite/20_util/integer_comparisons/equal_neg.cc: New test.
880 * testsuite/20_util/integer_comparisons/greater_equal.cc: New test.
881 * testsuite/20_util/integer_comparisons/greater_equal_neg.cc: New test.
882 * testsuite/20_util/integer_comparisons/greater_neg.cc: New test.
883 * testsuite/20_util/integer_comparisons/in_range.cc: New test.
884 * testsuite/20_util/integer_comparisons/in_range_neg.cc: New test.
885 * testsuite/20_util/integer_comparisons/less.cc: New test.
886 * testsuite/20_util/integer_comparisons/less_equal.cc: New test.
887 * testsuite/20_util/integer_comparisons/less_equal_neg.cc: New test.
888 * testsuite/20_util/integer_comparisons/less_neg.cc: New test.
889 * testsuite/20_util/integer_comparisons/not_equal.cc: New test.
890 * testsuite/20_util/integer_comparisons/not_equal_neg.cc: New test.
891
93b8cfce
PP
8922020-02-16 Patrick Palka <ppalka@redhat.com>
893
894 * include/bits/ranges_algo.h (__lexicographical_compare_fn::operator()):
895 Move code after an early exit constexpr if to under an else branch.
896 * include/bits/ranges_algobase.h (__equal_fn::operator()): Likewise.
897
90b7eb65
PP
8982020-02-15 Patrick Palka <ppalka@redhat.com>
899
55992626
PP
900 * include/bits/ranges_algo.h: Adjust whitespace and formatting.
901 * include/bits/ranges_algobase.h: Likewise.
902 * include/bits/ranges_uninitialized.h: Likewise.
903
b40c57bd
PP
904 * include/bits/ranges_algo.h: (adjacent_find, all_of, any_of,
905 binary_search, copy_if, count, count_if, equal_range, find, find_end,
906 find_first_of, find_if, find_if_not, for_each, generate, generate_n,
907 includes, inplace_merge, is_heap, is_heap_until, is_partitioned,
908 is_permutation, is_sorted, is_sorted_until, lexicographical_compare,
909 lower_bound, make_heap, max, max_element, merge, min, min_element,
910 minmax, minmax_element, mismatch, next_permutation, none_of,
911 nth_element, partial_sort, partial_sort_copy, partition, partition_copy,
912 partition_point, pop_heap, prev_permutation, push_heap, remove,
913 remove_copy, remove_copy_if, remove_if, replace, replace_copy,
914 replace_copy_if, replace_if, reverse, reverse_copy, rotate, rotate_copy,
915 search, search_n, set_difference, set_intersection,
916 set_symmetric_difference, set_union, shuffle, sort, sort_heap,
917 stable_partition, stable_sort, swap_ranges, transform, unique,
918 unique_copy, upper_bound): Convert into function objects.
919 * include/bits/ranges_algobase.h: (equal, copy, move, copy_n, fill_n,
920 fill, move_backward, copy_backward): Likewise.
921 * include/bits/ranges_uninitialized.h (uninitialized_default_construct,
922 uninitialized_default_construct_n, uninitialized_value_construct,
923 uninitialized_value_construct_n, uninitialized_copy,
924 uninitialized_copy_n, uninitialized_move, uninitialized_move_n,
925 uninitialized_fill, uninitialized_fill_n, construct_at, destroy_at,
926 destroy, destroy_n): Likewise.
927
90b7eb65
PP
928 * include/bits/ranges_algo.h (ranges::__find_end): Fold into ...
929 (ranges::find_end): ... here.
930 (ranges::__lexicographical_compare): Fold into ...
931 (ranges::lexicographical_compare): ... here.
932 * include/bits/ranges_algobase.h (ranges::__equal): Fold into ...
933 (ranges::equal): ... here.
934
55b00d14
JW
9352020-02-15 Jonathan Wakely <jwakely@redhat.com>
936
937 * include/bits/erase_if.h (__cpp_lib_erase_if): Define to 202002L.
938 * include/std/deque: Likewise.
939 * include/std/forward_list: Likewise.
940 * include/std/list: Likewise.
941 * include/std/string: Likewise.
942 * include/std/vector: Likewise.
943 * include/std/version: Likewise.
944 * testsuite/23_containers/deque/erasure.cc: Test for new value.
945 * testsuite/23_containers/forward_list/erasure.cc: Likewise.
946 * testsuite/23_containers/list/erasure.cc: Likewise.
947 * testsuite/23_containers/map/erasure.cc: Likewise.
948 * testsuite/23_containers/set/erasure.cc: Likewise.
949 * testsuite/23_containers/unordered_map/erasure.cc: Likewise.
950 * testsuite/23_containers/unordered_set/erasure.cc: Likewise.
951 * testsuite/23_containers/vector/erasure.cc: Likewise.
952
5b1d5885
JW
9532020-02-15 Jonathan Wakely <jwakely@redhat.com>
954
955 * include/bits/random.h (uniform_random_bit_generator): Require min()
956 and max() to be constant expressions and min() to be less than max().
957 * testsuite/26_numerics/random/concept.cc: Check additional cases.
958 * testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error lineno.
959
90fc7b3c
PP
9602020-02-13 Patrick Palka <ppalka@redhat.com>
961
613c932f
PP
962 * include/Makefile.am: Add <bits/ranges_uninitialized.h>.
963 * include/Makefile.in: Regenerate.
964 * include/bits/ranges_uninitialized.h: New header.
965 * include/std/memory: Include it.
966 * testsuite/20_util/specialized_algorithms/destroy/constrained.cc: New
967 test.
968 * .../uninitialized_copy/constrained.cc: New test.
969 * .../uninitialized_default_construct/constrained.cc: New test.
970 * .../uninitialized_fill/constrained.cc: New test.
971 * .../uninitialized_move/constrained.cc: New test.
972 * .../uninitialized_value_construct/constrained.cc: New test.
973
90fc7b3c
PP
974 * include/Makefile.am: Add bits/ranges_algobase.h
975 * include/Makefile.in: Regenerate.
976 * bits/ranges_algo.h: Include <bits/ranges_algobase.h> and refactor
977 existing #includes.
978 (__detail::__is_normal_iterator, __detail::is_reverse_iterator,
979 __detail::__is_move_iterator, copy_result, move_result,
980 __equal, equal, copy_result, move_result, move_backward_result,
981 copy_backward_result, __copy_or_move_backward, __copy_or_move, copy,
982 move, copy_backward, move_backward, copy_n_result, copy_n, fill_n,
983 fill): Split out into ...
984 * bits/range_algobase.h: ... this new header.
985
99bbab9f
PP
9862020-02-12 Patrick Palka <ppalka@redhat.com>
987
988 LWG 3389 and LWG 3390
989 * include/bits/stl_iterator.h (move_move_iterator): Use std::move when
990 constructing the move_iterator with __i.
991 (counted_iterator::counted_iterator): Use std::move when initializing
992 M_current with __i.
993 * testsuite/24_iterators/counted_iterator/lwg3389.cc: New test.
994 * testsuite/24_iterators/move_iterator/lwg3390.cc: New test.
995
02ce382c
SL
9962020-02-12 Sandra Loosemore <sandra@codesourcery.com>
997
998 PR libstdc++/79193
999 PR libstdc++/88999
1000
1001 * configure: Regenerated.
1002
b32a3f32
FD
10032020-02-12 François Dumont <fdumont@gcc.gnu.org>
1004
1005 * include/bits/hashtable.h
1006 (_Hashtable<>(_Hashtable&&, std::allocator_type&)): Add
1007 missing std namespace qualification to forward call.
1008
dcda050e
JW
10092020-02-09 Jonathan Wakely <jwakely@redhat.com>
1010
38660e87
JW
1011 * testsuite/20_util/function_objects/range.cmp/equal_to.cc: Fix
1012 comment.
1013 * testsuite/20_util/function_objects/range.cmp/less.ccL Likewise.
1014
97a7c229
JW
1015 * include/std/ranges: Fix non-ASCII characters in comment.
1016
dcda050e
JW
1017 * include/bits/range_cmp.h (__detail::__eq_builtin_ptr_cmp): Require
1018 equality comparison to be valid and return bool.
1019 (__detail::__less_builtin_ptr_cmp): Likewise for less-than comparison.
1020 * testsuite/20_util/function_objects/range.cmp/equal_to.cc: Check
1021 type with ambiguous conversion to fundamental types.
1022 * testsuite/20_util/function_objects/range.cmp/less.cc: Likewise.
1023
d222d8ec
JW
10242020-02-07 Jonathan Wakely <jwakely@redhat.com>
1025
c8dd2446
JW
1026 * include/bits/iterator_concepts.h (iter_difference_t, iter_value_t):
1027 Use remove_cvref_t.
1028 (readable_traits): Rename to indirectly_readable_traits.
1029 (readable): Rename to indirectly_readable.
1030 (writable): Rename to indirectly_writable.
1031 (__detail::__iter_exchange_move): Do not use remove_reference_t.
1032 (indirectly_swappable): Adjust requires expression parameter types.
1033 expression.
1034 * include/bits/ranges_algo.h (ranges::transform, ranges::replace)
1035 (ranges::replace_if, ranges::generate_n, ranges::generate)
1036 (ranges::remove): Use new name for writable.
1037 * include/bits/stl_iterator.h (__detail::__common_iter_has_arrow):
1038 Use new name for readable.
1039 * include/ext/pointer.h (readable_traits<_Pointer_adapter<P>>): Use
1040 new name for readable_traits.
1041 * testsuite/24_iterators/associated_types/readable.traits.cc: Likewise.
1042 * testsuite/24_iterators/indirect_callable/projected.cc: Adjust for
1043 new definition of indirectly_readable.
1044
d222d8ec
JW
1045 * include/bits/stl_iterator.h (__detail::__common_iter_ptr): Change
1046 to take parameters of common_iterator, instead of the common_iterator
1047 type itself. Fix argument for __common_iter_has_arrow constraint.
1048 (iterator_traits<common_iterator<I, S>>::pointer): Adjust.
1049
572992c8
JW
10502020-02-07 Jonathan Wakely <jwakely@redhat.com>
1051
1052 * include/std/ranges (iota_view): Add braces to prevent -Wempty-body
1053 warning.
1054 (basic_istream_view::_Iterator::operator++()): Add missing return.
1055
cba9ef06
PP
10562020-02-07 Patrick Palka <ppalka@redhat.com>
1057
a04f635d
PP
1058 * include/bits/ranges_algo.h: Remove extraneous &&.
1059
b7903d9f
PP
1060 * include/std/ranges (ranges::__detail::__stream_extractable,
1061 ranges::basic_istream_view, ranges::istream_view): Define.
1062 * testsuite/std/ranges/istream_view: New test.
1063
cba9ef06
PP
1064 Implement C++20 range adaptors
1065 * include/std/ranges: Include <bits/refwrap.h> and <tuple>.
1066 (subrange::_S_store_size): Mark as const instead of constexpr to
1067 avoid what seems to be a bug in GCC.
1068 (__detail::__box): Give it defaulted copy and move constructors.
55d4cbcb
PP
1069 (ranges::views::_Single::operator()): Mark constexpr.
1070 (ranges::views::_Iota::operator()): Mark constexpr.
cba9ef06 1071 (__detail::Empty): Define.
55d4cbcb
PP
1072 (ranges::views::__closure::_RangeAdaptor,
1073 ranges::views::__closure::_RangeAdaptorClosure, ref_view, all_view,
1074 ranges::views::all, ranges::__detail::find_if,
1075 ranges::__detail::find_if_not, ranges::__detail::mismatch,
1076 ranges::detail::min, filter_view, ranges::views::filter, transform_view,
1077 ranges::views::transform, take_view, ranges::views::take,
1078 take_while_view, ranges::views::take_while, drop_view,
1079 ranges::views::drop, join_view, ranges::views::join,
cba9ef06 1080 __detail::require_constant, __detail::tiny_range, split_view,
55d4cbcb
PP
1081 ranges::views::split, ranges::views::_Counted, ranges::views::counted,
1082 common_view, ranges::views::common, reverse_view,
1083 ranges::views::reverse,
1084 ranges::views::__detail::__is_reversible_subrange,
1085 ranges::views::__detail::__is_reverse_view, reverse_view,
1086 ranges::views::reverse, __detail::__has_tuple_element, elements_view,
1087 ranges::views::elements, ranges::views::keys, ranges::views::values):
1088 Define.
1089 (views): Alias for ranges::views.
1090 (tuple_size<ranges::subrange<>>, tuple_element<0, ranges::subrange>,
1091 tuple_element<1, ranges::subrange>): New partial specializations.
cba9ef06
PP
1092 * testsuite/std/ranges/adaptors/all.cc: New test.
1093 * testsuite/std/ranges/adaptors/common.cc: Likewise.
1094 * testsuite/std/ranges/adaptors/counted.cc: Likewise.
1095 * testsuite/std/ranges/adaptors/drop.cc: Likewise.
1096 * testsuite/std/ranges/adaptors/drop_while.cc: Likewise.
1097 * testsuite/std/ranges/adaptors/elements.cc: Likewise.
1098 * testsuite/std/ranges/adaptors/filter.cc: Likewise.
1099 * testsuite/std/ranges/adaptors/join.cc: Likewise.
1100 * testsuite/std/ranges/adaptors/reverse.cc: Likewise.
1101 * testsuite/std/ranges/adaptors/split.cc: Likewise.
1102 * testsuite/std/ranges/adaptors/take.cc: Likewise.
1103 * testsuite/std/ranges/adaptors/take_while.cc: Likewise.
1104 * testsuite/std/ranges/adaptors/transform.cc: Likewise.
1105
5713834e
JW
11062020-02-07 Jonathan Wakely <jwakely@redhat.com>
1107
0d57370c
JW
1108 * libsupc++/compare (__cmp_cat::type): Define typedef for underlying
1109 type of enumerations and comparison category types.
1110 (__cmp_cat::_Ord, __cmp_cat::_Ncmp): Add underlying type.
1111 (__cmp_cat::_Ncmp::unordered): Change value to 2.
1112 (partial_ordering::_M_value, weak_ordering::_M_value)
1113 (strong_ordering::_M_value): Change type to __cmp_cat::type.
1114 (partial_ordering::_M_is_ordered): Remove data member.
1115 (partial_ordering): Use second bit of _M_value for unordered. Adjust
1116 comparison operators.
1117 (weak_ordering::operator partial_ordering): Simplify to remove
1118 branches.
1119 (operator<=>(unspecified, weak_ordering)): Likewise.
1120 (strong_ordering::operator partial_ordering): Likewise.
1121 (strong_ordering::operator weak_ordering): Likewise.
1122 (operator<=>(unspecified, strong_ordering)): Likewise.
1123 * testsuite/18_support/comparisons/categories/partialord.cc: New test.
1124 * testsuite/18_support/comparisons/categories/strongord.cc: New test.
1125 * testsuite/18_support/comparisons/categories/weakord.cc: New test.
1126
5713834e
JW
1127 * include/std/ranges (iota_view::_Iterator): Fix typo in name of
1128 __cpp_lib_three_way_comparison macro and use deduced return type for
1129 operator<=>.
1130 * testsuite/std/ranges/iota/iterator.cc: New test.
1131
bc464641
PP
11322020-02-07 Patrick Palka <ppalka@redhat.com>
1133 Jonathan Wakely <jwakely@redhat.com>
1134
1135 Implement C++20 constrained algorithms
1136 * include/Makefile.am: Add new header.
1137 * include/Makefile.in: Regenerate.
1138 * include/std/algorithm: Include <bits/ranges_algo.h>.
1139 * include/bits/ranges_algo.h: New file.
1140 * testsuite/25_algorithms/adjacent_find/constrained.cc: New test.
1141 * testsuite/25_algorithms/all_of/constrained.cc: New test.
1142 * testsuite/25_algorithms/any_of/constrained.cc: New test.
1143 * testsuite/25_algorithms/binary_search/constrained.cc: New test.
1144 * testsuite/25_algorithms/copy/constrained.cc: New test.
1145 * testsuite/25_algorithms/copy_backward/constrained.cc: New test.
1146 * testsuite/25_algorithms/copy_if/constrained.cc: New test.
1147 * testsuite/25_algorithms/copy_n/constrained.cc: New test.
1148 * testsuite/25_algorithms/count/constrained.cc: New test.
1149 * testsuite/25_algorithms/count_if/constrained.cc: New test.
1150 * testsuite/25_algorithms/equal/constrained.cc: New test.
1151 * testsuite/25_algorithms/equal_range/constrained.cc: New test.
1152 * testsuite/25_algorithms/fill/constrained.cc: New test.
1153 * testsuite/25_algorithms/fill_n/constrained.cc: New test.
1154 * testsuite/25_algorithms/find/constrained.cc: New test.
1155 * testsuite/25_algorithms/find_end/constrained.cc: New test.
1156 * testsuite/25_algorithms/find_first_of/constrained.cc: New test.
1157 * testsuite/25_algorithms/find_if/constrained.cc: New test.
1158 * testsuite/25_algorithms/find_if_not/constrained.cc: New test.
1159 * testsuite/25_algorithms/for_each/constrained.cc: New test.
1160 * testsuite/25_algorithms/generate/constrained.cc: New test.
1161 * testsuite/25_algorithms/generate_n/constrained.cc: New test.
1162 * testsuite/25_algorithms/heap/constrained.cc: New test.
1163 * testsuite/25_algorithms/includes/constrained.cc: New test.
1164 * testsuite/25_algorithms/inplace_merge/constrained.cc: New test.
1165 * testsuite/25_algorithms/is_partitioned/constrained.cc: New test.
1166 * testsuite/25_algorithms/is_permutation/constrained.cc: New test.
1167 * testsuite/25_algorithms/is_sorted/constrained.cc: New test.
1168 * testsuite/25_algorithms/is_sorted_until/constrained.cc: New test.
1169 * testsuite/25_algorithms/lexicographical_compare/constrained.cc: New
1170 test.
1171 * testsuite/25_algorithms/lower_bound/constrained.cc: New test.
1172 * testsuite/25_algorithms/max/constrained.cc: New test.
1173 * testsuite/25_algorithms/max_element/constrained.cc: New test.
1174 * testsuite/25_algorithms/merge/constrained.cc: New test.
1175 * testsuite/25_algorithms/min/constrained.cc: New test.
1176 * testsuite/25_algorithms/min_element/constrained.cc: New test.
1177 * testsuite/25_algorithms/minmax/constrained.cc: New test.
1178 * testsuite/25_algorithms/minmax_element/constrained.cc: New test.
1179 * testsuite/25_algorithms/mismatch/constrained.cc: New test.
1180 * testsuite/25_algorithms/move/constrained.cc: New test.
1181 * testsuite/25_algorithms/move_backward/constrained.cc: New test.
1182 * testsuite/25_algorithms/next_permutation/constrained.cc: New test.
1183 * testsuite/25_algorithms/none_of/constrained.cc: New test.
1184 * testsuite/25_algorithms/nth_element/constrained.cc: New test.
1185 * testsuite/25_algorithms/partial_sort/constrained.cc: New test.
1186 * testsuite/25_algorithms/partial_sort_copy/constrained.cc: New test.
1187 * testsuite/25_algorithms/partition/constrained.cc: New test.
1188 * testsuite/25_algorithms/partition_copy/constrained.cc: New test.
1189 * testsuite/25_algorithms/partition_point/constrained.cc: New test.
1190 * testsuite/25_algorithms/prev_permutation/constrained.cc: New test.
1191 * testsuite/25_algorithms/remove/constrained.cc: New test.
1192 * testsuite/25_algorithms/remove_copy/constrained.cc: New test.
1193 * testsuite/25_algorithms/remove_copy_if/constrained.cc: New test.
1194 * testsuite/25_algorithms/remove_if/constrained.cc: New test.
1195 * testsuite/25_algorithms/replace/constrained.cc: New test.
1196 * testsuite/25_algorithms/replace_copy/constrained.cc: New test.
1197 * testsuite/25_algorithms/replace_copy_if/constrained.cc: New test.
1198 * testsuite/25_algorithms/replace_if/constrained.cc: New test.
1199 * testsuite/25_algorithms/reverse/constrained.cc: New test.
1200 * testsuite/25_algorithms/reverse_copy/constrained.cc: New test.
1201 * testsuite/25_algorithms/rotate/constrained.cc: New test.
1202 * testsuite/25_algorithms/rotate_copy/constrained.cc: New test.
1203 * testsuite/25_algorithms/search/constrained.cc: New test.
1204 * testsuite/25_algorithms/search_n/constrained.cc: New test.
1205 * testsuite/25_algorithms/set_difference/constrained.cc: New test.
1206 * testsuite/25_algorithms/set_intersection/constrained.cc: New test.
1207 * testsuite/25_algorithms/set_symmetric_difference/constrained.cc: New
1208 test.
1209 * testsuite/25_algorithms/set_union/constrained.cc: New test.
1210 * testsuite/25_algorithms/shuffle/constrained.cc: New test.
1211 * testsuite/25_algorithms/sort/constrained.cc: New test.
1212 * testsuite/25_algorithms/stable_partition/constrained.cc: New test.
1213 * testsuite/25_algorithms/stable_sort/constrained.cc: New test.
1214 * testsuite/25_algorithms/swap_ranges/constrained.cc: New test.
1215 * testsuite/25_algorithms/transform/constrained.cc: New test.
1216 * testsuite/25_algorithms/unique/constrained.cc: New test.
1217 * testsuite/25_algorithms/unique_copy/constrained.cc: New test.
1218 * testsuite/25_algorithms/upper_bound/constrained.cc: New test.
1219
d1aa7705
JW
12202020-02-06 Jonathan Wakely <jwakely@redhat.com>
1221
bd630df0
JW
1222 * include/bits/stl_iterator.h (__detail::__common_iter_ptr): Fix PR
1223 number in comment. Fix indentation.
1224
d1aa7705
JW
1225 * include/bits/stl_algobase.h (__iter_swap, __iter_swap<true>): Remove
1226 redundant _GLIBCXX20_CONSTEXPR.
1227
26eae9ac
JW
1228 * include/std/ranges (viewable_range): Replace decay_t with
1229 remove_cvref_t (LWG 3375).
1230
269e8130
JW
12312020-02-05 Jonathan Wakely <jwakely@redhat.com>
1232
1233 * include/bits/iterator_concepts.h (iter_reference_t)
1234 (iter_rvalue_reference_t, iter_common_reference_t, indirect_result_t):
1235 Remove workarounds for PR c++/67704.
1236 * testsuite/24_iterators/aliases.cc: New test.
1237
7db12d15
PP
12382020-02-05 Patrick Palka <ppalka@redhat.com>
1239
1240 * include/bits/stl_iterator.h (move_iterator::move_iterator): Move __i
1241 when initializing _M_current.
1242 (move_iterator::base): Split into two overloads differing in
1243 ref-qualifiers as in P1207R4 for C++20.
1244
9962493c
JW
12452020-02-04 Jonathan Wakely <jwakely@redhat.com>
1246
9bc5bea1
JW
1247 * include/std/functional (_GLIBCXX_NOT_FN_CALL_OP): Un-define after
1248 use.
1249
9962493c
JW
1250 PR libstdc++/93562
1251 * include/bits/unique_ptr.h (__uniq_ptr_impl::swap): Define.
1252 (unique_ptr::swap, unique_ptr<T[], D>::swap): Call it.
1253 * testsuite/20_util/unique_ptr/modifiers/93562.cc: New test.
1254
20fa702b
AB
12552020-02-01 Andrew Burgess <andrew.burgess@embecosm.com>
1256
1257 * configure: Regenerate.
1258
6e5a1963
PP
12592020-01-31 Patrick Palka <ppalka@redhat.com>
1260
1261 * testsuite/24_iterators/range_operations/distance.cc: Do not assume
1262 test_range::end() returns the same type as test_range::begin().
1263 * testsuite/24_iterators/range_operations/next.cc: Likewise.
1264 * testsuite/24_iterators/range_operations/prev.cc: Likewise.
1265 * testsuite/util/testsuite_iterators.h (__gnu_test::test_range::end):
1266 Always return a sentinel<I>.
1267
5cd2e126
JW
12682020-01-29 Jonathan Wakely <jwakely@redhat.com>
1269
0a8f4feb
JW
1270 PR libstdc++/92895
1271 * include/std/stop_token (stop_token::stop_possible()): Call new
1272 _M_stop_possible() function.
1273 (stop_token::stop_requested()): Do not use stop_possible().
1274 (stop_token::binary_semaphore): New class, as temporary stand-in for
1275 std::binary_semaphore.
1276 (stop_token::_Stop_cb::_M_callback): Add noexcept to type.
1277 (stop_token::_Stop_cb::_M_destroyed, stop_token::_Stop_cb::_M_done):
1278 New data members for symchronization with stop_callback destruction.
1279 (stop_token::_Stop_cb::_Stop_cb): Make non-template.
1280 (stop_token::_Stop_cb::_M_linked, stop_token::_Stop_cb::_S_execute):
1281 Remove.
1282 (stop_token::_Stop_cb::_M_run): New member function.
1283 (stop_token::_Stop_state::_M_stopped, stop_token::_Stop_state::_M_mtx):
1284 Remove.
1285 (stop_token::_Stop_state::_M_owners): New data member to track
1286 reference count for ownership.
1287 (stop_token::_Stop_state::_M_value): New data member combining a
1288 spinlock, the stop requested flag, and the reference count for
1289 associated stop_source objects.
1290 (stop_token::_Stop_state::_M_requester): New data member for
1291 synchronization with stop_callback destruction.
1292 (stop_token::_Stop_state::_M_stop_possible()): New member function.
1293 (stop_token::_Stop_state::_M_stop_requested()): Inspect relevant bit
1294 of _M_value.
1295 (stop_token::_Stop_state::_M_add_owner)
1296 (stop_token::_Stop_state::_M_release_ownership)
1297 (stop_token::_Stop_state::_M_add_ssrc)
1298 (stop_token::_Stop_state::_M_sub_ssrc): New member functions for
1299 updating reference counts.
1300 (stop_token::_Stop_state::_M_lock, stop_token::_Stop_state::_M_unlock)
1301 (stop_token::_Stop_state::_M_lock, stop_token::_Stop_state::_M_unlock)
1302 (stop_token::_Stop_state::_M_try_lock)
1303 (stop_token::_Stop_state::_M_try_lock_and_stop)
1304 (stop_token::_Stop_state::_M_do_try_lock): New member functions for
1305 managing spinlock.
1306 (stop_token::_Stop_state::_M_request_stop): Use atomic operations to
1307 read and update state. Release lock while running callbacks. Use new
1308 data members to synchronize with callback destruction.
1309 (stop_token::_Stop_state::_M_remove_callback): Likewise.
1310 (stop_token::_Stop_state::_M_register_callback): Use atomic operations
1311 to read and update state.
1312 (stop_token::_Stop_state_ref): Handle type to manage _Stop_state,
1313 replacing shared_ptr.
1314 (stop_source::stop_source(const stop_source&)): Update reference count.
1315 (stop_source::operator=(const stop_source&)): Likewise.
1316 (stop_source::~stop_source()): Likewise.
1317 (stop_source::stop_source(stop_source&&)): Define as defaulted.
1318 (stop_source::operator=(stop_source&&)): Establish postcondition on
1319 parameter.
1320 (stop_callback): Enforce preconditions on template parameter. Replace
1321 base class with data member of new _Cb_impl type.
1322 (stop_callback::stop_callback(const stop_token&, Cb&&))
1323 (stop_callback::stop_callback(stop_token&&, Cb&&)): Fix TOCTTOU race.
1324 (stop_callback::_Cb_impl): New type wrapping _Callback member and
1325 defining the _S_execute member function.
1326 * testsuite/30_threads/stop_token/stop_callback/deadlock-mt.cc: New
1327 test.
1328 * testsuite/30_threads/stop_token/stop_callback/deadlock.cc: New test.
1329 * testsuite/30_threads/stop_token/stop_callback/destroy.cc: New test.
1330 * testsuite/30_threads/stop_token/stop_callback/destructible_neg.cc:
1331 New test.
1332 * testsuite/30_threads/stop_token/stop_callback/invocable_neg.cc: New
1333 test.
1334 * testsuite/30_threads/stop_token/stop_callback/invoke.cc: New test.
1335 * testsuite/30_threads/stop_token/stop_source/assign.cc: New test.
1336 * testsuite/30_threads/stop_token/stop_token/stop_possible.cc: New
1337 test.
1338
f214ffb3
JW
1339 * libsupc++/compare (__detail::__3way_builtin_ptr_cmp): Use
1340 three_way_comparable_with.
1341 (__detail::__3way_cmp_with): Remove workaround for fixed bug.
1342 (compare_three_way::operator()): Remove redundant constraint from
1343 requires-clause.
1344 (__detail::_Synth3way::operator()): Use three_way_comparable_with
1345 instead of workaround.
1346 * testsuite/18_support/comparisons/object/93479.cc: Prune extra
1347 output due to simplified constraints on compare_three_way::operator().
1348
83b02010
JW
1349 PR libstdc++/93479
1350 * libsupc++/compare (__3way_builtin_ptr_cmp): Require <=> to be valid.
1351 * testsuite/18_support/comparisons/object/93479.cc: New test.
1352
5cd2e126
JW
1353 * testsuite/std/ranges/access/end.cc: Do not assume test_range::end()
1354 returns the same type as test_range::begin(). Add comments.
1355 * testsuite/std/ranges/access/rbegin.cc: Likewise.
1356 * testsuite/std/ranges/access/rend.cc: Likewise.
1357 * testsuite/std/ranges/range.cc: Do not assume the sentinel for
1358 test_range is the same as its iterator type.
1359 * testsuite/util/testsuite_iterators.h (test_range::sentinel): Add
1360 operator- overloads to satisfy sized_sentinel_for when the iterator
1361 satisfies random_access_iterator.
1362
759812fd
JW
13632020-01-28 Jonathan Wakely <jwakely@redhat.com>
1364
72a9fd20
JW
1365 PR libstdc++/93470
1366 * include/bits/refwrap.h (reference_wrapper::operator()): Restrict
1367 static assertion to object types.
1368
759812fd
JW
1369 PR libstdc++/93325
1370 * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Use AC_SEARCH_LIBS for
1371 clock_gettime instead of explicit glibc version check.
1372 * configure: Regenerate.
1373
a5d81aaa
JW
13742020-01-28 Martin Liska <mliska@suse.cz>
1375
1376 PR libstdc++/93478
1377 * include/std/atomic: Fix typo.
1378 * include/std/optional: Likewise.
1379
13802020-01-27 Andrew Burgess <andrew.burgess@embecosm.com>
1381
1382 * configure: Regenerate.
1383
389cd88c
JW
13842020-01-27 Jonathan Wakely <jwakely@redhat.com>
1385
1386 PR libstdc++/93426
1387 * include/std/span (span): Fix deduction guide.
1388 * testsuite/23_containers/span/deduction.cc: New test.
1389
482eeff5
JW
13902020-01-24 Jonathan Wakely <jwakely@redhat.com>
1391
1392 * libsupc++/compare (__cmp_cat::_Eq): Remove enumeration type.
1393 (__cmp_cat::_Ord::equivalent): Add enumerator.
1394 (__cmp_cat::_Ord::_Less, __cmp_cat::_Ord::_Greater): Rename to less
1395 and greater.
1396 (partial_ordering, weak_ordering, strong_ordering): Remove
1397 constructors taking __cmp_cat::_Eq parameters. Use renamed
1398 enumerators.
1399
e8e66971
MR
14002020-01-24 Maciej W. Rozycki <macro@wdc.com>
1401
1402 * acinclude.m4: Handle `--with-toolexeclibdir='.
1403 * Makefile.in: Regenerate.
1404 * aclocal.m4: Regenerate.
1405 * configure: Regenerate.
1406 * doc/Makefile.in: Regenerate.
1407 * include/Makefile.in: Regenerate.
1408 * libsupc++/Makefile.in: Regenerate.
1409 * po/Makefile.in: Regenerate.
1410 * python/Makefile.in: Regenerate.
1411 * src/Makefile.in: Regenerate.
1412 * src/c++11/Makefile.in: Regenerate.
1413 * src/c++17/Makefile.in: Regenerate.
1414 * src/c++98/Makefile.in: Regenerate.
1415 * src/filesystem/Makefile.in: Regenerate.
1416 * testsuite/Makefile.in: Regenerate.
1417
7a900bce
AO
14182020-01-23 Alexandre Oliva <oliva@adacore.com>
1419
f9e84b31
AO
1420 * crossconfig.m4 (GLIBCXX_CHECK_MATH_DECL): Reject macros.
1421 * configure: Rebuild.
1422
7a900bce
AO
1423 * testsuite/27_io/fpos/mbstate_t/1.cc: Zero-init mbstate_t.
1424
04681fca
JW
14252020-01-23 Jonathan Wakely <jwakely@redhat.com>
1426
1427 PR libstdc++/91947
1428 * include/Makefile.am (${host_builddir}/largefile-config.h): Simplify
1429 rule.
1430 * include/Makefile.in: Regenerate.
1431
c784f162
JW
14322020-01-20 Jonathan Wakely <jwakely@redhat.com>
1433
1434 * doc/xml/faq.xml: Fix grammar.
1435 * doc/xml/manual/appendix_contributing.xml: Improve instructions.
1436 * doc/xml/manual/spine.xml: Update copyright years.
1437 * doc/html/*: Regenerate.
1438
f4d83eba
ER
14392020-01-19 Eric S. Raymond <esr@thyrsus.com>
1440
1441 * doc/xml/faq.xml: Update for SVN -> Git transition.
1442 * doc/xml/manual/appendix_contributing.xml: Likewise.
1443 * doc/xml/manual/status_cxx1998.xml: Likewise.
1444 * doc/xml/manual/status_cxx2011.xml: Likewise.
1445 * doc/xml/manual/status_cxx2014.xml: Likewise.
1446 * doc/xml/manual/status_cxx2017.xml: Likewise.
1447 * doc/xml/manual/status_cxx2020.xml: Likewise.
1448 * doc/xml/manual/status_cxxtr1.xml: Likewise.
1449 * doc/xml/manual/status_cxxtr24733.xml: Likewise.
1450
49789fd0
IS
14512020-01-18 Iain Sandoe <iain@sandoe.co.uk>
1452
1453 * include/Makefile.am: Add coroutine to the std set.
1454 * include/Makefile.in: Regenerated.
1455 * include/std/coroutine: New file.
1456
0ba6a850
JW
14572020-01-17 Jonathan Wakely <jwakely@redhat.com>
1458
1459 PR libstdc++/92376
1460 * include/bits/c++config: Only do PSTL config when the header is
1461 present, to fix freestanding.
1462 * libsupc++/new_opa.cc [!_GLIBCXX_HOSTED]: Declare allocation
1463 functions if they were detected by configure.
1464
98d56ea8
JW
14652020-01-16 Kai-Uwe Eckhardt <kuehro@gmx.de>
1466 Matthew Bauer <mjbauer95@gmail.com>
1467 Jonathan Wakely <jwakely@redhat.com>
1468
1469 PR bootstrap/64271 (partial)
1470 * config/os/bsd/netbsd/ctype_base.h (ctype_base::mask): Change type
1471 to unsigned short.
1472 (ctype_base::alpha, ctype_base::digit, ctype_base::xdigit)
1473 (ctype_base::print, ctype_base::graph, ctype_base::alnum): Sync
1474 definitions with NetBSD upstream.
1475 (ctype_base::blank): Use _CTYPE_BL.
1476 * config/os/bsd/netbsd/ctype_configure_char.cc (_C_ctype_): Remove
1477 Declaration.
1478 (ctype<char>::classic_table): Use _C_ctype_tab_ instead of _C_ctype_.
1479 (ctype<char>::do_toupper, ctype<char>::do_tolower): Cast char
1480 parameters to unsigned char.
1481 * config/os/bsd/netbsd/ctype_inline.h (ctype<char>::is): Likewise.
1482
d9165389
FD
14832020-01-16 François Dumont <fdumont@gcc.gnu.org>
1484
1485 PR libstdc++/91263
1486 * include/bits/hashtable.h (_Hashtable<>): Make _Equality<> friend.
1487 * include/bits/hashtable_policy.h: Include <bits/stl_algo.h>.
1488 (_Equality_base): Remove.
1489 (_Equality<>::_M_equal): Review implementation. Use
1490 std::is_permutation.
1491 * testsuite/23_containers/unordered_multiset/operators/1.cc
1492 (Hash, Equal, test02, test03): New.
1493 * testsuite/23_containers/unordered_set/operators/1.cc
1494 (Hash, Equal, test02, test03): New.
1495
2a0f6c61
JW
14962020-01-15 Jonathan Wakely <jwakely@redhat.com>
1497
1498 PR libstdc++/93267
1499 * include/bits/iterator_concepts.h (__max_diff_type, __max_size_type):
1500 Move here from <bits/range_access.h> and define using __int128 when
1501 available.
1502 (__is_integer_like, __is_signed_integer_like): Move here from
1503 <bits/range_access.h>.
1504 (weakly_incrementable): Use __is_signed_integer_like.
1505 * include/bits/range_access.h (__max_diff_type, __max_size_type)
1506 (__is_integer_like, __is_signed_integer_like): Move to
1507 <bits/iterator_concepts.h>.
1508 (__make_unsigned_like_t): Move here from <ranges>.
1509 * include/std/ranges (__make_unsigned_like_t): Move to
1510 <bits/range_access.h>.
1511 (iota_view): Replace using-directive with using-declarations.
1512 * testsuite/std/ranges/iota/93267.cc: New test.
1513 * testsuite/std/ranges/iota_view.cc: Move to new 'iota' sub-directory.
1514
e4379a93
JW
15152020-01-13 Jonathan Wakely <jwakely@redhat.com>
1516
fe7cc34f
JW
1517 PR libstdc++/93244
1518 * include/bits/fs_path.h (path::generic_string<C,A>)
1519 [_GLIBCXX_FILESYSTEM_IS_WINDOWS]: Convert root-dir to forward-slash.
1520 * testsuite/27_io/filesystem/path/generic/generic_string.cc: Check
1521 root-dir is converted to forward slash in generic pathname.
1522 * testsuite/27_io/filesystem/path/generic/utf.cc: New test.
1523 * testsuite/27_io/filesystem/path/generic/wchar_t.cc: New test.
1524
e4379a93
JW
1525 PR libstdc++/58605
1526 * include/bits/atomic_base.h (__cpp_lib_atomic_value_initialization):
1527 Define.
1528 (__atomic_flag_base, __atomic_base, __atomic_base<_PTp*>)
1529 (__atomic_float): Add default member initializer for C++20.
1530 * include/std/atomic (atomic): Likewise.
1531 (atomic::atomic()): Remove noexcept-specifier on default constructor.
1532 * include/std/version (__cpp_lib_atomic_value_initialization): Define.
1533 * testsuite/29_atomics/atomic/cons/assign_neg.cc: Adjust dg-error line
1534 number.
1535 * testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise.
1536 * testsuite/29_atomics/atomic/cons/value_init.cc: New test.
1537 * testsuite/29_atomics/atomic_flag/cons/value_init.cc: New test.
1538 * testsuite/29_atomics/atomic_flag/requirements/trivial.cc: Adjust
1539 expected result for is_trivially_default_constructible.
1540 * testsuite/29_atomics/atomic_float/requirements.cc: Likewise.
1541 * testsuite/29_atomics/atomic_float/value_init.cc: New test.
1542 * testsuite/29_atomics/atomic_integral/cons/assign_neg.cc: Likewise.
1543 * testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise.
1544 * testsuite/29_atomics/atomic_integral/cons/value_init.cc
1545 * testsuite/29_atomics/atomic_integral/requirements/trivial.cc: Adjust
1546 expected results for is_trivially_default_constructible.
1547 * testsuite/util/testsuite_common_types.h (has_trivial_dtor): Add
1548 new test generator.
1549
7918cb93
JW
15502020-01-10 Jonathan Wakely <jwakely@redhat.com>
1551
68be73fc
JW
1552 * testsuite/util/testsuite_iterators.h: Improve comment.
1553
78f02e80
JW
1554 * testsuite/25_algorithms/equal/deque_iterators/1.cc: Don't use C++11
1555 initialization syntax.
1556
7918cb93
JW
1557 PR libstdc++/92285
1558 * include/bits/streambuf_iterator.h (istreambuf_iterator): Make type
1559 of base class independent of __cplusplus value.
1560 [__cplusplus < 201103L] (istreambuf_iterator::reference): Override the
1561 type defined in the base class
1562 * testsuite/24_iterators/istreambuf_iterator/92285.cc: New test.
1563 * testsuite/24_iterators/istreambuf_iterator/requirements/
1564 base_classes.cc: Adjust expected base class for C++98.
1565
acd43917
OH
15662020-01-09 Olivier Hainque <hainque@adacore.com>
1567
1568 * doc/xml/manual/appendix_contributing.xml: Document _C2
1569 as a reserved identifier, by VxWorks.
1570 * include/bits/stl_map.h: Rename _C2 template typenames as _Cmp2.
1571 * include/bits/stl_multimap.h: Likewise.
1572
caa39b2e
JW
15732020-01-09 Jonathan Wakely <jwakely@redhat.com>
1574
1a788638
JW
1575 * include/ext/extptr_allocator.h (_ExtPtr_allocator::operator==)
1576 (_ExtPtr_allocator::operator!=): Add missing const qualifiers.
1577 * include/ext/pointer.h (readable_traits<_Pointer_adapter<S>>): Add
1578 partial specialization to disambiguate the two constrained
1579 specializations.
1580
caa39b2e
JW
1581 * include/experimental/type_traits (experimental::is_pod_v): Disable
1582 -Wdeprecated-declarations warnings around reference to std::is_pod.
1583 * include/std/type_traits (is_pod_v): Likewise.
1584 * testsuite/18_support/max_align_t/requirements/2.cc: Also check
1585 is_standard_layout and is_trivial. Do not check is_pod for C++20.
1586 * testsuite/20_util/is_pod/requirements/explicit_instantiation.cc:
1587 Add -Wno-deprecated for C++20.
1588 * testsuite/20_util/is_pod/requirements/typedefs.cc: Likewise.
1589 * testsuite/20_util/is_pod/value.cc: Likewise.
1590 * testsuite/experimental/type_traits/value.cc: Likewise.
1591
1a6c5064
JTM
15922020-01-09 JeanHeyd "ThePhD" Meneide <phdofthehouse@gmail.com>
1593
1594 * include/bits/c++config (_GLIBCXX20_DEPRECATED): Add new macro.
1595 * include/std/type_traits (is_pod, is_pod_v): Deprecate for C++20.
1596 * testuite/20_util/is_pod/deprecated-2a.cc: New test.
1597
d574c8aa
JW
15982020-01-09 Jonathan Wakely <jwakely@redhat.com>
1599
160e95dc
JW
1600 PR libstdc++/93205
1601 * include/bits/random.h (operator>>): Check stream operation succeeds.
1602 * include/bits/random.tcc (operator<<): Remove redundant __ostream_type
1603 typedefs.
1604 (operator>>): Remove redundant __istream_type typedefs. Check stream
1605 operations succeed.
1606 (__extract_params): New function to fill a vector from a stream.
1607 * testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error line.
1608
d574c8aa
JW
1609 PR libstdc++/93208
1610 * config/abi/pre/gnu.ver: Add new exports.
1611 * include/std/memory_resource (memory_resource::~memory_resource()):
1612 Do not define inline.
1613 (monotonic_buffer_resource::~monotonic_buffer_resource()): Likewise.
1614 * src/c++17/memory_resource.cc (memory_resource::~memory_resource()):
1615 Define.
1616 (monotonic_buffer_resource::~monotonic_buffer_resource()): Define.
1617 * testsuite/20_util/monotonic_buffer_resource/93208.cc: New test.
1618
b9c84e95
FD
16192020-01-09 François Dumont <fdumont@gcc.gnu.org>
1620
1621 PR libstdc++/92124
1622 * include/bits/hashtable.h (_Hashtable<>::__alloc_node_gen_t): New
1623 template alias.
1624 (_Hashtable<>::__fwd_value_for): New.
1625 (_Hashtable<>::_M_assign_elements<>): Remove _NodeGenerator template
1626 parameter.
1627 (_Hashtable<>::_M_assign<>): Add _Ht template parameter.
1628 (_Hashtable<>::operator=(const _Hashtable<>&)): Adapt.
1629 (_Hashtable<>::_M_move_assign): Adapt. Replace std::move_if_noexcept
1630 with std::move.
1631 (_Hashtable<>::_Hashtable(const _Hashtable&)): Adapt.
1632 (_Hashtable<>::_Hashtable(const _Hashtable&, const allocator_type&)):
1633 Adapt.
1634 (_Hashtable<>::_Hashtable(_Hashtable&&, const allocator_type&)):
1635 Adapt.
1636 * testsuite/23_containers/unordered_set/92124.cc: New.
1637
fff148b7
JW
16382020-01-08 Jonathan Wakely <jwakely@redhat.com>
1639
1640 PR libstdc++/93201
1641 * src/c++17/fs_ops.cc (do_remove_all): New function implementing more
1642 detailed error reporting for remove_all. Check result of recursive
1643 call before incrementing iterator.
1644 (remove_all(const path&), remove_all(const path&, error_code&)): Use
1645 do_remove_all.
1646 * src/filesystem/ops.cc (remove_all(const path&, error_code&)): Check
1647 result of recursive call before incrementing iterator.
1648 * testsuite/27_io/filesystem/operations/remove_all.cc: Check errors
1649 are reported correctly.
1650 * testsuite/experimental/filesystem/operations/remove_all.cc: Likewise.
1651
9e3c1eb7
TR
16522020-01-07 Thomas Rodgers <trodgers@redhat.com>
1653
1654 * include/std/condition_variable
1655 (condition_variable_any::wait_on): Rename to match current draft
1656 standard.
1657 (condition_variable_any::wait_on_until): Likewise.
1658 (condition_variable_any::wait_on_for): Likewise.
1659 * testsuite/30_threads/condition_variable_any/stop_token/wait_on.cc:
1660 Adjust tests to account for renamed methods.
1661
6af8819b
FD
16622020-01-07 François Dumont <fdumont@gcc.gnu.org>
1663
1664 PR libstdc++/92124
1665 * include/bits/stl_tree.h
1666 (_Rb_tree<>::_M_move_assign(_Rb_tree&, false_type)): Replace
1667 std::move_if_noexcept by std::move.
1668 * testsuite/23_containers/map/92124.cc: New.
1669 * testsuite/23_containers/set/92124.cc: New.
1670
f31a99f7
JW
16712020-01-06 Jonathan Wakely <jwakely@redhat.com>
1672
a4a1f965
JW
1673 * include/std/stop_token (stop_token): Remove operator!= (LWG 3254).
1674 (stop_source): Likewise (LWG 3362).
1675 * testsuite/30_threads/stop_token/stop_source.cc: Test equality
1676 comparisons.
1677
f31a99f7
JW
1678 * include/bits/stl_algobase.h (__is_byte_iter, __min_cmp)
1679 (lexicographical_compare_three_way): Do not depend on
1680 __cpp_lib_concepts.
1681 * include/std/version (__cpp_lib_three_way_comparison): Only define
1682 when __cpp_lib_concepts is defined.
1683 * libsupc++/compare (__cpp_lib_three_way_comparison): Likewise.
1684
b4e70137
JW
16852020-01-03 Jonathan Wakely <jwakely@redhat.com>
1686
1687 * include/bits/stl_algobase.h (lexicographical_compare_three_way):
1688 Only define four-argument overload when __cpp_lib_concepts is defined.
1689
a8497ec6
JDA
16902020-01-01 John David Anglin <danglin@gcc.gnu.org>
1691
1692 * config/abi/post/hppa-linux-gnu/baseline_symbols.txt: Update.
1693
8d9254fc 16942020-01-01 Jakub Jelinek <jakub@redhat.com>
5624e564
JJ
1695
1696 Update copyright years.
b4df5e92 1697\f
8d9254fc 1698Copyright (C) 2020 Free Software Foundation, Inc.
b4df5e92
JW
1699
1700Copying and distribution of this file, with or without modification,
1701are permitted in any medium without royalty provided the copyright
1702notice and this notice are preserved.