gcc/libstdc++-v3/testsuite/20_util
Jonathan Wakely ead408529d libstdc++: Fix conditions for optimizing uninitialized algos [PR102064]
While laying some groundwork for constexpr std::vector, I noticed some
bugs in the std::uninitialized_xxx algorithms. The conditions being
checked for optimizing trivial cases were not quite right, as shown in
the examples in the PR.

This consolidates the checks into a single macro. The macro has
appropriate definitions for C++98 or for later standards, to avoid a #if
everywhere the checks are used. For C++11 and later the check makes a
call to a new function doing a static_assert to ensure we don't use
assignment in cases where construction would have been invalid.
Extracting that check to a separate function will be useful for
constexpr std::vector, as that can't use std::uninitialized_copy
directly because it isn't constexpr).

The consolidated checks mean that some slight variations in static
assert message are gone, as there is only one place that does the assert
now. That required adjusting some tests. As part of that the redundant
89164_c++17.cc test was merged into 89164.cc which is compiled as C++17
by default now, but can also use other -std options if the
C++17-specific error is made conditional with a target selector.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	PR libstdc++/102064
	* include/bits/stl_uninitialized.h (_GLIBCXX_USE_ASSIGN_FOR_INIT):
	Define macro to check conditions for optimizing trivial cases.
	(__check_constructible): New function to do static assert.
	(uninitialized_copy, uninitialized_fill, uninitialized_fill_n):
	Use new macro.
	* testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc:
	Adjust dg-error pattern.
	* testsuite/23_containers/vector/cons/89164.cc: Likewise. Add
	C++17-specific checks from 89164_c++17.cc.
	* testsuite/23_containers/vector/cons/89164_c++17.cc: Removed.
	* testsuite/20_util/specialized_algorithms/uninitialized_copy/102064.cc:
	New test.
	* testsuite/20_util/specialized_algorithms/uninitialized_copy_n/102064.cc:
	New test.
	* testsuite/20_util/specialized_algorithms/uninitialized_fill/102064.cc:
	New test.
	* testsuite/20_util/specialized_algorithms/uninitialized_fill_n/102064.cc:
	New test.
2021-08-25 22:28:47 +01:00
..
add_const Update copyright years. 2021-01-04 10:26:59 +01:00
add_cv Update copyright years. 2021-01-04 10:26:59 +01:00
add_lvalue_reference Update copyright years. 2021-01-04 10:26:59 +01:00
add_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
add_rvalue_reference Update copyright years. 2021-01-04 10:26:59 +01:00
add_volatile Update copyright years. 2021-01-04 10:26:59 +01:00
addressof libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
align Update copyright years. 2021-01-04 10:26:59 +01:00
aligned_storage Update copyright years. 2021-01-04 10:26:59 +01:00
aligned_union Update copyright years. 2021-01-04 10:26:59 +01:00
alignment_of Update copyright years. 2021-01-04 10:26:59 +01:00
allocator libstdc++: Add warnings for some C++23 deprecations 2021-06-09 10:32:43 +01:00
allocator_traits Update copyright years. 2021-01-04 10:26:59 +01:00
any libstdc++: Fix std::any constraints [PR101034] 2021-06-14 15:10:56 +01:00
as_const libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
assume_aligned Update copyright years. 2021-01-04 10:26:59 +01:00
auto_ptr Update copyright years. 2021-01-04 10:26:59 +01:00
bad_function_call Update copyright years. 2021-01-04 10:26:59 +01:00
bind libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
bool_constant libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
common_reference libstdc++: Fix common_reference for non-reference results [PR100894] 2021-06-14 21:17:53 +01:00
common_type/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
conditional/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
decay/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
declval/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
default_delete libstdc++: Remove unnecessary uses of <utility> 2021-07-27 12:04:18 +01:00
duration libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
duration_cast libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
enable_if/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
enable_shared_from_this libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
exchange libstdc++: Add conditional noexcept to std::exchange 2021-08-17 14:22:49 +01:00
extent Update copyright years. 2021-01-04 10:26:59 +01:00
forward libstdc++: Clarify static_assert message 2021-04-06 16:43:24 +01:00
from_chars libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
function libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
function_objects libstdc++: Remove trailing whitespace in some tests 2021-08-03 15:30:36 +01:00
has_unique_object_representations libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
has_virtual_destructor Update copyright years. 2021-01-04 10:26:59 +01:00
hash libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
headers libstdc++: Fix tests that fail in C++98 mode 2021-05-11 17:21:08 +01:00
in_place libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
integer_comparisons Update copyright years. 2021-01-04 10:26:59 +01:00
integer_sequence Update copyright years. 2021-01-04 10:26:59 +01:00
integral_constant Update copyright years. 2021-01-04 10:26:59 +01:00
invoke_result Update copyright years. 2021-01-04 10:26:59 +01:00
is_abstract Update copyright years. 2021-01-04 10:26:59 +01:00
is_aggregate libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_arithmetic Update copyright years. 2021-01-04 10:26:59 +01:00
is_array Update copyright years. 2021-01-04 10:26:59 +01:00
is_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_base_of Update copyright years. 2021-01-04 10:26:59 +01:00
is_bounded_array Update copyright years. 2021-01-04 10:26:59 +01:00
is_class Update copyright years. 2021-01-04 10:26:59 +01:00
is_complete_or_unbounded Update copyright years. 2021-01-04 10:26:59 +01:00
is_compound Update copyright years. 2021-01-04 10:26:59 +01:00
is_const Update copyright years. 2021-01-04 10:26:59 +01:00
is_constant_evaluated Update copyright years. 2021-01-04 10:26:59 +01:00
is_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_convertible Update copyright years. 2021-01-04 10:26:59 +01:00
is_copy_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_copy_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_default_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_destructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_empty Update copyright years. 2021-01-04 10:26:59 +01:00
is_enum Update copyright years. 2021-01-04 10:26:59 +01:00
is_final Update copyright years. 2021-01-04 10:26:59 +01:00
is_floating_point Update copyright years. 2021-01-04 10:26:59 +01:00
is_function Update copyright years. 2021-01-04 10:26:59 +01:00
is_fundamental Update copyright years. 2021-01-04 10:26:59 +01:00
is_implicitly_default_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_integral Update copyright years. 2021-01-04 10:26:59 +01:00
is_invocable libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_layout_compatible libstdc++: Add std::is_layout_compatible trait for C++20 2021-08-24 16:12:44 +01:00
is_literal_type libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_lvalue_reference Update copyright years. 2021-01-04 10:26:59 +01:00
is_member_function_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
is_member_object_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
is_member_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
is_move_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_move_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_constructible libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_nothrow_convertible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_copy_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_copy_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_default_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_destructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_invocable libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_nothrow_move_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_move_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_swappable libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_nothrow_swappable_with libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_null_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
is_object Update copyright years. 2021-01-04 10:26:59 +01:00
is_pod Update copyright years. 2021-01-04 10:26:59 +01:00
is_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
is_pointer_interconvertible libstdc++: Add std::is_layout_compatible trait for C++20 2021-08-24 16:12:44 +01:00
is_polymorphic Update copyright years. 2021-01-04 10:26:59 +01:00
is_reference Update copyright years. 2021-01-04 10:26:59 +01:00
is_rvalue_reference Update copyright years. 2021-01-04 10:26:59 +01:00
is_same Update copyright years. 2021-01-04 10:26:59 +01:00
is_scalar Update copyright years. 2021-01-04 10:26:59 +01:00
is_scoped_enum libstdc++: Make std::is_scoped_enum work with incomplete types 2021-04-08 11:56:59 +01:00
is_signed Update copyright years. 2021-01-04 10:26:59 +01:00
is_standard_layout Update copyright years. 2021-01-04 10:26:59 +01:00
is_swappable libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_swappable_with libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_trivial Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_copy_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_copy_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_copyable Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_default_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_destructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_move_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_move_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_unbounded_array Update copyright years. 2021-01-04 10:26:59 +01:00
is_union Update copyright years. 2021-01-04 10:26:59 +01:00
is_unsigned Update copyright years. 2021-01-04 10:26:59 +01:00
is_void Update copyright years. 2021-01-04 10:26:59 +01:00
is_volatile Update copyright years. 2021-01-04 10:26:59 +01:00
logical_traits libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
make_signed/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
make_unsigned/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
memory_resource libstdc++: Remove redundant -std=gnu++17 option from PMR tests 2021-05-10 16:22:53 +01:00
monotonic_buffer_resource libstdc++: Remove redundant -std=gnu++17 option from PMR tests 2021-05-10 16:22:53 +01:00
move Update copyright years. 2021-01-04 10:26:59 +01:00
move_if_noexcept Update copyright years. 2021-01-04 10:26:59 +01:00
nonesuch Update copyright years. 2021-01-04 10:26:59 +01:00
optional libstdc++: Reduce header dependencies on <array> and <utility> 2021-07-27 12:04:18 +01:00
owner_less Update copyright years. 2021-01-04 10:26:59 +01:00
pair libstdc++: Add testsuite proc for testing deprecated features 2021-08-03 15:30:17 +01:00
pointer_safety libstdc++: Remove garbage collection support for C++23 [P2186R2] 2021-06-22 20:58:43 +01:00
pointer_traits Update copyright years. 2021-01-04 10:26:59 +01:00
polymorphic_allocator libstdc++: Remove redundant -std=gnu++17 option from PMR tests 2021-05-10 16:22:53 +01:00
rank Update copyright years. 2021-01-04 10:26:59 +01:00
ratio c++: Don't hide narrowing errors in system headers 2021-07-16 09:28:37 -04:00
raw_storage_iterator Update copyright years. 2021-01-04 10:26:59 +01:00
reference_wrapper libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
remove_all_extents Update copyright years. 2021-01-04 10:26:59 +01:00
remove_const Update copyright years. 2021-01-04 10:26:59 +01:00
remove_cv Update copyright years. 2021-01-04 10:26:59 +01:00
remove_cvref libstdc++: Fix definition of std::remove_cvref_t 2021-05-06 13:41:15 +01:00
remove_extent Update copyright years. 2021-01-04 10:26:59 +01:00
remove_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
remove_reference Update copyright years. 2021-01-04 10:26:59 +01:00
remove_volatile Update copyright years. 2021-01-04 10:26:59 +01:00
result_of Update copyright years. 2021-01-04 10:26:59 +01:00
scoped_allocator libstdc++: Adjust expected errors in tests when compiled as C++20 2021-05-10 15:54:43 +01:00
shared_ptr libstdc++: Remove trailing whitespace in some tests 2021-08-03 15:30:36 +01:00
specialized_algorithms libstdc++: Fix conditions for optimizing uninitialized algos [PR102064] 2021-08-25 22:28:47 +01:00
steady_clock Update copyright years. 2021-01-04 10:26:59 +01:00
synchronized_pool_resource libstdc++: Remove redundant -std=gnu++17 option from PMR tests 2021-05-10 16:22:53 +01:00
system_clock Update copyright years. 2021-01-04 10:26:59 +01:00
time_point libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
time_point_cast libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
to_address Update copyright years. 2021-01-04 10:26:59 +01:00
to_chars libstdc++: Disable floating_to_chars.cc on 16 bit targets 2021-05-20 13:21:41 +01:00
to_underlying libstdc++: Add std::to_underlying for C++23 2021-02-25 11:53:58 +00:00
tuple libstdc++: Fix move construction of std::tuple with array elements [PR101960] 2021-08-19 13:02:12 +01:00
type_identity/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
typeindex Update copyright years. 2021-01-04 10:26:59 +01:00
underlying_type/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
unique_ptr libstdc++: Add testsuite proc for testing deprecated features 2021-08-03 15:30:17 +01:00
unsynchronized_pool_resource libstdc++: Remove redundant -std=gnu++17 option from PMR tests 2021-05-10 16:22:53 +01:00
unwrap_reference Update copyright years. 2021-01-04 10:26:59 +01:00
uses_allocator libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
variant libstdc++: Remove redundant -std=gnu++17 option from any/optional/variant tests 2021-05-10 16:22:53 +01:00
void_t libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
weak_ptr libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
rel_ops.cc libstdc++: Add [[nodiscard]] to iterators and related utilities 2021-08-04 12:54:28 +01:00
temporary_buffer.cc Update copyright years. 2021-01-04 10:26:59 +01:00
variable_templates_for_traits.cc libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00