trans.c (check_inlining_for_nested_subprog): Quote reserved names.
[gcc.git] / libstdc++-v3 / ChangeLog
index 14999fae8faadb8a2b19434a391b133e652041a1..dbf1a8865f6a6dc89c6080ad84de9ad0e95c8f80 100644 (file)
@@ -1,3 +1,385 @@
+2019-05-17  François Dumont  <fdumont@gcc.gnu.org>
+
+       * include/bits/stl_deque.h
+       (_Deque_iterator<>::__ptr_to): Remove, use std::__ptr_rebind.
+       (_Deque_base(_Deque_base&&, const allocator_type&)): New.
+       (_Deque_base::_Deque_impl_data): New.
+       (_Deque_base::_Deque_impl): Inherit latter.
+       (_Deque_base::_Deque_impl::_M_swap_data): Move...
+       (_Deque_base::_Deque_impl_data::_M_swap_data): ... here.
+       (_Deque_base::_Deque_impl()): Add noexcept qualification.
+       (_Deque_base::_Deque_impl(_Deque_impl&&, _Tp_alloc_type&&)): New.
+       (_Deque_base::_Deque_impl::_M_get_Tp_allocator()): Remove static_cast.
+       (deque<>::deque()): Default.
+       (deque<>::deque(deque&&)): Default.
+       (deque<>::deque(deque&&, const allocator_type&, false_type)): New.
+       (deque<>::deque(deque&&, const allocator_type&, true_type)): New.
+       (deque<>::deque(deque&&, const allocator_type&)): Delegate to latters.
+       (deque<>::deque<_It>(_It, _It, const allocator_type&)): Use
+       _M_range_initialize.
+       (deque<>::assign<_It>(_It, _It)): Use _M_assign_aux.
+       (deque<>::resize(size_type, const value_type&)): Share a single
+       implementation.
+       (deque<>::insert<_It>(const_iterator, _It, _It)): Use
+       _M_range_insert_aux.
+       [__cplusplus >= 201103L](_M_initialize_dispatch): Remove.
+       [__cplusplus >= 201103L](_M_assign_dispatch): Remove.
+       [__cplusplus >= 201103L](_M_insert_dispatch): Remove.
+       * testsuite/23_containers/deque/allocator/default_init.cc: New.
+
+2019-05-17  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/90246
+       * include/std/variant (holds_alternative, get, get_if): Improve
+       static assertion messages.
+       (bad_variant_access::bad_variant_access()): Change default message.
+       (__throw_bad_variant_access(bool)): New overload.
+       (get): Use new overload.
+       (visit, visit<R>): Improve exception message.
+
+       * testsuite/20_util/variant/compile.cc: Fix narrowing test for ILP32
+       targets. Add more cases from P0608R3.
+       * testsuite/20_util/variant/run.cc: Add more cases from P0608R3.
+
+       * include/bits/random.h (seed_seq::param): Fix non-reserved name.
+       * include/experimental/type_traits (is_detected_exact)
+       (is_detected_exact_v): Likewise.
+       * include/pstl/execution_defs.h (is_execution_policy)
+       (is_execution_policy_v, __enable_if_execution_policy): Likewise.
+       * include/pstl/execution_impl.h (__policy_traits): Likewise.
+       * testsuite/17_intro/names.cc: Check for more non-reserved names.
+       * testsuite/experimental/names.cc: New test.
+
+       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_value(_Const_Link_type)):
+       Remove.
+       (_Rb_tree::_S_key(_Const_Link_type)): Move assertions here. Access
+       the value directly instead of calling _S_value.
+       (_Rb_tree::_S_value(_Const_Base_ptr)): Remove.
+       (_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.
+
+       * include/bits/invoke.h [__cplusplus < 201703L] (__invoke_r<void>):
+       Use _GLIBCXX14_CONSTEXPR because void functions cannot be constexpr
+       in C++11.
+
+       * doc/xml/manual/status_cxx2020.xml: Update P0608R3, P0777R1, and
+       P1165R1 entries.
+       * doc/html/*: Regenerate.
+       * include/std/tuple (make_from_tuple): Use remove_reference_t instead
+       of decay_t (P0777R1).
+
+2019-05-17  François Dumont  <fdumont@gcc.gnu.org>
+
+       Move from state of allocators (LWG2593)
+       * include/bits/stl_deque.h
+       (_Deque_base(_Deque_base&&, false_type)): Remove.
+       (_Deque_base(_Deque_base&&, true_type)): Remove.
+       (_Deque_base(_Deque_base&&)): Adapt.
+       (_Deque_base::_M_move_impl()): Remove.
+       * testsuite/util/testsuite_allocator.h
+       (propagating_allocator(propagating_allocator&&)): Preserve move from
+       state.
+       * testsuite/23_containers/deque/allocator/move_assign.cc (test02):
+       Adapt.
+       * testsuite/23_containers/forward_list/allocator/move_assign.cc (test02):
+       Adapt.
+       * testsuite/23_containers/list/allocator/move_assign.cc (test02): Adapt.
+       * testsuite/23_containers/map/allocator/move_assign.cc (test02): Adapt.
+       * testsuite/23_containers/multimap/allocator/move_assign.cc (test02):
+       Adapt.
+       * testsuite/23_containers/multiset/allocator/move_assign.cc (test02):
+       Adapt.
+       * testsuite/23_containers/set/allocator/move_assign.cc (test02): Adapt.
+       * testsuite/23_containers/unordered_map/allocator/move_assign.cc
+       (test02): Adapt.
+       * testsuite/23_containers/unordered_multimap/allocator/move_assign.cc
+       (test02): Adapt.
+       * testsuite/23_containers/unordered_multiset/allocator/move_assign.cc
+       (test02): Adapt.
+       * testsuite/23_containers/unordered_set/allocator/move_assign.cc
+       (test02): Adapt.
+       * testsuite/23_containers/vector/allocator/move_assign.cc (test02):
+       Adapt.
+       * testsuite/23_containers/vector/bool/allocator/move_assign.cc (test02):
+       Adapt.
+       * testsuite/21_strings/basic_string/allocator/char/move_assign.cc
+       (test02): Adapt.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc
+       (test02): Adapt.
+
+2019-05-16  Jonathan Wakely  <jwakely@redhat.com>
+
+       * src/c++17/fs_ops.cc (absolute(const path&, error_code&))
+       [_GLIBCXX_FILESYSTEM_IS_WINDOWS]: Remove bogus assertion.
+
+       * include/std/variant (__overload_set): Remove.
+       (_Arr): New helper.
+       (_Build_FUN): New class template to define a single FUN overload,
+       with specializations to prevent unwanted conversions, as per P0608R3.
+       (_Build_FUNs): New class template to build an overload set of FUN.
+       (_FUN_type): New alias template to perform overload resolution.
+       (__accepted_type): Use integer_constant base for failure case. Use
+       _FUN_type for successful case.
+       (variant::__accepted_index): Use _Tp instead of _Tp&&.
+       (variant::variant(_Tp&&)): Likewise.
+       (variant::operator=(_Tp&&)): Likewise.
+
+       * include/std/variant (_Variant_storage<false, _Types...>::_M_reset):
+       Replace raw visitation with a runtime check for the valueless state
+       and a non-raw visitor.
+       (_Variant_storage<false, _Types...>::_M_reset_impl): Remove.
+       (variant::index()): Remove branch.
+       (variant::swap(variant&)): Use valueless_by_exception() instead of
+       comparing the index to variant_npos, and add likelihood attribute.
+
+       * include/bits/hashtable_policy.h (_Equal_helper): Remove.
+       (_Hashtable_base::_Equal_hash_code): Define new class template.
+       (_Hashtable_base::_M_equals): Use _Equal_hash_code instead of
+       _Equal_helper.
+
+       * include/bits/hashtable_policy.h (_Hashtable_ebo_helper::_S_get):
+       Replace with _M_get non-static member function.
+       (_Hashtable_ebo_helper::_S_cget): Replace with _M_cget non-static
+       member function.
+       (_Hash_code_base, _Local_iterator_base, _Hashtable_base):
+       (_Hashtable_alloc): Adjust to use non-static members of EBO helper.
+
+       * include/bits/hashtable_policy.h (_Hash_code_base::_M_swap): Use
+       _S_get accessors for members in EBO helpers.
+       (_Hash_code_base::_M_extract(), _Hash_code_base::_M_ranged_hash())
+       (_Hash_code_base::_M_h1(), _Hash_code_base::_M_h2()): Remove non-const
+       overloads.
+       (_Hashtable_base::_M_swap): Use _S_get accessors for members in EBO
+       helpers.
+       (_Hashtable_base::_M_eq()): Remove non-const overload.
+
+2019-05-15  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/std/variant (visit, visit<R>): Qualify calls to __do_visit.
+
+2019-05-14  Jonathan Wakely  <jwakely@redhat.com>
+
+       * testsuite/util/testsuite_allocator.h (NullablePointer::operator bool):
+       Fix return value.
+
+2019-05-14  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * config/os/solaris/solaris2.10: Move to ...
+       * config/os/solaris: ... this.
+       * configure.host (os_include_dir): Adapt.
+       (abi_baseline_pair): Remove Solaris 10 handling.
+       * config/abi/post/i386-solaris2.10: Remove.
+       * config/abi/post/sparc-solaris2.10: Remove.
+       * config/abi/post/i386-solaris2.11: Rename to ...
+       * config/abi/post/i386-solaris: ... this.
+       * config/abi/post/sparc-solaris2.11: Rename to ...
+       * config/abi/post/sparc-solaris: ... this.
+
+       * libsupc++/new_opa.cc [_GLIBCXX_HAVE_MEMALIGN] [__sun]: Remove
+       workaround.
+
+       * testsuite/ext/enc_filebuf/char/13598.cc: Remove *-*-solaris2.10
+       xfail.
+
+2019-05-14  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/std/variant (__visit_with_index): Remove typedef.
+       (__deduce_visit_result): New tag type.
+       (__raw_visit, __raw_idx_visit): New helper functions for "raw"
+       visitation of possibly-valueless variants, forwarding to __do_visit
+       with the relevant tag type.
+       (_Variant_storage<false, _Types...>::_M_reset_impl): Use __raw_visit
+       and make lambda return void.
+       (__variant_construct): Likewise.
+       (_Copy_assign_base::operator=, _Move_assign_base::operator=): Use
+       __raw_idx_visit and make lambda return void.
+       (_Multi_array::__untag_result): Add metafunction to check the function
+       pointer type for a tag type that dictates the kind of visitation.
+       (_Multi_array<_Ret(*)(_Visitor, _Variants...), __first, __rest...>):
+       Use decltype(auto) instead of tagged function pointer type.
+       (__gen_vtable_impl): Remove bool non-type parameter and unused
+       _Variant_tuple parameter.
+       (__gen_vtable_impl::__visit_invoke_impl): Remove.
+       (__gen_vtable_impl::__do_visit_invoke): Remove.
+       (__gen_vtable_impl::__do_visit_invoke_r): Remove.
+       (__gen_vtable_impl::__visit_invoke): Use if-constexpr and __invoke_r
+       for the visit<R> case, rather than dispatching to separate functions.
+       (_VARIANT_RELATION_FUNCTION_TEMPLATE): Use __raw_idx_visit and make
+       lambda return void.
+       (variant::swap): Likewise.
+       (__do_visit): Replace two non-type template parameters with a single
+       type parameter, so that the caller must specify the visitor's return
+       type (or one of the tag types).
+       (visit): Deduce a return type from the visitor and use the
+       __deduce_visit_result tag to enforce that all overloads return the
+       same type.
+       (visit<R>): Call __do_visit<R> with explicit result type.
+       (__variant_hash_call_base_impl::operator()): Use __raw_visit and make
+       lambda return void.
+
+2019-05-14  Nina Dinka Ranns  <dinka.ranns@gmail.com>
+
+       nonesuch is insufficiently useless (lwg2996)
+       * include/std/type_traits (struct __nonesuch): Added private base
+       class to make __nonesuch not an aggregate and removed deleted default
+       constructor.
+       * include/bits/stl_pair.h (struct __nonesuch_no_braces): Removed.
+       (operator=(const pair&)): Use __nonesuch instead of
+       __nonesuch_no_braces.
+       (operator=(pair&&)): Likewise
+       * include/std/tuple (operator=(const tuple&)): Use __nonesuch instead
+       of __nonesuch_no_braces.
+       (operator=(tuple&&)): Likewise
+       * include/experimental/type_traits (struct nonesuch): Added private
+       base class to make nonesuch not an aggregate and removed deleted
+       default constructor.
+       * testsuite/20_util/nonesuch/nonesuch.cc: New.
+       * testsuite/experimental/type_traits/nonesuch.cc: New.
+
+2019-05-14  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/bits/std_function.h (_Simple_type_wrapper): Remove.
+       (_Function_handler): Remove partial specializations for void return
+       types and pointers to member.
+       (_Function_handler::_M_manager): Adapt to removal of
+       _Simple_type_wrapper.
+       (_Function_handler::_M_invoke): Use __invoke_r instead of __invoke.
+       * include/std/functional (_Bind_result::__enable_if_void)
+       (_Bind_result::__disable_if_void): Remove sfinae helpers.
+       (_Bind_result::__call): Use __invoke_r and remove overloads for void
+       return types.
+       * include/std/future (__future_base::_Task_state::_M_run)
+       (__future_base::_Task_state::_M_run_delayed): Use __invoke_r and
+       change return type of lambda expressions.
+
+       * include/bits/invoke.h (__invoke_r): Define new function implementing
+       the INVOKE<R> pseudo-function.
+       * testsuite/20_util/function_objects/invoke/1.cc: Add more tests.
+       * testsuite/20_util/function_objects/invoke/2.cc: New test.
+
+       * include/std/type_traits (__is_nt_convertible_helper): Define it
+       unconditionally, not only for C++20.
+       (__is_nothrow_convertible): Define internal trait for use in C++11.
+       (__is_nt_invocable_impl: Fix by using __is_nothrow_convertible.
+       (is_invocable_r_v, is_nothrow_invocable_r_v): Add missing parameter.
+       * testsuite/20_util/is_nothrow_convertible/value_ext.cc: New test.
+       * testsuite/20_util/is_nothrow_convertible/value.cc: Check with type
+       that has nothrow explicit conversion but potentially-throwing implicit
+       conversion.
+       * testsuite/20_util/is_nothrow_invocable/value.cc: Likewise.
+       * testsuite/20_util/is_nothrow_invocable/value_ext.cc: Fix helper
+       function to only consider implicit conversions.
+       * testsuite/20_util/tuple/cons/noexcept_specs.cc: Add comment.
+
+       * include/std/iterator: Include <iosfwd> instead of <istream> and
+       <ostream>.
+
+       * include/bits/stl_tree.h (_Rb_tree::erase(const Key*, const Key*)):
+       Remove unused, non-standard function.
+
+       * include/bits/regex.h (match_results::max_size()): Adjust return
+       value to account for prefix/suffix/unmatched subs.
+       (match_results::_M_resize(unsigned int)): Use _Base_type::assign to
+       reset the contained sub matches.
+       (match_results::_M_establish_failed_match(_Bi_iter)): Add new member
+       function to set result state following a failed match.
+       * include/bits/regex.tcc (__regex_algo_impl): Remove loop to set
+       sub_match states after _M_resize. Use _M_establish_failed_match.
+
+       PR libstdc++/69724
+       * include/std/thread (thread::_State_impl, thread::_S_make_state):
+       Replace single _Callable parameter with variadic _Args pack, to
+       forward them directly to the tuple of decayed copies.
+       * testsuite/30_threads/thread/cons/69724.cc: New test.
+
+2019-05-14  Nina Dinka Ranns  <dinka.ranns@gmail.com>
+
+       Inconsistency wrt Allocators in basic_string assignment (LWG2579)
+       * include/bits/basic_string.h: (operator=(const basic_string&):
+       Move allocator decision to assign.
+       (assign(const basic_string&)): Move allocator decision here.
+       * testsuite/21_strings/basic_string/allocator/char/copy_assign.cc:
+       Add tests.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc:
+       Add tests.
+
+2019-05-14  Jonathan Wakely  <jwakely@redhat.com>
+
+       * testsuite/util/testsuite_allocator.h (memory_resource)
+       (default_resource_mgr): Fix indentation.
+
+       * testsuite/20_util/allocator_traits/members/allocate_hint_nonpod.cc:
+       Use operator-> to access raw pointer member.
+       * testsuite/23_containers/vector/59829.cc: Likewise.
+       * testsuite/23_containers/vector/bool/80893.cc: Likewise.
+       * testsuite/libstdc++-prettyprinters/cxx11.cc: Use NullablePointer.
+       * testsuite/util/testsuite_allocator.h (NullablePointer): New utility
+       for tests.
+       (PointerBase, PointerBase_void): Derive from NullablePointer and use
+       its constructors and equality operators. Change converting
+       constructors to use operator-> to access private member of the other
+       pointer type.
+       (PointerBase_void::operator->()): Add, for access to private member.
+       (operator-(PointerBase, PointerBase)): Change to hidden friend.
+       (operator==(PointerBase, PointerBase)): Remove.
+       (operator!=(PointerBase, PointerBase)): Remove.
+
+       * python/libstdcxx/v6/printers.py (UniquePointerPrinter.__init__): Do
+       not assume field called _M_head_impl is the first tuple element.
+       * testsuite/libstdc++-prettyprinters/compat.cc: Make tuple
+       implementation more accurate.
+       * testsuite/libstdc++-prettyprinters/cxx11.cc: Check unique_ptr with
+       empty pointer type and non-empty deleter.
+
+       LWG 2899 - Make is_move_constructible correct for unique_ptr
+       * include/bits/unique_ptr.h (__uniq_ptr_impl): Add move constructor,
+       move assignment operator.
+       (__uniq_ptr_impl::release(), __uniq_ptr_impl::reset(pointer)): Add.
+       (__uniq_ptr_data): New class template with conditionally deleted
+       special members.
+       (unique_ptr, unique_ptr<T[], D>): Change type of data member from
+       __uniq_ptr_impl<T, D> to __uniq_ptr_data<T, D>. Define move
+       constructor and move assignment operator as defaulted.
+       (unique_ptr::release(), unique_ptr<T[], D>::release()): Forward to
+       __uniq_ptr_impl::release().
+       (unique_ptr::reset(pointer), unique_ptr<T[], D>::reset<U>(U)): Forward
+       to __uniq_ptr_impl::reset(pointer).
+       * python/libstdcxx/v6/printers.py (UniquePointerPrinter.__init__):
+       Check for new __uniq_ptr_data type.
+       * testsuite/20_util/unique_ptr/dr2899.cc: New test.
+
+2019-05-13  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/90454.cc path construction from void*
+       * include/bits/fs_path.h (path::_Path): Use remove_pointer so that
+       pointers to void are rejected as well as void.
+       * include/experimental/bits/fs_path.h (path::_Path): Likewise.
+       * testsuite/27_io/filesystem/path/construct/80762.cc: Also check
+       pointers to void.
+       * testsuite/experimental/filesystem/path/construct/80762.cc: Likewise.
+
+       * doc/xml/manual/policy_data_structures.xml: Comment out stray
+       <remark> elements. Fix formatting of bibliography references.
+
 2019-05-13  Edward Smith-Rowland  <3dw4rd@verizon.net>
 
        * doc/xml/manual/status_cxx2020.xml: Document P0811R3 status.