gcc/libstdc++-v3/testsuite/20_util
Jason Merrill baf38d2e36 c++: Check abstract type only on object creation. [PR86252]
Abstract checking has been problematic for a while; when I implemented an
earlier issue resolution to do more checking it led to undesirable
instantiations, and so backed some of it out.  During the C++20 process we
decided with P0929R2 that we should go the other way, and only check
abstractness when we're actually creating an object, not when merely forming
an array or function type.  This means that we can remove the machinery for
checking whether a newly complete class makes some earlier declaration
ill-formed.  This change was moved as a DR, so I'm applying it to all
standard levels.  This could be reconsidered if it causes problems, but I
don't expect it to.

The change to the libstdc++ result_of test brings the expected behavior in
line with that for incomplete types, but as in PR97841 I think the libstdc++
handling of incomplete types in this and other type_traits is itself wrong,
so I expect these lines and others to change again before long.

gcc/cp/ChangeLog:

	* decl.c (cp_finish_decl): Only check abstractness on definition.
	(require_complete_types_for_parms): Check abstractness here.
	(create_array_type_for_decl): Not here.
	(grokdeclarator, grokparms, complete_vars): Not here.
	* pt.c (tsubst, tsubst_arg_types, tsubst_function_type): Not here.
	* typeck2.c (struct pending_abstract_type): Remove.
	(struct abstract_type_hasher): Remove.
	(abstract_pending_vars, complete_type_check_abstract): Remove.
	(abstract_virtuals_error_sfinae): Handle arrays.
	* call.c (conv_is_prvalue): Split out from...
	(conv_binds_ref_to_prvalue): ...here.
	(implicit_conversion_1): Rename from implicit_conversion.
	(implicit_conversion): An abstract prvalue is bad.
	(convert_like_internal): Don't complain if expr is already
	error_mark_node.

gcc/testsuite/ChangeLog:

	* g++.dg/other/abstract1.C: Adjust.
	* g++.dg/other/abstract2.C: Adjust.
	* g++.dg/other/abstract4.C: Adjust.
	* g++.dg/other/abstract5.C: Adjust.
	* g++.dg/other/abstract8.C: New test.
	* g++.dg/template/sfinae-dr657.C: Adjust.
	* g++.old-deja/g++.other/decl3.C: Adjust.

libstdc++-v3/ChangeLog:

	* testsuite/20_util/result_of/sfinae_friendly_1.cc: Adjust.
2020-11-15 12:07:13 -05:00
..
add_const Update copyright years. 2020-01-01 12:51:42 +01:00
add_cv Update copyright years. 2020-01-01 12:51:42 +01:00
add_lvalue_reference Update copyright years. 2020-01-01 12:51:42 +01:00
add_pointer Update copyright years. 2020-01-01 12:51:42 +01:00
add_rvalue_reference Update copyright years. 2020-01-01 12:51:42 +01:00
add_volatile Update copyright years. 2020-01-01 12:51:42 +01:00
addressof Update copyright years. 2020-01-01 12:51:42 +01:00
align libstdc++: Avoid warnings in tests 2020-10-29 22:47:21 +00:00
aligned_storage Update copyright years. 2020-01-01 12:51:42 +01:00
aligned_union Update copyright years. 2020-01-01 12:51:42 +01:00
alignment_of Update copyright years. 2020-01-01 12:51:42 +01:00
allocator libstdc++: Make allocators throw bad_array_new_length on overflow [LWG 3190] 2020-10-05 15:18:56 +01:00
allocator_traits Library-side tests for parenthesized aggregate init 2020-03-31 17:07:52 +03:00
any libstdc++: Avoid warnings in tests 2020-10-29 22:47:21 +00:00
as_const libstdc++: Ensure c++NN effective target present in all C++17 tests 2020-07-31 19:58:02 +01:00
assume_aligned libstdc++: Make std::assume_aligned a constexpr function [PR 97132] 2020-09-21 14:28:58 +01:00
auto_ptr Update copyright years. 2020-01-01 12:51:42 +01:00
bad_function_call Update copyright years. 2020-01-01 12:51:42 +01:00
bind libstdc++: Ensure c++NN effective target present in all C++17 tests 2020-07-31 19:58:02 +01:00
bool_constant libstdc++: Ensure c++NN effective target present in all C++17 tests 2020-07-31 19:58:02 +01:00
common_reference/requirements Update copyright years. 2020-01-01 12:51:42 +01:00
common_type/requirements Update copyright years. 2020-01-01 12:51:42 +01:00
conditional/requirements Update copyright years. 2020-01-01 12:51:42 +01:00
decay/requirements Update copyright years. 2020-01-01 12:51:42 +01:00
declval/requirements Update copyright years. 2020-01-01 12:51:42 +01:00
default_delete libstdc++: Fix failing tests 2020-06-08 21:34:46 +01:00
duration libstdc++: Constrain chrono::duration conversions [LWG 2094] 2020-09-01 18:18:26 +01:00
duration_cast libstdc++: Test C++11 implementation of std::chrono::__detail::ceil 2020-10-05 11:09:03 +01:00
enable_if/requirements Update copyright years. 2020-01-01 12:51:42 +01:00
enable_shared_from_this libstdc++: Ensure c++NN effective target present in all C++17 tests 2020-07-31 19:58:02 +01:00
exchange libstdc++: Do not define __cpp_lib_constexpr_algorithms in <utility> 2020-04-22 22:54:35 +01:00
extent Update copyright years. 2020-01-01 12:51:42 +01:00
forward Update copyright years. 2020-01-01 12:51:42 +01:00
from_chars libstdc++: Fix test for old string ABI 2020-07-30 16:04:59 +01:00
function libstdc++: Avoid warnings in tests 2020-10-29 22:47:21 +00:00
function_objects libstdc++: Fix noexcept-specifier for std::bind_front [PR 97101] 2020-09-21 00:17:02 +01:00
has_unique_object_representations Update copyright years. 2020-01-01 12:51:42 +01:00
has_virtual_destructor Update copyright years. 2020-01-01 12:51:42 +01:00
hash Update copyright years. 2020-01-01 12:51:42 +01:00
headers libstdc++: Avoid warnings in tests 2020-10-29 22:47:21 +00:00
in_place libstdc++: Ensure c++NN effective target present in all C++17 tests 2020-07-31 19:58:02 +01:00
integer_comparisons libstdc++: Fix new tests that fail for ILP32 targets 2020-02-18 18:57:30 +00:00
integer_sequence Update copyright years. 2020-01-01 12:51:42 +01:00
integral_constant Update copyright years. 2020-01-01 12:51:42 +01:00
invoke_result libstdc++: assert that type traits are not misused with incomplete types [PR 71579] 2020-09-24 18:51:37 +01:00
is_abstract Update copyright years. 2020-01-01 12:51:42 +01:00
is_aggregate libstdc++: Adjust tests that give different results in C++20 2020-07-31 17:51:00 +01:00
is_arithmetic Update copyright years. 2020-01-01 12:51:42 +01:00
is_array Update copyright years. 2020-01-01 12:51:42 +01:00
is_assignable Update copyright years. 2020-01-01 12:51:42 +01:00
is_base_of Update copyright years. 2020-01-01 12:51:42 +01:00
is_bounded_array Update copyright years. 2020-01-01 12:51:42 +01:00
is_class Update copyright years. 2020-01-01 12:51:42 +01:00
is_complete_or_unbounded Update copyright years. 2020-01-01 12:51:42 +01:00
is_compound Update copyright years. 2020-01-01 12:51:42 +01:00
is_const Update copyright years. 2020-01-01 12:51:42 +01:00
is_constant_evaluated Update copyright years. 2020-01-01 12:51:42 +01:00
is_constructible c++: Improve access checking inside templates [PR41437] 2020-06-16 08:21:33 -04:00
is_convertible Update copyright years. 2020-01-01 12:51:42 +01:00
is_copy_assignable Update copyright years. 2020-01-01 12:51:42 +01:00
is_copy_constructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_default_constructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_destructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_empty Update copyright years. 2020-01-01 12:51:42 +01:00
is_enum Update copyright years. 2020-01-01 12:51:42 +01:00
is_final Update copyright years. 2020-01-01 12:51:42 +01:00
is_floating_point Update copyright years. 2020-01-01 12:51:42 +01:00
is_function x32 does not support MS ABI, skip testcases that require it. 2020-03-16 14:38:06 +01:00
is_fundamental Update copyright years. 2020-01-01 12:51:42 +01:00
is_implicitly_default_constructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_integral Update copyright years. 2020-01-01 12:51:42 +01:00
is_invocable libstdc++: assert that type traits are not misused with incomplete types [PR 71579] 2020-09-24 18:51:37 +01:00
is_literal_type PR libstdc++/95915 2020-06-29 00:36:38 +03:00
is_lvalue_reference Update copyright years. 2020-01-01 12:51:42 +01:00
is_member_function_pointer x32 does not support MS ABI, skip testcases that require it. 2020-03-16 14:38:06 +01:00
is_member_object_pointer Update copyright years. 2020-01-01 12:51:42 +01:00
is_member_pointer Update copyright years. 2020-01-01 12:51:42 +01:00
is_move_assignable Update copyright years. 2020-01-01 12:51:42 +01:00
is_move_constructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_nothrow_assignable Update copyright years. 2020-01-01 12:51:42 +01:00
is_nothrow_constructible libstdc++: Support arrays in std::is_nothrow_constructible (PR 94149) 2020-04-21 22:18:51 +01:00
is_nothrow_convertible Update copyright years. 2020-01-01 12:51:42 +01:00
is_nothrow_copy_assignable Update copyright years. 2020-01-01 12:51:42 +01:00
is_nothrow_copy_constructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_nothrow_default_constructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_nothrow_destructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_nothrow_invocable libstdc++: assert that type traits are not misused with incomplete types [PR 71579] 2020-09-24 18:51:37 +01:00
is_nothrow_move_assignable Update copyright years. 2020-01-01 12:51:42 +01:00
is_nothrow_move_constructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_nothrow_swappable libstdc++: assert that type traits are not misused with incomplete types [PR 71579] 2020-08-19 12:12:40 +01:00
is_nothrow_swappable_with libstdc++: assert that type traits are not misused with incomplete types [PR 71579] 2020-08-19 12:12:40 +01:00
is_null_pointer Update copyright years. 2020-01-01 12:51:42 +01:00
is_object x32 does not support MS ABI, skip testcases that require it. 2020-03-16 14:38:06 +01:00
is_pod libstdc++: Fix testsuite failures and warnings due to is_pod deprecation 2020-01-09 21:31:50 +00:00
is_pointer Update copyright years. 2020-01-01 12:51:42 +01:00
is_polymorphic Update copyright years. 2020-01-01 12:51:42 +01:00
is_reference Update copyright years. 2020-01-01 12:51:42 +01:00
is_rvalue_reference Update copyright years. 2020-01-01 12:51:42 +01:00
is_same Update copyright years. 2020-01-01 12:51:42 +01:00
is_scalar Update copyright years. 2020-01-01 12:51:42 +01:00
is_signed Update copyright years. 2020-01-01 12:51:42 +01:00
is_standard_layout Update copyright years. 2020-01-01 12:51:42 +01:00
is_swappable libstdc++: Ensure c++NN effective target present in all C++17 tests 2020-07-31 19:58:02 +01:00
is_swappable_with libstdc++: assert that type traits are not misused with incomplete types [PR 71579] 2020-08-19 12:12:40 +01:00
is_trivial Update copyright years. 2020-01-01 12:51:42 +01:00
is_trivially_assignable Update copyright years. 2020-01-01 12:51:42 +01:00
is_trivially_constructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_trivially_copy_assignable Update copyright years. 2020-01-01 12:51:42 +01:00
is_trivially_copy_constructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_trivially_copyable Update copyright years. 2020-01-01 12:51:42 +01:00
is_trivially_default_constructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_trivially_destructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_trivially_move_assignable Update copyright years. 2020-01-01 12:51:42 +01:00
is_trivially_move_constructible Update copyright years. 2020-01-01 12:51:42 +01:00
is_unbounded_array Update copyright years. 2020-01-01 12:51:42 +01:00
is_union Update copyright years. 2020-01-01 12:51:42 +01:00
is_unsigned Update copyright years. 2020-01-01 12:51:42 +01:00
is_void Update copyright years. 2020-01-01 12:51:42 +01:00
is_volatile Update copyright years. 2020-01-01 12:51:42 +01:00
logical_traits libstdc++: Ensure c++NN effective target present in all C++17 tests 2020-07-31 19:58:02 +01:00
make_signed/requirements Update copyright years. 2020-01-01 12:51:42 +01:00
make_unsigned/requirements Update copyright years. 2020-01-01 12:51:42 +01:00
memory_resource Update copyright years. 2020-01-01 12:51:42 +01:00
monotonic_buffer_resource libstdc++: Avoid warnings in tests 2020-10-29 22:47:21 +00:00
move Update copyright years. 2020-01-01 12:51:42 +01:00
move_if_noexcept Update copyright years. 2020-01-01 12:51:42 +01:00
nonesuch Update copyright years. 2020-01-01 12:51:42 +01:00
optional libstdc++: Fix constraints on std::optional comparisons [PR 96269] 2020-11-05 19:09:22 +00:00
owner_less Update copyright years. 2020-01-01 12:51:42 +01:00
pair libstdc++: Ensure c++NN effective target present in all C++17 tests 2020-07-31 19:58:02 +01:00
pointer_safety Update copyright years. 2020-01-01 12:51:42 +01:00
pointer_traits Update copyright years. 2020-01-01 12:51:42 +01:00
polymorphic_allocator libstdc++: make polymorphic_allocator throw consistent type (LWG 3237) 2020-02-19 15:34:08 +00:00
rank Update copyright years. 2020-01-01 12:51:42 +01:00
ratio libstdc++: Ensure c++NN effective target present in all C++17 tests 2020-07-31 19:58:02 +01:00
raw_storage_iterator Update copyright years. 2020-01-01 12:51:42 +01:00
reference_wrapper c++: Implement -Wvexing-parse [PR25814] 2020-11-05 15:55:14 -05:00
remove_all_extents Update copyright years. 2020-01-01 12:51:42 +01:00
remove_const Update copyright years. 2020-01-01 12:51:42 +01:00
remove_cv Update copyright years. 2020-01-01 12:51:42 +01:00
remove_cvref Update copyright years. 2020-01-01 12:51:42 +01:00
remove_extent Update copyright years. 2020-01-01 12:51:42 +01:00
remove_pointer Update copyright years. 2020-01-01 12:51:42 +01:00
remove_reference Update copyright years. 2020-01-01 12:51:42 +01:00
remove_volatile Update copyright years. 2020-01-01 12:51:42 +01:00
result_of c++: Check abstract type only on object creation. [PR86252] 2020-11-15 12:07:13 -05:00
scoped_allocator Update copyright years. 2020-01-01 12:51:42 +01:00
shared_ptr Fix libstdc++ testsuite to handle VxWorks gthreads implementation 2020-08-23 23:18:48 -03:00
specialized_algorithms libstdc++: Avoid warnings in tests 2020-10-29 22:47:21 +00:00
steady_clock Update copyright years. 2020-01-01 12:51:42 +01:00
synchronized_pool_resource libstdc++: Make pmr::synchronized_pool_resource work without libpthread (PR 94936) 2020-05-04 13:37:31 +01:00
system_clock Update copyright years. 2020-01-01 12:51:42 +01:00
time_point libstdc++: Add more C++20 additions to <chrono> 2020-08-25 10:23:59 -04:00
time_point_cast libstdc++: Remove duplicate dg-do directive 2020-07-31 17:51:00 +01:00
to_address libstdc++: Add missing feature test macros 2020-04-22 22:54:34 +01:00
to_chars libstdc++: Fix std::to_chars buffer overflow (PR 95851) 2020-06-24 12:28:13 +01:00
tuple libstdc++: Avoid warnings in tests 2020-10-29 22:47:21 +00:00
type_identity/requirements Update copyright years. 2020-01-01 12:51:42 +01:00
typeindex libstdc++: Add spaceship operator to std::type_index 2020-04-15 19:47:47 +01:00
underlying_type/requirements Update copyright years. 2020-01-01 12:51:42 +01:00
unique_ptr libstdc++: AIX xfail for_overwrite.cc testcase 2020-10-29 21:57:24 -04:00
unsynchronized_pool_resource libstdc++: handle small max_blocks_per_chunk in pool resources [PR 94160] 2020-09-10 15:42:09 +01:00
unwrap_reference libstdc++: Add __cpp_lib_unwrap_ref feature test macro 2020-02-19 15:28:54 +00:00
uses_allocator libstdc++: Ensure c++NN effective target present in all C++17 tests 2020-07-31 19:58:02 +01:00
variant libstdc++: Optimize container node-handle type for size 2020-10-19 18:06:51 +01:00
void_t libstdc++: Ensure c++NN effective target present in all C++17 tests 2020-07-31 19:58:02 +01:00
weak_ptr Update copyright years. 2020-01-01 12:51:42 +01:00
rel_ops.cc Update copyright years. 2020-01-01 12:51:42 +01:00
temporary_buffer.cc Update copyright years. 2020-01-01 12:51:42 +01:00
variable_templates_for_traits.cc libstdc++: Add -Wno-deprecated for tests that warn in C++20 2020-07-31 17:51:00 +01:00