François Dumont
c0cb38c28e
re PR libstdc++/89477 (Incorrect CTAD deduction guides for set and multiset)
...
2019-03-08 François Dumont <fdumont@gcc.gnu.org>
PR libstdc++/89477
* include/debug/map.h (map): Use _RequireNotAllocator to constrain
parameters in deduction guides.
* include/debug/multimap.h (multimap): Likewise.
* include/debug/set.h (multimap): Likewise.
* include/debug/multiset.h (multimap): Likewise.
* include/debug/unordered_map (unordered_map): Likewise.
(unordered_multimap): Likewise.
* include/debug/unordered_set (unordered_set): Likewise.
(unordered_multiset): Likewise.
From-SVN: r269479
2019-03-08 05:53:09 +00:00
François Dumont
20a4550ce0
re PR libstdc++/89608 (Undetected iterator invalidations on unordered containers in debug mode)
...
2019-03-08 François Dumont <fdumont@gcc.gnu.org>
PR libstdc++/89608
* include/debug/unordered_map (unordered_map<>::_M_check_rehashed):
Invalidate all iterators in case of rehash.
(unordered_multimap<>::_M_check_rehashed): Likewise.
* include/debug/unordered_set
(unordered_set<>::_M_check_rehashed): Likewise.
(unordered_multiset<>::_M_check_rehashed): Likewise.
* testsuite/23_containers/unordered_set/debug/89608_neg.cc: New.
From-SVN: r269478
2019-03-08 05:37:50 +00:00
Ulrich Drepper
d715f55431
Fix after P0600.
...
gcc/testsuite/ChangeLog
2019-02-20 Ulrich Drepper <drepper@redhat.com>
Fix after P0600.
* g++.dg/init/new39.C: Don't just ignore result of new.
libstdc++/ChangeLog
2019-02-20 Ulrich Drepper <drepper@redhat.com>
Implement C++20 P0600r1.
* include/backward/hash_map: Add nodiscard attribute to empty.
* include/backward/hash_set: Likewise.
* backward/hashtable.h: Likewise.
* include/bits/basic_string.h: Likewise.
* include/bits/forward_list.h: Likewise.
* include/bits/hashtable.h: Likewise.
* include/bits/regex.h: Likewise.
* include/bits/stl_deque.h: Likewise.
* include/bits/stl_list.h: Likewise.
* include/bits/stl_map.h: Likewise.
* include/bits/stl_multimap.h: Likewise.
* include/bits/stl_multiset.h: Likewise.
* include/bits/stl_queue.h: Likewise.
* include/bits/stl_set.h: Likewise.
* include/bits/stl_stack.h: Likewise.
* include/bits/stl_tree.h: Likewise.
* include/bits/stl_vector.h: Likewise.
* include/bits/unordered_map.h: Likewise.
* include/bits/unordered_set.h: Likewise.
* include/debug/array: Likewise.
* include/experimental/any: Likewise.
* include/experimental/bits/fs_path.h: Likewise.
* include/experimental/internet: Likewise.
* include/experimental/string_view: Likewise.
* include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp:
Likewise.
* include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp:
Likewise.
* include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp:
Likewise.
* include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp:
Likewise.
* include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp:
Likewise.
* include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp:
Likewise.
* include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp:
Likewise.
* include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp:
Likewise.
* include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp:
Likewise.
*
include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp:
Likewise.
* include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp:
Likewise.
* include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp:
Likewise.
* include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp:
Likewise.
* include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hp:
Likewise.
* include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp:
Likewise.
* include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp:
Likewise.
* include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp:
Likewise.
* include/ext/pb_ds/detail/tree_trace_base.hpp: Likewise.
* include/ext/pb_ds/trie_policy.hpp: Likewise.
* include/ext/rope: Likewise.
* include/ext/slist: Likewise.
* include/ext/vstring.h: Likewise.
* include/profile/array: Likewise.
* include/std/array: Likewise.
* include/tr1/array: Likewise.
* include/tr1/hashtable.h: Likewise.
* include/tr1/regex: Likewise.
* include/tr2/dynamic_bitset: Likewise.
* include/bits/alloc_traits.h: Add nodiscard attribute to
allocate.
* include/experimental/memory_resource: Likewise.
* include/ext/alloc_traits.h: Likewise.
* include/ext/array_allocator.h: Likewise.
* include/ext/bitmap_allocator.h: Likewise.
* include/ext/debug_allocator.h: Likewise.
* include/ext/extptr_allocator.h: Likewise.
* include/ext/mt_allocator.h: Likewise.
* include/ext/new_allocator.h: Likewise.
* include/ext/pool_allocator.h: Likewise.
* include/ext/throw_allocator.h: Likewise.
* include/std/scoped_allocator: Likewise.
* libsupc++/eh_alloc.cc: Likewise.
* include/std/future: Add nodiscard attribute to async.
* libsupc++/new: Add nodiscard attribute to new.
From-SVN: r268111
2019-01-21 11:47:30 +00:00
Jonathan Wakely
3c732e6fe8
PR libstdc++/88607 replace or remove unnecessary UTF-8 characters
...
There are a number of UTF-8 characters in comments which add no value
and can be replaced with ASCII equivalents, or removed entirely for the
section sign (U+00A7).
PR libstdc++/88607
* include/bits/forward_list.h: Replace UTF-8 "ligature fi" character.
* include/debug/forward_list: Likewise.
* include/experimental/bits/shared_ptr.h: Remove UTF-8 "section sign"
character.
* include/experimental/chrono: Likewise.
* include/experimental/functional: Likewise.
* include/experimental/ratio: Likewise.
* include/experimental/system_error: Likewise.
* include/experimental/tuple: Likewise.
* include/experimental/type_traits: Likewise.
* include/parallel/workstealing.h: Replace UTF-8 "en dash" character.
* include/parallel/multiseq_selection.h: Likewise.
From-SVN: r267564
2019-01-03 20:38:11 +00:00
Jakub Jelinek
a554497024
Update copyright years.
...
From-SVN: r267494
2019-01-01 13:31:55 +01:00
John Bytheway
cdc71993cf
re PR libstdc++/87872 (debug list::splice should not call _M_transfer_from_if on self-splices)
...
2018-11-06 John Bytheway <jbytheway@gmail.com>
PR libstdc++/87872
* include/debug/safe_sequence.tcc
(_Safe_sequence<>::_M_transfer_from_if): Skip transfer to self.
From-SVN: r265851
2018-11-06 20:20:06 +00:00
François Dumont
4b763deedb
2018-10-24 François Dumont <fdumont@gcc.gnu.org>
...
* include/debug/safe_unordered_container.h
(_Safe_unordered_container<>::_M_invalidate_locals): Take lambda
parameter type from local end variable.
(_Safe_unordered_container<>::_M_invalidate_all): Likewise.
* include/debug/unordered_map
(unordered_map<>::begin()): Use C++11 direct initialization.
(unordered_map<>::end()): Likewise.
(unordered_map<>::cbegin()): Likewise.
(unordered_map<>::cend()): Likewise.
(unordered_map<>::begin(size_type)): Likewise.
(unordered_map<>::end(size_type)): Likewise.
(unordered_map<>::cbegin(size_type)): Likewise.
(unordered_map<>::cend(size_type)): Likewise.
(unordered_map<>::emplace<>(_Args&&...)): Likewise.
(unordered_map<>::emplace_hint<>(const_iterator, _Args&&...)): Likewise.
(unordered_map<>::insert(const value_type&)): Likewise.
(unordered_map<>::insert(value_type&&)): Likewise.
(unordered_map<>::insert<>(_Pair&&)): Likewise.
(unordered_map<>::insert(const_iterator, const value_type&)): Likewise.
(unordered_map<>::insert(const_iterator, value_type&&)): Likewise.
(unordered_map<>::insert<>(const_iterator, _Pair&&)): Likewise.
(unordered_map<>::try_emplace<>(const key_type&, _Args&&...)): Likewise.
(unordered_map<>::try_emplace<>(key_type&&, _Args&&...)): Likewise.
(unordered_map<>::try_emplace<>(const_iterator, const key_type&,
_Args&&...)): Likewise.
(unordered_map<>::try_emplace<>(const_iterator, key_type&&,
_Args&&...)): Likewise.
(unordered_map<>::insert_or_assign<>(const key_type&, _Obj&&)): Likewise.
(unordered_map<>::insert_or_assign<>(key_type&&, _Obj&&)): Likewise.
(unordered_map<>::insert_or_assign<>(const_iterator, const key_type&,
_Obj&&)): Likewise.
(unordered_map<>::insert_or_assign<>(const_iterator, key_type&&,
_Obj&&)): Likewise.
(unordered_map<>::insert(note_type&&)): Likewise.
(unordered_map<>::find(const key_type&)): Likewise.
(unordered_map<>::equal_range(const key_type&)): Likewise.
(unordered_map<>::_M_extract): New.
(unordered_map<>::extract(const_iterator)): Use latter.
(unordered_map<>::extract(const key_type&)): Likewise.
(unordered_map<>::_M_erase): New.
(unordered_map<>::erase(const key_type&)): Use latter.
(unordered_map<>::erase(const_iterator)): Likewise.
(unordered_map<>::erase(iterator)): Likewise.
(unordered_map<>::_M_invalidate): New.
(unordered_map<>::erase(const_iterator, const_iterator)): Use latter.
(unordered_multimap<>::begin()): Use C++11 direct initialization.
(unordered_multimap<>::end()): Likewise.
(unordered_multimap<>::cbegin()): Likewise.
(unordered_multimap<>::cend()): Likewise.
(unordered_multimap<>::begin(size_type)): Likewise.
(unordered_multimap<>::end(size_type)): Likewise.
(unordered_multimap<>::cbegin(size_type)): Likewise.
(unordered_multimap<>::cend(size_type)): Likewise.
(unordered_multimap<>::emplace<>(_Args&&...)): Likewise.
(unordered_multimap<>::emplace_hint<>(const_iterator, _Args&&...)): Likewise.
(unordered_multimap<>::insert(const value_type&)): Likewise.
(unordered_multimap<>::insert(const_iterator, const value_type&)): Likewise.
(unordered_multimap<>::insert(const_iterator, value_type&&)): Likewise.
(unordered_multimap<>::insert<>(_Pair&&)): Likewise.
(unordered_multimap<>::insert<>(const_iterator, _Pair&&)): Likewise.
(unordered_multimap<>::insert(note_type&&)): Likewise.
(unordered_multimap<>::insert(const_iterator, note_type&&)): Likewise.
(unordered_multimap<>::find(const key_type&)): Likewise.
(unordered_multimap<>::equal_range(const key_type&)): Likewise.
(unordered_multimap<>::_M_extract): New.
(unordered_multimap<>::extract(const_iterator)): Use latter.
(unordered_multimap<>::extract(const key_type&)): Likewise.
(unordered_multimap<>::_M_erase): New.
(unordered_multimap<>::erase(const_iterator)): Likewise.
(unordered_multimap<>::erase(iterator)): Likewise.
(unordered_multimap<>::_M_invalidate): New.
(unordered_multimap<>::erase(const key_type&)): Use latter.
(unordered_multimap<>::erase(const_iterator, const_iterator)): Likewise.
* include/debug/unordered_set
(unordered_set<>::begin()): Use C++11 direct initialization.
(unordered_set<>::end()): Likewise.
(unordered_set<>::cbegin()): Likewise.
(unordered_set<>::cend()): Likewise.
(unordered_set<>::begin(size_type)): Likewise.
(unordered_set<>::end(size_type)): Likewise.
(unordered_set<>::cbegin(size_type)): Likewise.
(unordered_set<>::cend(size_type)): Likewise.
(unordered_set<>::emplace<>(_Args&&...)): Likewise.
(unordered_set<>::emplace_hint<>(const_iterator, _Args&&...)): Likewise.
(unordered_set<>::insert(const value_type&)): Likewise.
(unordered_set<>::insert(value_type&&)): Likewise.
(unordered_set<>::insert(const_iterator, const value_type&)): Likewise.
(unordered_set<>::insert(const_iterator, value_type&&)): Likewise.
(unordered_set<>::insert(note_type&&)): Likewise.
(unordered_set<>::insert(const_iterator, note_type&&)): Likewise.
(unordered_set<>::find(const key_type&)): Likewise.
(unordered_set<>::equal_range(const key_type&)): Likewise.
(unordered_set<>::_M_extract): New.
(unordered_set<>::extract(const_iterator)): Use latter.
(unordered_set<>::extract(const key_type&)): Likewise.
(unordered_set<>::_M_erase): New.
(unordered_set<>::erase(const key_type&)): Use latter.
(unordered_set<>::erase(const_iterator)): Likewise.
(unordered_set<>::erase(iterator)): Likewise.
(unordered_set<>::_M_invalidate): New.
(unordered_set<>::erase(const_iterator, const_iterator)): Use latter.
(unordered_multiset<>::begin()): Use C++11 direct initialization.
(unordered_multiset<>::end()): Likewise.
(unordered_multiset<>::cbegin()): Likewise.
(unordered_multiset<>::cend()): Likewise.
(unordered_multiset<>::begin(size_type)): Likewise.
(unordered_multiset<>::end(size_type)): Likewise.
(unordered_multiset<>::cbegin(size_type)): Likewise.
(unordered_multiset<>::cend(size_type)): Likewise.
(unordered_multiset<>::emplace<>(_Args&&...)): Likewise.
(unordered_multiset<>::emplace_hint<>(const_iterator, _Args&&...)): Likewise.
(unordered_multiset<>::insert(const value_type&)): Likewise.
(unordered_multiset<>::insert(const_iterator, const value_type&)): Likewise.
(unordered_multiset<>::insert(value_type&&)): Likewise.
(unordered_multiset<>::insert(const_iterator, value_type&&)): Likewise.
(unordered_multiset<>::insert(node_type&&)): Likewise.
(unordered_multiset<>::insert(const_iterator, node_type&&)): Likewise.
(unordered_multiset<>::find(const key_type&)): Likewise.
(unordered_multiset<>::equal_range(const key_type&)): Likewise.
(unordered_multiset<>::_M_extract): New.
(unordered_multiset<>::extract(const_iterator)): Use latter.
(unordered_multiset<>::extract(const key_type&)): Likewise.
(unordered_multiset<>::_M_erase): New.
(unordered_multiset<>::erase(const_iterator)): Likewise.
(unordered_multiset<>::erase(iterator)): Likewise.
(unordered_multiset<>::_M_invalidate): New.
(unordered_multiset<>::erase(const key_type&)): Use latter.
(unordered_multiset<>::erase(const_iterator, const_iterator)): Likewise.
From-SVN: r265451
2018-10-24 05:40:25 +00:00
Jonathan Wakely
7b1e8acfae
Fix testsuite failures in Debug Mode
...
This fixes the following testsuite failures on ia32 when compiled with
-D_GLIBCXX_DEBUG:
FAIL: 23_containers/map/modifiers/erase/dr130-linkage-check.cc
FAIL: 23_containers/multimap/modifiers/erase/dr130-linkage-check.cc
FAIL: 23_containers/multiset/modifiers/erase/dr130-linkage-check.cc
FAIL: 23_containers/set/modifiers/erase/dr130-linkage-check.cc
The normal mode containers already use the abi-tag to mangle these
overloads differently, but the debug mode versions weren't fixed.
* include/debug/map.h (map::erase(iterator)): Add abi-tag so that
C++11 version mangles differently from incompatible C++98 version.
* include/debug/multimap.h (multimap::erase(iterator)): Likewise.
* include/debug/multiset.h (multiset::erase(iterator))
(multiset::erase(const_iterator, const_iterator)): Likewise.
* include/debug/set.h (set::erase(iterator))
(multiset::erase(const_iterator, const_iterator)): Likewise.
From-SVN: r265313
2018-10-19 14:37:05 +01:00
François Dumont
7702ab653a
revert: [multiple changes]
...
2018-10-18 François Dumont <fdumont@gcc.gnu.org>
Partial revert.
2018-10-08 François Dumont <fdumont@gcc.gnu.org>
* include/debug/list (list<>::cbegin()): Use C++11 direct
initialization.
(list<>::cend()): Likewise.
(list<>::erase(const_iterator, const_iterator)): Ensure consistent
iterator comparisons.
(list<>::splice(const_iterator, list&&, const_iterator,
const_iterator)): Likewise.
Partial revert.
2018-10-15 François Dumont <fdumont@gcc.gnu.org>
* include/debug/vector (vector<>::cbegin()): Use C++11 direct
initialization.
(vector<>::cend()): Likewise.
(vector<>::insert(const_iterator, const _Tp&)): Use consistent
iterator comparison.
(vector<>::erase(const_iterator)): Likewise.
(vector<>::erase(const_iterator, const_iterator)): Likewise.
From-SVN: r265259
2018-10-18 05:36:02 +00:00
François Dumont
4b186707ee
vector (vector<>::cbegin()): Use C++11 direct initialization.
...
2018-10-15 François Dumont <fdumont@gcc.gnu.org>
* include/debug/vector (vector<>::cbegin()): Use C++11 direct
initialization.
(vector<>::cend()): Likewise.
(vector<>::emplace(const_iterator, _Args&&...)): Likewise and use
consistent iterator comparison.
(vector<>::insert(const_iterator, size_type, const _Tp&)): Likewise.
(vector<>::insert(const_iterator, _InputIterator, _InputIterator)):
Likewise.
(vector<>::erase(const_iterator)): Likewise.
(vector<>::erase(const_iterator, const_iterator)): Likewise.
From-SVN: r265156
2018-10-15 05:24:51 +00:00
François Dumont
3e670ecf0b
2018-10-11 François Dumont <fdumont@gcc.gnu.org>
...
* include/debug/forward_list
(forward_list<>::before_begin()): Use C++11 direct initialization.
(forward_list<>::begin()): Likewise.
(forward_list<>::end()): Likewise.
(forward_list<>::cbefore_begin()): Likewise.
(forward_list<>::cbegin()): Likewise.
(forward_list<>::cend()): Likewise.
(forward_list<>::emplace_after<>(const_iterator, _Args&&...)): Likewise.
(forward_list<>::insert_after(const_iterator, const _Tp&)): Likewise.
(forward_list<>::insert_after(const_iterator, _Tp&&)): Likewise.
(forward_list<>::insert_after(const_iterator, size_type, const _Tp&)):
Likewise.
(forward_list<>::insert_after(const_iterator, initializer_list<>)):
Likewise.
(forward_list<>::erase_after(const_iterator)): Likewise.
(forward_list<>::erase_after(const_iterator, const_iterator)): Likewise
and ensure consistent iterator comparison.
From-SVN: r265061
2018-10-11 20:47:13 +00:00
François Dumont
edec2bad9a
list (list<>::cbegin()): Use C++11 direct initialization.
...
2018-10-08 François Dumont <fdumont@gcc.gnu.org>
* include/debug/list (list<>::cbegin()): Use C++11 direct
initialization.
(list<>::cend()): Likewise.
(list<>::emplace<>(const_iterator, _Args&&...)): Likewise.
(list<>::insert(const_iterator, initializer_list<>)): Likewise.
(list<>::insert(const_iterator, size_type, const _Tp&)): Likewise.
(list<>::erase(const_iterator, const_iterator)): Ensure consistent
iterator comparisons.
(list<>::splice(const_iterator, list&&, const_iterator,
const_iterator)): Likewise.
From-SVN: r264911
2018-10-08 05:49:12 +00:00
François Dumont
e0b9bc230a
2018-10-05 François Dumont <fdumont@gcc.gnu.org>
...
* include/bits/stl_tree.h
(_Rb_tree_iterator<>::operator==): Make inline friend.
(_Rb_tree_iterator<>::operator!=): Likewise.
(_Rb_tree_const_iterator<>::operator==): Likewise.
(_Rb_tree_const_iterator<>::operator!=): Likewise.
(operator==(const _Rb_tree_iterator<>&,
const _Rb_tree_const_iterator&)): Remove.
(operator!=(const _Rb_tree_iterator<>&,
const _Rb_tree_const_iterator&)): Remove.
(operator==(const _Rb_tree<>&, const _Rb_tree<>&)): Make inline friend.
(operator<(const _Rb_tree<>&, const _Rb_tree<>&)): Likewise.
(operator!=(const _Rb_tree<>&, const _Rb_tree<>&)): Likewise and
deprecate.
(operator>(const _Rb_tree<>&, const _Rb_tree<>&)): Likewise.
(operator<=(const _Rb_tree<>&, const _Rb_tree<>&)): Likewise.
(operator>=(const _Rb_tree<>&, const _Rb_tree<>&)): Likewise.
* include/debug/map.h (map<>::erase(const_iterator, const_iterator)):
Compare __victim with _Base::cend().
* include/debug/multimap.h
(multimap<>::erase(const_iterator, const_iterator)): Likewise.
* include/debug/set.h (set<>::erase(const_iterator, const_iterator)):
Compare __victim with _Base::cend().
* include/debug/multiset.h
(multiset<>::erase(const_iterator, const_iterator)): Likewise.
From-SVN: r264875
2018-10-05 16:01:39 +00:00
François Dumont
784779d471
2018-10-03 François Dumont <fdumont@gcc.gnu.org>
...
* include/debug/map.h
(map<>::emplace<>(_Args&&...)): Use C++11 direct initialization.
(map<>::emplace_hint<>(const_iterator, _Args&&...)): Likewise.
(map<>::insert(value_type&&)): Likewise.
(map<>::insert<>(_Pair&&)): Likewise.
(map<>::insert<>(const_iterator, _Pair&&)): Likewise.
(map<>::try_emplace): Likewise.
(map<>::insert_or_assign): Likewise.
(map<>::insert(node_type&&)): Likewise.
(map<>::insert(const_iterator, node_type&&)): Likewise.
(map<>::erase(const_iterator)): Likewise.
(map<>::erase(const_iterator, const_iterator)): Likewise.
* include/debug/multimap.h
(multimap<>::emplace<>(_Args&&...)): Use C++11 direct initialization.
(multimap<>::emplace_hint<>(const_iterator, _Args&&...)): Likewise.
(multimap<>::insert<>(_Pair&&)): Likewise.
(multimap<>::insert<>(const_iterator, _Pair&&)): Likewise.
(multimap<>::insert(node_type&&)): Likewise.
(multimap<>::insert(const_iterator, node_type&&)): Likewise.
(multimap<>::erase(const_iterator)): Likewise.
(multimap<>::erase(const_iterator, const_iterator)): Likewise.
* include/debug/set.h
(set<>::emplace<>(_Args&&...)): Use C++11 direct initialization.
(set<>::emplace_hint<>(const_iterator, _Args&&...)): Likewise.
(set<>::insert(value_type&&)): Likewise.
(set<>::insert<>(const_iterator, value_type&&)): Likewise.
(set<>::insert(const_iterator, node_type&&)): Likewise.
(set<>::erase(const_iterator)): Likewise.
(set<>::erase(const_iterator, const_iterator)): Likewise.
* include/debug/multiset.h
(multiset<>::emplace<>(_Args&&...)): Use C++11 direct initialization.
(multiset<>::emplace_hint<>(const_iterator, _Args&&...)): Likewise.
(multiset<>::insert<>(value_type&&)): Likewise.
(multiset<>::insert<>(const_iterator, value_type&&)): Likewise.
(multiset<>::insert(node_type&&)): Likewise.
(multiset<>::insert(const_iterator, node_type&&)): Likewise.
(multiset<>::erase(const_iterator)): Likewise.
(multiset<>::erase(const_iterator, const_iterator)): Likewise.
From-SVN: r264805
2018-10-03 05:50:01 +00:00
François Dumont
5c441345a3
functions.h (__foreign_iterator_aux3(const _Safe_iterator<>&, const _InputeIter&, const _InputIter&, __true_type)): Use empty() rather than begin() == end().
...
2018-09-28 François Dumont <fdumont@gcc.gnu.org>
* include/debug/functions.h
(__foreign_iterator_aux3(const _Safe_iterator<>&, const _InputeIter&,
const _InputIter&, __true_type)): Use empty() rather than begin() ==
end().
From-SVN: r264699
2018-09-28 20:26:29 +00:00
François Dumont
b101633fa6
2018-09-02 François Dumont <fdumont@gcc.gnu.org>
...
* include/debug/safe_iterator.h
(_Safe_iterator<_It, _Seq, _Cat>::_Self): New.
(_Safe_iterator<_It, _Seq, std::random_access_iterator_tag>::_Self):
New.
(_Safe_iterator<_It, _Seq, std::random_access_iterator_tag>
::_OtherSelf): New.
(_GLIBCXX_DEBUG_VERIFY_OPERANDS, _GLIBCXX_DEBUG_VERIFY_EQ_OPERANDS)
(_GLIBCXX_DEBUG_VERIFY_REL_OPERANDS)
(_GLIBCXX_DEBUG_VERIFY_DIST_OPERANDS): Define macros.
(_Safe_iterator<_It, _Seq, std::random_access_iterator_tag>
::operator+(difference_type)): Use latters, inline as friend.
(_Safe_iterator<_It, _Seq, std::random_access_iterator_tag>
::operator-(difference_type)): Likewise.
(operator==(const _Safe_iterator<>&, const _Safe_iterator<>&)):
Likewise.
(operator!=(const _Safe_iterator<>&, const _Safe_iterator<>&)):
Likewise.
(operator<(const _Safe_iterator<>&, const _Safe_iterator<>&)): Likewise.
(operator<=(const _Safe_iterator<>&, const _Safe_iterator<>&)):
Likewise.
(operator>(const _Safe_iterator<>&, const _Safe_iterator<>&)): Likewise.
(operator>=(const _Safe_iterator<>&, const _Safe_iterator<>&)):
Likewise.
(operator-(const _Safe_iterator<>&, const _Safe_iterator<>&)): Likewise.
(operator+(difference_type, const _Safe_iterator<>&)): Likewise.
(operator-(const _Safe_iterator<>&, difference_type)): Likewise.
* include/debug/safe_iterator.tcc
(_Safe_iterator<>::_M_can_advance(difference_type)): Take parameter by
copy.
* include/debug/safe_local_iterator.h
(_Safe_local_iterator<_It, _Seq>::_Self): New.
(_Safe_local_iterator<_It, _Seq>::_OtherSelf): New.
(_GLIBCXX_DEBUG_VERIFY_OPERANDS): Define macro.
(operator==(const _Safe_local_iterator<>&,
const _Safe_local_iterator<>&)): Use latter, inline as friend.
(operator!=(const _Safe_local_iterator<>&,
const _Safe_local_iterator<>&)): Likewise.
* testsuite/util/testsuite_containers.h: Include utility.
(struct forward_members_unordered<_Tp, bool>): Remove 2nd template
parameter.
(forward_members_unordered<>::forward_members_unordered(value_type&)):
Add using namespace std::rel_ops.
Add iterator_concept_checks on local_iterator and const_local_iterator.
Add asserts on comparison between const_local_iterator and
local_iterator.
(struct forward_members_unordered<_Tp, false>): Remove partial
specialization.
* testsuite/23_containers/forward_list/types/1.cc: New.
* testsuite/23_containers/list/types/1.cc: New.
From-SVN: r264039
2018-09-02 10:20:57 +00:00
Jonathan Wakely
9ca2ac699a
Forward declare debug containers so std::pmr aliases work
...
Prior to this change, including a <debug/xxx> header when _GLIBCXX_DEBUG
is also defined would fail to compile in C++17 or later. The <debug/xxx>
header would include the standard <xxx> header which defined
std::pmr::xxx as an alias for std::xxx. But in Debug Mode std::xxx
refers to std::__debug::xxx which has not been defined yet (because it
is in <debug/xxx> after the inclusion of <xxx>).
This adds declarations of the debug containers before including the
non-Debug Mode <xxx> header, so that the std::pmr::xxx aliases work.
* include/debug/deque (std::__debug::deque): Declare.
* include/debug/forward_list (std::__debug::forward_list): Declare.
* include/debug/list (std::__debug::list): Declare.
* include/debug/map (std::__debug::map): Declare.
* include/debug/set (std::__debug::set): Declare.
* include/debug/unordered_map (std::__debug::unordered_map): Declare.
* include/debug/unordered_set (std::__debug::unordered_set): Declare.
* include/debug/vector (std::__debug::vector): Declare.
* testsuite/23_containers/deque/types/pmr_typedefs_debug.cc: New test.
* testsuite/23_containers/forward_list/pmr_typedefs_debug.cc: New
test.
* testsuite/23_containers/list/pmr_typedefs_debug.cc: New test.
* testsuite/23_containers/map/pmr_typedefs_debug.cc: New test.
* testsuite/23_containers/multimap/pmr_typedefs_debug.cc: New test.
* testsuite/23_containers/multiset/pmr_typedefs_debug.cc: New test.
* testsuite/23_containers/set/pmr_typedefs_debug.cc: New test.
* testsuite/23_containers/unordered_map/pmr_typedefs_debug.cc: New
test.
* testsuite/23_containers/unordered_multimap/pmr_typedefs_debug.cc:
New test.
* testsuite/23_containers/unordered_multiset/pmr_typedefs_debug.cc:
New test.
* testsuite/23_containers/unordered_set/pmr_typedefs_debug.cc: New
test.
* testsuite/23_containers/vector/cons/destructible_debug_neg.cc:
Adjust dg-error lineno.
* testsuite/23_containers/vector/types/pmr_typedefs_debug.cc: New
test.
From-SVN: r263839
2018-08-24 18:43:18 +01:00
Jonathan Wakely
568d5ee44d
Define debug mode function for C++98
...
This function is declared unconditionally but was only defined for C++11
and later, leading to linker errors when the testsuite was run with
-std=gnu++98 -D_GLIBCXX_DEBUG added to the flags.
* include/debug/vector (__niter_base): Define for C++98.
From-SVN: r263816
2018-08-23 16:23:31 +01:00
Jonathan Wakely
21bf6b2a93
Fix C++11-ism in C++98 member function
...
* include/debug/string (insert(__const_iterator, _InIter, _InIter)):
[!_GLIBCXX_USE_CXX11_ABI]: Replace use of C++11-only cbegin() with
begin(), for C++98 compatibility.
From-SVN: r263809
2018-08-23 12:21:17 +01:00
Jonathan Wakely
3eb1eda1c8
Fix testsuite failures for __gnu_debug::string with old ABI
...
The __gnu_debug string (mostly) implements the C++11 API, but when it
wraps the old COW string many of the member functions in the base class
have the wrong parameter types or return types. This makes the
__gnu_debug::string type adapt itself to the base class API. This
actually makes the debug string slightly more conforming than the
underlying string type when using the old ABI.
* include/bits/basic_string.h [_GLIBCXX_USE_CXX11_ABI]
(basic_string::__const_iterator): Change access to protected.
[!_GLIBCXX_USE_CXX11_ABI] (basic_string::__const_iterator): Define
as typedef for iterator.
* include/debug/string (__const_iterator): Use typedef from base.
(insert(const_iterator, _CharT))
(replace(const_iterator, const_iterator, const basic_string&))
(replace(const_iterator, const_iterator, const _CharT*, size_type))
(replace(const_iterator, const_iterator, const CharT*))
(replace(const_iterator, const_iterator, size_type, _CharT))
(replace(const_iterator, const_iterator, _InputIter, _InputIter))
(replace(const_iterator, const_iterator, initializer_list<_CharT>)):
Change const_iterator parameters to __const_iterator.
(insert(iterator, size_type, _CharT)): Add C++98 overload.
(insert(const_iterator, _InputIterator, _InputIterator)): Change
const_iterator parameter to __const_iterator.
[!_GLIBCXX_USE_CXX11_ABI]: Add workaround for incorrect return type
of base's member function.
(insert(const_iterator, size_type, _CharT)) [!_GLIBCXX_USE_CXX11_ABI]:
Likewise.
(insert(const_iterator, initializer_list<_CharT>))
[!_GLIBCXX_USE_CXX11_ABI]: Likewise.
* testsuite/21_strings/basic_string/init-list.cc: Remove effective
target directive.
From-SVN: r263808
2018-08-23 11:51:52 +01:00
François Dumont
e9afbed0d6
re PR libstdc++/68222 (_Safe_iterator provides operators the wrapped iterator can't actually support)
...
2018-08-22 François Dumont <fdumont@gcc.gnu.org>
PR libstdc++/68222
* include/debug/safe_iterator.h
(_Safe_iterator<_It, _Sq, _Cat>): Add category template parameter.
(_Safe_iterator<>::_Const_iterator): Remove.
(_Safe_iterator<>::_IsConstant): New.
(_Safe_iterator<>::_OtherIterator): New.
(_Safe_iterator<_It, _Sq, _Cat>::_Safe_iterator<_MutIte>(
const _Safe_iterator<_MutIte, _Sq, _Cat>&)): Add _IsConstant::__value in
__gnu_cxx::__enable_if condition.
(_Safe_iterator<_It, _Sq, _Cat>::_M_get_distance_to): New.
(_Safe_iterator<_It, _Sq, _Cat>::_M_get_distance_from_begin): New.
(_Safe_iterator<_It, _Sq, _Cat>::_M_get_distance_to_end): New.
(_Safe_iterator<_It, _Sq, std::bidirectional_iterator_tag>): New.
(_Safe_iterator<_It, _Sq, _Cat>::operator--()): Move...
(_Safe_iterator<_It, _Sq, std::bidirectional_iterator_tag>
::operator--()): ...here.
(_Safe_iterator<_It, _Sq, _Cat>::operator--(int)): Move...
(_Safe_iterator<_It, _Sq, std::bidirectional_iterator_tag>
::operator--(int)): ...here.
(_Safe_iterator<_It, _Sq, _Cat>::_M_decrementable()): Move...
(_Safe_iterator<_It, _Sq, std::bidirectional_iterator_tag>
::_M_decrementable()): ...here.
(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>): New.
(_Safe_iterator<_It, _Sq, _Cat>::operator[](const difference_type&)):
Move...
(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>
::operator[](const difference_type&)): ...here.
(_Safe_iterator<_It, _Sq, _Cat>::operator+=(const difference_type&)):
Move...
(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>
::operator+=(const difference_type&)): ...here.
(_Safe_iterator<_It, _Sq, _Cat>::operator+(const difference_type&)):
Move...
(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>
::operator+(const difference_type&)): ...here.
(_Safe_iterator<_It, _Sq, _Cat>::operator-=(const difference_type&)):
Move...
(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>
::operator-=(const difference_type&)): ...here.
(_Safe_iterator<_It, _Sq, _Cat>::operator-(const difference_type&)):
Move...
(_Safe_iterator<_It, _Sq, std::random_access_iterator_tag>
::operator-(const difference_type&)): ...here.
(operator<(const _Safe_iterator<>&, const _Safe_iterator<>&)):
Constraint to random access iterators.
(operator<=(const _Safe_iterator<>&, const _Safe_iterator<>&)):
Likewise.
(operator>(const _Safe_iterator<>&, const _Safe_iterator<>&)): Likewise.
(operator>=(const _Safe_iterator<>&, const _Safe_iterator<>&)):
Likewise.
(operator-(const _Safe_iterator<>&, const _Safe_iterator<>&)): Likewise.
(operator+(const difference_type&, const _Safe_iterator<>&)): Likewise.
(__check_dereferenceable(const _Safe_iterator<>&)): Remove.
(__get_distance): Remove.
(__get_distance_from_begin): Remove.
(__get_distance_to_end): Remove.
(struct __is_safe_random_iterator<_Safe_iterator<>>): Remove partial
specialization.
(__base(const _Safe_iterator<>&, std::input_iterator_tag)): Remove.
(__base(const _Safe_iterator<>&, std::random_access_iterator_tag)): Remove.
(__base(const _Safe_iterator<>&)): Constraint to random access iterator.
* include/debug/safe_iterator.tcc
(_Safe_iterator<>::_M_get_distance_from_begin()): New.
(_Safe_iterator<>::_M_get_distance_to_end()): New.
(_Safe_iterator<>::_M_get_distance_to(const _Safe_iterator<>&)): New.
(_Safe_iterator<_It, _Seq, std::random_access_iterator_tag>
::_M_valid_range): New.
* include/debug/safe_local_iterator.h
(_Safe_local_iterator<>::_Const_local_iterator): Remove.
(_Safe_local_iterator<>::_IsConstant): New.
(_Safe_local_iterator<>::_OtherIterator): New.
(_Safe_local_iterator<_It, _Cont>::_Safe_local_iterator<_MutIte, _Cont>(
const _Safe_local_iterator<_MutIte, _Seq>&)): Add _IsConstant::__value
in __gnu_cxx::__enable_if condition. If singular compare base iterator
with _MutIte rather than _It.
(_Safe_local_iterator<>::_S_constant): Make constexpr.
(_Safe_local_iterator<>::_M_get_distance_to): New.
(__check_dereferenceable(const _Safe_local_iterator<>&)): Remove.
(__get_distance(const _Safe_local_iterator<>&,
const _Safe_local_iterator<>&, std::input_iterator_tag)): Remove.
(__valid_range(const _Safe_local_iterator<>&,
const _Safe_local_iterator<>&)): New.
* include/debug/safe_local_iterator.tcc
(_Safe_local_iterator<>::_M_get_distance_to): New.
* include/debug/deque (std::__debug::deque<>): Add
::__gnu_debug::_Safe_iterator<> friend declaration.
* include/debug/forward_list (std::__debug::forward_list<>): Likewise.
* include/debug/list (std::__debug::list<>): Likewise.
* include/debug/map.h (std::__debug::map<>): Likewise.
* include/debug/multimap.h (std::__debug::multimap<>): Likewise.
* include/debug/set.h (std::__debug::set<>): Likewise.
* include/debug/multiset.h (std::__debug::multiset<>): Likewise.
* include/debug/string (std::__debug::basic_string<>): Likewise.
* include/debug/unordered_map (std::__debug::unordered_map<>): Likewise
and add ::__gnu_debug::_Safe_local_iterator<> friend declaration.
(std::__debug::unordered_multimap<>): Likewise.
* include/debug/unordered_set (std::__debug::unordered_set<>): Likewise.
(std::__debug::unordered_multiset<>): Likewise.
* include/debug/formatter.h: Adapt.
* include/debug/helper_functions.h
(__gnu_debug::_Safe_local_iterator<>): Add declaration.
(__get_distance<_Ite>(_Ite, _Ite, std::random_access_iterator_tag):
Pass parameter by copy.
(__get_distance<_Ite>(_Ite, _Ite, std::input_iterator_tag): Likewise.
(__get_distance<_Ite>(_Ite, _Ite): Likewise.
(__valid_range_aux<_Integral>): Pass _Integral by copy.
(__valid_range<_InputIterator>): Pass _InputIterator by copy.
(__valid_range<>(const _Safe_iterator<>&,
const _Safe_iterator<>&, typename _Distance_traits<>::__type&)):
Declare.
(__valid_range(const _Safe_local_iterator<>&,
const _Safe_local_iterator<>&, typename _Distance_traits<>::__type&)):
Declare.
(__valid_range<>(const _Safe_iterator<>&, const _Safe_iterator<>&)):
Declare.
(__valid_range(const _Safe_local_iterator<>&, const _Safe_local_iterator<>&)):
Declare.
(__can_advance): Adapt.
(struct __is_safe_random_iterator<>): Remove.
(struct _SIter_base<>): Remove.
* include/debug/functions.h: Include <bits/stl_iterator.h>.
(__check_dereferenceable): Remove.
(__foreign_iterator_aux4, __foreign_iterator_aux3): Adapt.
(__foreign_iterator_aux2, __foreign_iterator_aux): Adapt.
(__foreign_iterator): Adapt.
* include/debug/stl_iterator.h
(__is_safe_random_iterator<std::reverse_iterator<>>): Remove.
(__base(const std::reverse_iterator<_Safe_iterator<_It, _Sq>)):
Constraint for random access iterators.
(__niter_base): Adapt.
* testsuite/util/testsuite_containers.h:
Include <bits/boost_concept_check.h>.
(iterator_concept_checks<_It, _Mutable, _Category>): New.
(citerator<_Cont>::forward_members::forward_members()): Instantiate
latter for container iterator and const_iterator.
* testsuite/23_containers/list/68222_neg.cc: New.
* testsuite/23_containers/vector/cons/destructible_debug_neg.cc: Adapt
line number.
* testsuite/23_containers/unordered_set/debug/debug_functions.cc:
(test01): Remove.
* testsuite/23_containers/vector/debug/debug_functions.cc (test01):
Remove.
From-SVN: r263786
2018-08-22 18:51:25 +00:00
François Dumont
f7191a37ee
P0646R1 Improving the Return Value of Erase-Like Algorithms I
...
2018-08-21 François Dumont <fdumont@gcc.gnu.org>
P0646R1 Improving the Return Value of Erase-Like Algorithms I
* include/debug/forward_list (forward_list::__remove_return_type):
Define typedef as size_type or void, according to __cplusplus value.
(_GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or
empty, according to __cplusplus value.
(_GLIBCXX20_ONLY): Define macro.
(forward_list::remove, forward_list::unique): Use typedef and macro
to change return type and add abi-tag for C++2a. Return number of
removed elements for C++2a.
(forward_list::remove_if<Pred>, forward_list::unique<BinPred>): Use
typedef to change return type for C++2a. Return number of removed
elements for C++2a.
* include/debug/list (list::__remove_return_type): Define typedef as
size_type or void, according to __cplusplus value.
(_GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or
empty, according to __cplusplus value.
(_GLIBCXX20_ONLY): Define macro.
(list::remove, list::unique): Use typedef and macro to change return
type and add abi-tag for C++2a. Return number of removed elements for
C++2a.
(list::remove_if<Predicate>, list::unique<BinaryPredicate>): Use typedef
to change return type for C++2a. Return number of removed elements for
C++2a.
From-SVN: r263752
2018-08-21 19:44:41 +00:00
François Dumont
1e736a9531
functions.h (__gnu_debug::__check_string): Move...
...
2018-07-06 François Dumont <fdumont@gcc.gnu.org>
* include/debug/functions.h (__gnu_debug::__check_string): Move...
* include/debug/string (__gnu_debug::__check_string): ... here.
(_GLIBCXX_DEBUG_VERIFY_STR_COND_AT): New.
(__glibcxx_check_string_n_constructor): New.
(__gnu_debug::basic_string<>(const _CharT*, size_type, const _Alloc&)):
Use latter.
(__glibcxx_check_string_constructor): New.
(__gnu_debug::basic_string<>(const _CharT*, const _Alloc&)):
Use latter.
* testsuite/21_strings/basic_string/debug/1_neg.cc: New.
* testsuite/21_strings/basic_string/debug/2_neg.cc: New.
From-SVN: r262480
2018-07-06 17:02:33 +00:00
François Dumont
96eb9df619
re PR libstdc++/86272 (__gnu_debug::string uses undefined __glibcxx_check_insert_range2)
...
2018-07-04 François Dumont <fdumont@gcc.gnu.org>
PR libstdc++/86272
* include/debug/string
(__gnu_debug::basic_string<>::insert<_Ite>(const_iterator, _Ite, _Ite)):
Use __glibcxx_check_insert_range.
* 21_strings/basic_string/cons/char/1.cc: Adapt test to use
__gnu_debug::string when _GLIBCXX_DEBUG.
* 21_strings/basic_string/init-list.cc: Likewise.
* 21_strings/basic_string/modifiers/insert/char/1.cc: Likewise.
* 21_strings/basic_string/modifiers/insert/char/2.cc: Likewise.
* 21_strings/basic_string/modifiers/insert/char/83328.cc: Likewise.
* 21_strings/basic_string/types/1.cc: Likewise.
From-SVN: r262417
2018-07-04 18:13:11 +00:00
François Dumont
315aadc864
stl_algobase.h (__niter_wrap): New.
...
2018-07-03 François Dumont <fdumont@gcc.gnu.org>
* include/bits/stl_algobase.h (__niter_wrap): New.
(__copy_move_a2(_II, _II, _OI)): Use latter.
(__copy_move_backward_a2(_BI1, _BI1, _BI2)): Likewise.
(fill_n(_OI, _Size, const _Tp&)): Likewise.
(equal(_II1, _II1, _II2)): Use __glibcxx_requires_can_increment.
* include/debug/stl_iterator.h
(std::__niter_base(const __gnu_cxx::_Safe_iterator<
__gnu_cxx::__normal_iterator<>, _Sequence>&)): New declaration.
* include/debug/vector (__niter_base(const __gnu_cxx::_Safe_iterator<
__gnu_cxx::__normal_iterator<>, _Sequence>&)): New.
From-SVN: r262349
2018-07-03 15:50:12 +00:00
François Dumont
e6cad9872b
stl_vector.h (struct _Vector_base<>::_Vector_impl_data): New.
...
2018-06-27 François Dumont <fdumont@gcc.gnu.org>
* include/bits/stl_vector.h
(struct _Vector_base<>::_Vector_impl_data): New.
(struct _Vector_base<>::_Vector_impl): Inherit from latter.
(_Vector_base<>::_Vector_impl::_M_swap_data): Move...
(_Vector_base<>::_Vector_impl_data::_M_swap_data): ...here.
(_Vector_base<>::_Vector_impl()): Add noexcept qualification.
(_Vector_base<>::_Vector_impl(_Vector_impl&&)): New.
(_Vector_base<>::_Vector_impl(_Tp_alloc_type&&, _Vector_impl&&)): New.
(_Vector_base(const allocator_type&, _Vector_base&&)): New, use latter.
(_Vector_base()): Default.
(_Vector_base(_Vector_base&&)): Default.
(_Vector_base(size_t)) [_GLIBCXX_INLINE_VERSION]: Delete.
(_Vector_base(_Tp_alloc_type&&)) [_GLIBCXX_INLINE_VERSION]: Delete.
(_Vector_base::_M_create_storage(size_t)): Make protected.
(vector()): Default.
(vector(vector&&)): Default.
(vector(vector&&, const allocator_type&, true_type)): New.
(vector(vector&&, const allocator_type&, false_type)): New.
(vector(vector&&, const allocator_type&)): Use latters.
(vector(_InputIte, _InputIte, const allocator_type&)): Call
_M_range_initialize directly.
* include/debug/vector
(vector(vector&&, const allocator_type&)): Add noexcept qualification.
* testsuite/23_containers/vector/allocator/default_init.cc: New.
* testsuite/23_containers/vector/cons/noexcept_move_construct.cc: Add
static assertions.
From-SVN: r262194
2018-06-27 20:23:20 +00:00
Jonathan Wakely
cda121ac7a
PR libstdc++/83328 add correct basic_string::insert for initializer_list
...
The SSO basic_string has a non-standard insert(iterator, initializer_list)
overload, from a C++0x draft. This adds the correct overload, while also
preserving the old one so that the old symbol is still exported from the
library.
The COW basic_string doesn't have any of the C++11 changes to the insert
overloads (they all still have non-const iterator parameters and the
ones that should return an iterator still return void). This doesn't
make any change to the COW string.
PR libstdc++/83328
* acinclude.m4 (libtool_VERSION): Bump to 6:26:0.
* config/abi/pre/gnu.ver: Add GLIBCXX_3.4.26 and export new symbol.
* configure: Regenerate.
* include/bits/basic_string.h [_GLIBCXX_USE_CXX11_ABI]
(basic_string::insert(const_iterator, initializer_list<C>)): Add.
[_GLIBCXX_USE_CXX11_ABI && !_GLIBCXX_DEFINING_STRING_INSTANTIATIONS]
(basic_string::insert(iterator, initializer_list<C>)): Suppress
definition.
* include/debug/string (basic_string::insert(iterator, C)): Change
first parameter to const_iterator.
(basic_string::insert(iterator, size_type, C)): Likewise. Change
return type to iterator.
(basic_string::insert(iterator, InputIterator, InputIterator)):
Likewise.
(basic_string::insert(iterator, initializer_list<C>)): Change first
parameter to const_iterator and return type to iterator.
* src/c++11/string-inst.cc: Extend comment.
* testsuite/21_strings/basic_string/modifiers/insert/char/83328.cc:
New.
* testsuite/21_strings/basic_string/modifiers/insert/wchar_t/83328.cc:
New.
* testsuite/util/testsuite_abi.cc: Add new symbol version.
From-SVN: r261866
2018-06-21 23:01:25 +01:00
François Dumont
802743baca
debug.h (_Safe_iterator<>(const _Safe_iterator<_MutableIterator,>& __x)): Compare __x base iterator with a default initialized iterator of the same type.
...
2018-06-21 François Dumont <fdumont@gcc.gnu.org>
* include/debug/debug.h
(_Safe_iterator<>(const _Safe_iterator<_MutableIterator,>& __x)):
Compare __x base iterator with a default initialized iterator of the
same type.
From-SVN: r261831
2018-06-21 05:36:48 +00:00
François Dumont
eb04ee1d0f
2018-06-13 François Dumont <fdumont@gcc.gnu.org>
...
* include/debug/helper_functions.h
(__gnu_debug::_Safe_iterator<>): Add declaration.
(__can_advance(_Ite, _Size)): New.
(__can_advance(const _Safe_iterator<>&, _Size)): Overload declaration.
* include/debug/functions.h
(__gnu_debug::_Safe_iterator<>): Remove declaration.
* include/debug/stl_iterator.h
(__can_advance(const _Safe_iterator<>&)): New definition.
* include/debug/stl_iterator.h
(__can_advance(const std::reverse_iterator<>&, _Size)): New.
(__can_advance(const std::move_iterator<>&, _Size)): New.
* include/debug/macros.h (__glibcxx_check_can_increment): New.
* include/debug/debug.h (__glibcxx_requires_can_increment): New.
* include/bits/stl_algobase.h (fill_n): Use latter.
* testsuite/25_algorithms/fill_n/2.cc: New.
* testsuite/25_algorithms/fill_n/debug/1_neg.cc: New.
* testsuite/25_algorithms/fill_n/debug/2_neg.cc: New.
* testsuite/25_algorithms/fill_n/debug/3_neg.cc: New.
* testsuite/25_algorithms/fill_n/debug/4_neg.cc: New.
From-SVN: r261566
2018-06-13 20:27:26 +00:00
François Dumont
cde650fe2b
debug.h (__glibcxx_requires_can_increment_range): New.
...
2018-06-13 François Dumont <fdumont@gcc.gnu.org>
* include/debug/debug.h (__glibcxx_requires_can_increment_range): New.
(__glibcxx_requires_can_decrement_range): New.
From-SVN: r261537
2018-06-13 06:10:03 +00:00
François Dumont
84a9d3b6c1
macros.h (__glibcxx_check_can_increment_range): New.
...
2018-06-12 François Dumont <fdumont@gcc.gnu.org>
* include/debug/macros.h (__glibcxx_check_can_increment_range): New.
(__glibcxx_check_can_decrement_range): New.
* include/debug/debug.h (__glibcxx_requires_can_increment_range): New.
(__glibcxx_requires_can_decrement_range): New.
* include/bits/stl_algobase.h (std::copy(_II, _II, _OI)): Use
__glibcxx_requires_can_increment_range.
(std::move(_II, _II, _OI)): Likewise.
(std::copy_backward(_BI, _BI, _BI2)): Use
__glibcxx_requires_can_decrement_range.
(std::move_backward(_BI, _BI, _BI2)): Likewise.
* testsuite/25_algorithms/copy_backward/debug/1_neg.cc: New.
* testsuite/25_algorithms/copy_backward/debug/2_neg.cc: New.
* testsuite/25_algorithms/copy_backward/debug/3_neg.cc: New.
* testsuite/25_algorithms/equal/debug/1_neg.cc: New.
* testsuite/25_algorithms/equal/debug/2_neg.cc: New.
* testsuite/25_algorithms/equal/debug/3_neg.cc: New.
From-SVN: r261525
2018-06-12 20:18:35 +00:00
François Dumont
8b0cd47a1c
2018-05-18 François Dumont <fdumont@gcc.gnu.org>
...
* include/bits/stl_tree.h
(_Rb_tree_impl(_Rb_tree_impl&&, _Node_allocator&&)): New.
(_Rb_tree(_Rb_tree&&, _Node_allocator&&, true_type)): New, use latter.
(_Rb_tree(_Rb_tree&&, _Node_allocator&&, false_type)): New.
(_Rb_tree(_Rb_tree&&, _Node_allocator&&)): Adapt, use latters.
* include/debug/map.h
(map(map&&, const_allocator_type&)): Add noexcept qualitication.
* include/debug/multimap.h
(multimap(multimap&&, const_allocator_type&)): Likewise.
* include/debug/set.h
(set(set&&, const_allocator_type&)): Likewise.
* include/debug/multiset.h
(multiset(multiset&&, const_allocator_type&)): Likewise.
* testsuite/23_containers/map/cons/noexcept_default_construct.cc:
Add checks.
* testsuite/23_containers/map/cons/noexcept_move_construct.cc:
Add checks.
* testsuite/23_containers/multimap/cons/noexcept_default_construct.cc:
Add checks.
* testsuite/23_containers/multimap/cons/noexcept_move_construct.cc:
Add checks.
* testsuite/23_containers/multiset/cons/noexcept_default_construct.cc:
Add checks.
* testsuite/23_containers/multiset/cons/noexcept_move_construct.cc:
Add checks.
* testsuite/23_containers/set/cons/noexcept_default_construct.cc:
Add checks.
* testsuite/23_containers/set/cons/noexcept_move_construct.cc:
Add checks.
From-SVN: r260382
2018-05-18 20:49:49 +00:00
François Dumont
6c882d0fdc
safe_iterator.h (_Safe_iterator<>::_M_constant()): Rename in...
...
2018-05-09 François Dumont <fdumont@gcc.gnu.org>
* include/debug/safe_iterator.h (_Safe_iterator<>::_M_constant()):
Rename in...
(_Safe_iterator<>::_S_constant()): ...that.
* include/debug/safe_local_iterator.h
(_Safe_local_iterator<>::_M_constant()): Rename in...
(_Safe_local_iterator<>::_S_constant()): ...that.
* include/debug/formatter.h: Remove bits/cpp_type_traits.h include.
(_Iterator_state::__rbegin): New.
(_Iterator_state::__rmiddle): New.
(_Iterator_state::__rend): New.
(_Parameter::_Parameter(const _Safe_iterator<>&, const char*,
_Is_iterator)): Use _Safe_iterator<>::_S_constant. Grab normal underlying
iterator type.
(_Parameter::_Parameter(const _Safe_local_iterator<>&, const char*,
_Is_iterator)): Likewise.
(_Parameter::_S_reverse_state(_Iterator_state)): New.
(_Parameter(__gnu_cxx::__normal_iterator<> const&, const char*,
_Is_iterator)): New.
(_Parameter(std::reverse_iterator<> const&, const char*,
_Is_iterator)): New.
(_Parameter(std::reverse_iterator<_Safe_iterator<>> const&,
const char*, _Is_iterator)): New.
(_Parameter(std::move_iterator<> const&, const char*, _Is_iterator):
New.
(_Parameter(std::move_iterator<_Safe_iterator<>> const&, const char*,
_Is_iterator)): New.
* testsuite/24_iterators/move_iterator/debug_neg.cc: New.
* testsuite/24_iterators/normal_iterator/debug_neg.cc: New.
* testsuite/24_iterators/reverse_iterator/debug_neg.cc: New.
From-SVN: r260093
2018-05-09 20:04:46 +00:00
François Dumont
90aabc7e9b
macros.h (__glibcxx_check_valid_range_at): New.
...
2018-05-08 François Dumont <fdumont@gcc.gnu.org>
* include/debug/macros.h (__glibcxx_check_valid_range_at): New.
* include/debug/functions.h (__check_valid_range): Use latter.
* include/debug/macros.h (__glibcxx_check_valid_constructor_range): New,
use latter.
* include/debug/deque
(deque::deque<_Iter>(_Iter, _Iter, const _Alloc&)): Use latter.
* include/debug/forward_list
(forward_list::forward_list<_Iter>(_Iter, _Iter, const _Alloc&)):
Likewise.
* include/debug/list
(list::list<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
* include/debug/list
(list::list<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
* include/debug/map.h
(map::map<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
(map::map<_Iter>(_Iter, _Iter, const _Compare&, const _Alloc&)):
Likewise.
* include/debug/multimap.h
(multimap::multimap<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
(multimap::multimap<_Iter>(_Iter, _Iter, const _Compare&,
const _Alloc&)): Likewise.
* include/debug/set.h
(set::set<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
(set::set<_Iter>(_Iter, _Iter, const _Compare&, const _Alloc&)):
Likewise.
* include/debug/multiset.h
(multiset::multiset<_Iter>(_Iter, _Iter, const _Alloc&)): Likewise.
(multiset::multiset<_Iter>(_Iter, _Iter, const _Compare&,
const _Alloc&)): Likewise.
* include/debug/string
(basic_string::basic_string<_Iter>(_Iter, _Iter, const _Alloc&)):
Likewise.
* include/debug/unordered_map
(unordered_map::unordered_map<_Iter>(_Iter, _Iter, const _Alloc&)):
Likewise.
(unordered_multimap::unordered_multimap<_Iter>(_Iter, _Iter,
const _Alloc&)): Likewise.
* include/debug/unordered_set
(unordered_set::unordered_set<_Iter>(_Iter, _Iter, const _Alloc&)):
Likewise.
(unordered_multiset::unordered_multiset<_Iter>(_Iter, _Iter,
const _Alloc&)): Likewise.
* include/debug/vector
(vector::vector<_Iter>(_Iter, _Iter, const _Alloc&)): Use latter.
From-SVN: r260053
2018-05-08 19:46:59 +00:00
François Dumont
a5277405c8
formatter.h (_Error_formatter::_M_function): New.
...
2018-05-08 François Dumont <fdumont@gcc.gnu.org>
* include/debug/formatter.h (_Error_formatter::_M_function): New.
(_Error_formatter(const char*, unsigned int)): Adapt.
(_Error_formatter::_M_at): Rename in...
(_Error_formatter::_S_at): ...that and adapt.
* include/debug/macros.h (_GLIBCXX_DEBUG_VERIFY_AT_F): New.
(_GLIBCXX_DEBUG_VERIFY_AT, _GLIBCXX_DEBUG_VERIFY): Adapt.
* src/c++11/debug.cc (_Error_formatter::_M_error): Render _M_function
when available.
From-SVN: r260052
2018-05-08 19:41:02 +00:00
François Dumont
5dfb5e5be8
re PR libstdc++/84998 (std::hash<std::bitset<N>> fails in Debug Mode)
...
2018-03-20 François Dumont <fdumont@gcc.gnu.org>
PR libstdc++/84998
* include/bits/stl_bvector.h: Fix std::hash friend declaration.
* include/std/bitset: Likewise.
* include/bits/stl_map.h (std::map<>): Fix _Rb_tree_merge_helper friend
declaration.
* include/bits/stl_multimap.h (std::multimap<>): Likewise.
* include/bits/stl_multiset.h (std::multiset<>): Likewise.
* include/bits/stl_set.h (std::set<>): Likewise.
* include/bits/unordered_map.h (std::unordered_map<>): Fix
_Hash_merge_helper friend declaration.
(std::unordered_multimap<>): Likewise.
* include/bits/unordered_set.h (std::unordered_set<>): Likewise.
(std::unordered_multiset<>): Likewise.
From-SVN: r258693
2018-03-20 21:45:14 +00:00
Jakub Jelinek
85ec4feb11
Update copyright years.
...
From-SVN: r256169
2018-01-03 11:03:58 +01:00
François Dumont
1679da1571
re PR libstdc++/82522 (std::map::insert(value_type &&) not selected)
...
2017-12-20 François Dumont <fdumont@gcc.gnu.org>
PR libstdc++/82522
* include/debug/map.h (map::insert(value_type&&))
(map::insert(const_iterator, value_type&&)): Add overload for rvalues.
* include/debug/multimap.h (multimap::insert(value_type&&))
(multimap::insert(const_iterator, value_type&&)): Likewise.
* include/debug/unordered_map (unordered_map::insert(value_type&&))
(unordered_map::insert(const_iterator, value_type&&))
(unordered_multimap::insert(value_type&&))
(unordered_multimap::insert(const_iterator, value_type&&)): Likewise.
* testsuite/23_containers/map/modifiers/insert/dr2354.cc (test02): New.
* testsuite/23_containers/multimap/modifiers/insert/dr2354.cc (test02):
New.
* testsuite/23_containers/unordered_map/insert/dr2354.cc (test02): New.
* testsuite/23_containers/unordered_multimap/insert/dr2354.cc (test02):
New.
From-SVN: r255904
2017-12-20 21:53:25 +00:00
François Dumont
adaefe2a50
re PR libstdc++/80761 (std::set<T,C,A>::insert_return_type uses wrong iterator type)
...
2017-11-20 François Dumont <fdumont@gcc.gnu.org>
PR libstdc++/80761
* include/debug/map.h
(std::__debug::map<>::insert_return_type): Define using
_Node_insert_return.
* include/debug/set.h (std::__debug::set<>::insert_return_type):
Likewise.
* include/debug/unordered_map:
(std::__debug::unordered_map<>::insert_return_type): Likewise.
* include/debug/unordered_set:
(std::__debug::unordered_set<>::insert_return_type): Likewise.
From-SVN: r255789
2017-12-18 21:59:17 +00:00
Stephan Bergmann
68e601d879
Fix std::unordered_map deduction guide
...
2017-11-27 Stephan Bergmann <sbergman@redhat.com>
* include/bits/unordered_map.h (unordered_map): Fix deduction guide.
* include/debug/unordered_map (unordered_map): Likewise.
From-SVN: r255174
2017-11-27 16:43:39 +00:00
Ville Voutilainen
ccbbf8df05
Implement LWG 2485
...
* include/debug/array (get(const array<_Tp, _Nm>&&)): New.
* include/std/array (get(const array<_Tp, _Nm>&&)): Likewise.
* include/std/tuple (get(const tuple<_Elements...>&&)): Likewise.
(get(const tuple<_Types...>&&)): Likewise.
* include/std/utility
(__pair_get::__const_move_get(const std::pair<_Tp1, _Tp2>&&)):
Likewise.
(get(const std::pair<_Tp1, _Tp2>&&)): Likewise.
(get(const pair<_Tp, _Up>&&)): Likewise.
(get(const pair<_Up, _Tp>&&)): Likewise.
* testsuite/20_util/pair/astuple/get.cc: Add tests for
new overloads.
* testsuite/20_util/pair/astuple/get_by_type.cc: Likewise.
* testsuite/20_util/tuple/element_access/get2.cc: Likewise.
* testsuite/20_util/tuple/element_access/get2_by_type.cc: Likewise.
* testsuite/23_containers/array/tuple_interface/get.cc: Likewise.
* testsuite/23_containers/array/tuple_interface/tuple_element_debug_neg.cc:
Adjust.
* testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc:
Likewise.
From-SVN: r254222
2017-10-30 16:31:04 +02:00
Ville Voutilainen
957f5feacf
Deduction guides for associative containers, debug mode deduction guide fixes.
...
* include/bits/stl_iterator.h (__iter_key_t)
(__iter_val_t, __iter_to_alloc_t): New.
* include/bits/stl_map.h: Add deduction guides.
* include/bits/stl_multimap.h: Likewise.
* include/bits/stl_multiset.h: Likewise.
* include/bits/stl_set.h: Likewise.
* include/bits/unordered_map.h: Likewise.
* include/bits/unordered_set.h: Likewise.
* include/debug/deque: Likewise.
* include/debug/forward_list: Likewise.
* include/debug/list: Likewise.
* include/debug/map.h: Likewise.
* include/debug/multimap.h: Likewise.
* include/debug/multiset.h: Likewise.
* include/debug/set.h: Likewise.
* include/debug/unordered_map: Likewise.
* include/debug/unordered_set: Likewise.
* include/debug/vector: Likewise.
* testsuite/23_containers/map/cons/deduction.cc: New.
* testsuite/23_containers/multimap/cons/deduction.cc: Likewise.
* testsuite/23_containers/multiset/cons/deduction.cc: Likewise.
* testsuite/23_containers/set/cons/deduction.cc: Likewise.
* testsuite/23_containers/unordered_map/cons/deduction.cc: Likewise.
* testsuite/23_containers/unordered_multimap/cons/deduction.cc:
Likewise.
* testsuite/23_containers/unordered_multiset/cons/deduction.cc:
Likewise.
* testsuite/23_containers/unordered_set/cons/deduction.cc: Likewise.
From-SVN: r254113
2017-10-26 19:42:31 +03:00
François Dumont
3838e0c086
Revert revision 247926.
...
From-SVN: r247998
2017-05-12 21:19:39 +00:00
François Dumont
ea594612f0
2017-05-11 François Dumont <fdumont@gcc.gnu.org>
...
* include/debug/safe_container.h [_GLIBCXX_USE_CXX11_ABI]
(_Safe_container<>): Remove _IsCxx11AllocatorAware template parameter.
* include/debug/string: Adapt.
From-SVN: r247926
2017-05-11 20:03:47 +00:00
François Dumont
dc4dd7f63f
2017-05-11 François Dumont <fdumont@gcc.gnu.org>
...
* include/debug/formatter.h [_GLIBCXX_INLINE_VERSION]
(__gnu_debug::_Error_formatter::_Parameter::_M_print_field): Remove.
(__gnu_debug::_Error_formatter::_Parameter::_M_print_description):
Remove.
(__gnu_debug::_Error_formatter::_M_format_word): Remove.
(__gnu_debug::_Error_formatter::_M_print_word): Remove.
(__gnu_debug::_Error_formatter::_M_print_string): Remove.
(__gnu_debug::_Error_formatter::_M_get_max_length): Remove.
* src/c++11/debug.cc: Adapt.
* config/abi/pre/gnu-versioned-namespace.ver: Adapt.
From-SVN: r247925
2017-05-11 19:49:26 +00:00
Jonathan Wakely
af181c91a9
Add deduction guides for C++17 (P0433R2, partial)
...
* include/bits/shared_ptr.h (shared_ptr, weak_ptr): Add deduction
guides for C++17.
* include/bits/std_function.h (function): Likewise.
* include/bits/stl_pair.h (pair): Likewise.
* include/debug/array (__gnu_debug::array): Likewise.
* include/std/array (array): Likewise.
* include/std/functional (make_default_searcher)
(make_boyer_moore_searcher, make_boyer_moore_horspool_searcher):
Remove generator functions.
* include/std/tuple (tuple): Add deduction guides.
* include/std/valarray (valarray): Likewise.
* testsuite/20_util/function_objects/searchers.cc: Adjust to use
class template argument deduction instead of generator functions.
* testsuite/20_util/function/cons/deduction.cc: New test.
* testsuite/20_util/optional/cons/deduction_guide.cc: Rename to ...
* testsuite/20_util/optional/cons/deduction.cc: ... here.
* testsuite/20_util/pair/cons/deduction.cc: New test.
* testsuite/20_util/shared_ptr/cons/deduction.cc: New test.
* testsuite/20_util/tuple/cons/deduction.cc: New test.
* testsuite/20_util/tuple/element_access/get_neg.cc: Adjust dg-error.
* testsuite/20_util/unique_ptr/cons/deduction_neg.cc: New test.
* testsuite/20_util/weak_ptr/cons/deduction.cc: New test.
* testsuite/23_containers/array/cons/deduction.cc: New test.
* testsuite/23_containers/array/cons/deduction_neg.cc: New test.
* testsuite/23_containers/array/tuple_interface/get_debug_neg.cc:
Adjust dg-error.
* testsuite/23_containers/array/tuple_interface/get_neg.cc: Likewise.
* testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc:
Likewise.
* testsuite/26_numerics/valarray/deduction.cc: New test.
* testsuite/30_threads/lock_guard/cons/deduction.cc: New test.
* testsuite/30_threads/scoped_lock/cons/deduction.cc: New test.
* testsuite/30_threads/unique_lock/cons/deduction.cc: New test.
From-SVN: r246389
2017-03-22 15:58:35 +00:00
Jakub Jelinek
cbe34bb5ed
Update copyright years.
...
From-SVN: r243994
2017-01-01 13:07:43 +01:00
Jonathan Wakely
1d752b4fee
Delete std::swap for debug mode array
...
* include/debug/array (swap): Add deleted overload.
* include/bits/stl_pair.h (swap): Remove redundant inline keyword
from deleted overload.
* include/bits/unique_ptr.h (swap): Likewise.
* include/std/array (swap): Likewise.
* include/std/optional (swap): Likewise.
* include/std/tuple (swap): Likewise.
* include/std/variant (swap): Likewise.
* testsuite/23_containers/array/tuple_interface/get_debug_neg.cc:
Adjust dg-error line numbers.
* testsuite/23_containers/array/tuple_interface/get_neg.cc: Likewise.
* testsuite/23_containers/array/tuple_interface/
tuple_element_debug_neg.cc: Likewise.
* testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc:
Likewise.
From-SVN: r243437
2016-12-08 13:25:03 +00:00
Jonathan Wakely
36e2520b47
Fix copy&paste error in __gnu_debug::vector
...
* include/debug/vector (__gnu_debug::vector::emplace_back): Fix return
type.
From-SVN: r241350
2016-10-19 19:33:47 +01:00
Jonathan Wakely
594ef205ae
Implement P0084R2, Emplace return type, for C++17
...
* doc/xml/manual/status_cxx2017.xml: Update status.
* doc/html/*: Regenerate.
* include/bits/deque.tcc (deque::emplace_front, deque::emplace_back):
Return a reference in C++17 mode.
* include/bits/forward_list.h (forward_list::emplace_front): Likewise.
* include/bits/stl_bvector.h (vector<bool>::emplace_back): Likewise.
* include/bits/stl_deque.h (deque::emplace_front, deque::emplace_back):
Likewise.
* include/bits/stl_list.h (list::emplace_front, list::emplace_back):
Likewise.
* include/bits/stl_queue.h (queue::emplace): Likewise.
* include/bits/stl_stack.h (stack::emplace): Likewise.
* include/bits/stl_vector.h (vector::emplace_back): Likewise.
* include/bits/vector.tcc (vector::emplace_back): Likewise.
* include/debug/deque (__gnu_debug::deque::emplace_front)
(__gnu_debug::deque::emplace_back): Likewise.
* include/debug/vector (__gnu_debug::vector::emplace_back): Likewise.
* testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc:
New.
* testsuite/23_containers/forward_list/modifiers/
emplace_cxx17_return.cc: New.
* testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc: New.
* testsuite/23_containers/queue/members/emplace_cxx17_return.cc: New.
* testsuite/23_containers/stack/members/emplace_cxx17_return.cc: New.
* testsuite/23_containers/vector/bool/emplace_cxx17_return.cc: New.
* testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc:
New.
From-SVN: r241234
2016-10-17 13:00:38 +01:00