r275166 - in /branches/gcc-8-branch/libstdc++-v...

redi@gcc.gnu.org redi@gcc.gnu.org
Fri Aug 30 13:09:00 GMT 2019


Author: redi
Date: Fri Aug 30 13:09:42 2019
New Revision: 275166

URL: https://gcc.gnu.org/viewcvs?rev=275166&root=gcc&view=rev
Log:
PR libstdc++/85965 move is_invocable assertions again

This is another attempt to reduce how often the assertions are
evaluated, so that code which doesn't try to use the function objects
doesn't need them to be invocable.

For _Rb_tree we access the _M_key_compare object directly, so can't put
the assertions in an accessor function for it. However, every invocation
of _M_key_compare is accompanied by a use of _S_key, so the assertions
can be put in there.  For _Hashtable there are member functions that are
consistently used to obtain a hash code or test for equality, so the
assertions can go in those members.

Backport from mainline
2019-05-17  Jonathan Wakely  <jwakely@redhat.com>

	PR libstdc++/85965
	* include/bits/hashtable.h (_Hashtable::~_Hashtable()): Remove static
	assertions from the destructor.
	* include/bits/hashtable_policy.h (_Hash_code_base::_M_hash_code):
	Move static_assert for hash function to here.
	(_Hash_table_base::_M_equals): Move static_assert for equality
	predicate to here.
	* include/bits/stl_tree.h (_Rb_tree::_S_key(_Const_Link_type)): Move
	assertions here. Access the value directly instead of calling _S_value.
	(_Rb_tree::_S_key(_Const_Base_ptr)): Do downcast and forward to
	_S_key(_Const_Link_type).
	* testsuite/23_containers/set/85965.cc: Check construction,
	destruction, assignment and size() do not trigger the assertions.
	* testsuite/23_containers/unordered_set/85965.cc: Likewise.
	* testsuite/23_containers/map/48101_neg.cc: Call find and adjust
	expected errors.
	* testsuite/23_containers/multimap/48101_neg.cc: Likewise.
	* testsuite/23_containers/multiset/48101_neg.cc: Likewise.
	* testsuite/23_containers/set/48101_neg.cc: Likewise.
	* testsuite/23_containers/unordered_map/48101_neg.cc: Likewise.
	* testsuite/23_containers/unordered_multimap/48101_neg.cc: Likewise.
	* testsuite/23_containers/unordered_multiset/48101_neg.cc: Likewise.
	* testsuite/23_containers/unordered_set/48101_neg.cc: Likewise.

Modified:
    branches/gcc-8-branch/libstdc++-v3/ChangeLog
    branches/gcc-8-branch/libstdc++-v3/include/bits/hashtable.h
    branches/gcc-8-branch/libstdc++-v3/include/bits/hashtable_policy.h
    branches/gcc-8-branch/libstdc++-v3/include/bits/stl_tree.h
    branches/gcc-8-branch/libstdc++-v3/testsuite/23_containers/map/48101_neg.cc
    branches/gcc-8-branch/libstdc++-v3/testsuite/23_containers/multimap/48101_neg.cc
    branches/gcc-8-branch/libstdc++-v3/testsuite/23_containers/multiset/48101_neg.cc
    branches/gcc-8-branch/libstdc++-v3/testsuite/23_containers/set/48101_neg.cc
    branches/gcc-8-branch/libstdc++-v3/testsuite/23_containers/set/85965.cc
    branches/gcc-8-branch/libstdc++-v3/testsuite/23_containers/unordered_map/48101_neg.cc
    branches/gcc-8-branch/libstdc++-v3/testsuite/23_containers/unordered_multimap/48101_neg.cc
    branches/gcc-8-branch/libstdc++-v3/testsuite/23_containers/unordered_multiset/48101_neg.cc
    branches/gcc-8-branch/libstdc++-v3/testsuite/23_containers/unordered_set/48101_neg.cc
    branches/gcc-8-branch/libstdc++-v3/testsuite/23_containers/unordered_set/85965.cc



More information about the Gcc-cvs mailing list