gcc/libstdc++-v3/testsuite/util
Jonathan Wakely 1352ea1925 libstdc++: Inline std::exception_ptr members [PR 90295]
This inlines most members of std::exception_ptr so that all operations
on a null exception_ptr can be optimized away. This benefits code like
std::future and coroutines where an exception_ptr object is present to
cope with exceptional cases, but is usually not used and remains null.

Since those functions were previously non-inline we have to continue to
export them from the library, for objects that were compiled against the
old headers and expect to find definitions in the library.

In order to inline the copy constructor and destructor we need to export
the _M_addref() and _M_release() members that increment/decrement the
reference count when copying/destroying a non-null exception_ptr. The
copy ctor and dtor check for null and don't call _M_addref and
_M_release unless they need to. The checks for null pointers in
_M_addref and _M_release are still needed because old code might call
them without checking for null first. But we can use __builtin_expect to
predict that they are usually called for the non-null case.

libstdc++-v3/ChangeLog:

	PR libstdc++/90295
	* config/abi/pre/gnu.ver (CXXABI_1.3.13): New symbol version.
	(exception_ptr::_M_addref(), exception_ptr::_M_release()):
	Export symbols.
	* libsupc++/eh_ptr.cc (exception_ptr::exception_ptr()):
	Remove out-of-line definition.
	(exception_ptr::exception_ptr(const exception_ptr&)):
	Likewise.
	(exception_ptr::~exception_ptr()): Likewise.
	(exception_ptr::operator=(const exception_ptr&)):
	Likewise.
	(exception_ptr::swap(exception_ptr&)): Likewise.
	(exception_ptr::_M_addref()): Add branch prediction.
	* libsupc++/exception_ptr.h (exception_ptr::operator bool):
	Add noexcept.
	[!_GLIBCXX_EH_PTR_COMPAT] (operator==, operator!=): Define
	inline as hidden friends. Remove declarations at namespace
	scope.
	(exception_ptr::exception_ptr()): Define inline.
	(exception_ptr::exception_ptr(const exception_ptr&)):
	Likewise.
	(exception_ptr::~exception_ptr()): Likewise.
	(exception_ptr::operator=(const exception_ptr&)):
	Likewise.
	(exception_ptr::swap(exception_ptr&)): Likewise.
	* testsuite/util/testsuite_abi.cc: Add CXXABI_1.3.13.
	* testsuite/18_support/exception_ptr/90295.cc: New test.
2020-10-06 17:24:16 +01:00
..
common_type Update copyright years. 2020-01-01 12:51:42 +01:00
debug Update copyright years. 2020-01-01 12:51:42 +01:00
exception Update copyright years. 2020-01-01 12:51:42 +01:00
hash_fn Update copyright years. 2020-01-01 12:51:42 +01:00
io Update copyright years. 2020-01-01 12:51:42 +01:00
native_type libstdc++: Fix testsuite utility's use of allocators 2020-04-18 00:12:26 +01:00
performance Update copyright years. 2020-01-01 12:51:42 +01:00
pstl
regression Update copyright years. 2020-01-01 12:51:42 +01:00
statistic Update copyright years. 2020-01-01 12:51:42 +01:00
thread Update copyright years. 2020-01-01 12:51:42 +01:00
replacement_memory_operators.h Update copyright years. 2020-01-01 12:51:42 +01:00
slow_clock.h libstdc++: Define and use chrono::is_clock for C++20 2020-03-25 22:07:02 +00:00
specfun_testcase.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_abi_check.cc Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_abi.cc libstdc++: Inline std::exception_ptr members [PR 90295] 2020-10-06 17:24:16 +01:00
testsuite_abi.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_allocator.cc Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_allocator.h libstdc++: Make testsuite usable with -fno-exceptions 2020-07-30 12:50:02 +01:00
testsuite_api.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_character.cc Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_character.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_common_types.h PR libstdc++/95915 2020-06-29 00:36:38 +03:00
testsuite_container_traits.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_containergen.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_containers.h libstdc++: Make testsuite usable with -fno-exceptions 2020-07-30 12:50:02 +01:00
testsuite_counter_type.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_error.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_fs.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_greedy_ops.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_hooks.cc Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_hooks.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_io.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_iterators.h libstdc++: Make std::copy_n work with negative and non-integral sizes 2020-06-04 14:21:34 +01:00
testsuite_new_operators.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_performance.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_random.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_regex.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_rng.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_rvalref.h Update copyright years. 2020-01-01 12:51:42 +01:00
testsuite_shared.cc libstdc++: Make testsuite usable with -fno-exceptions 2020-07-30 12:50:02 +01:00
testsuite_tr1.h Update copyright years. 2020-01-01 12:51:42 +01:00