Commit Graph

8498 Commits

Author SHA1 Message Date
Jonathan Wakely e112d53aca Optimize std::sub_match comparisons using string_view-like type
Avoid creation of unnecessary basic_string objects by using a simplified
string_view type and performing comparisons on that type instead. A
temporary basic_string object is still used when the sub_match's
iterators are not contiguous, in order to get an object that the
__string_view can reference.

	* include/bits/regex.h (sub_match::operator string_type): Call str().
	(sub_match::compare): Use _M_str() instead of str().
	(sub_match::_M_compare): New public function.
	(sub_match::__string_view): New helper type.
	(sub_match::_M_str): New overloaded functions to avoid creating a
	string_type object when not needed.
	(operator==, operator!=, operator<, operator>, operator<=, operator>=):
	Use sub_match::_M_compare instead of creating string_type objects.
	Fix Doxygen comments.
	* include/bits/regex_compiler.h (__has_contiguous_iter): Remove.
	(__is_contiguous_normal_iter): Rename to __is_contiguous_iter and
	simplify.
	(__enable_if_contiguous_iter, __disable_if_contiguous_iter): Use
	__enable_if_t.
	* include/std/type_traits (__enable_if_t): Define for C++11.
	* testsuite/28_regex/sub_match/compare.cc: New.
	* testsuite/util/testsuite_iterators.h (remove_cv): Add transformation
	trait.
	(input_iterator_wrapper): Use remove_cv for value_type argument of
	std::iterator base class.

From-SVN: r262318
2018-07-02 21:31:11 +01:00
Jonathan Wakely 6fdce073fc Add whitespace to some dejagnu directives in libstdc++ tests
* testsuite/20_util/add_rvalue_reference/requirements/alias_decl.cc:
	Add whitespace to dejagnu directive.
	* testsuite/23_containers/array/element_access/at_neg.cc: Likewise.

From-SVN: r262245
2018-06-29 10:54:07 +01:00
François Dumont e6cad9872b stl_vector.h (struct _Vector_base<>::_Vector_impl_data): New.
2018-06-27  François Dumont  <fdumont@gcc.gnu.org>

	* include/bits/stl_vector.h
	(struct _Vector_base<>::_Vector_impl_data): New.
	(struct _Vector_base<>::_Vector_impl): Inherit from latter.
	(_Vector_base<>::_Vector_impl::_M_swap_data): Move...
	(_Vector_base<>::_Vector_impl_data::_M_swap_data): ...here.
	(_Vector_base<>::_Vector_impl()): Add noexcept qualification.
	(_Vector_base<>::_Vector_impl(_Vector_impl&&)): New.
	(_Vector_base<>::_Vector_impl(_Tp_alloc_type&&, _Vector_impl&&)): New.
	(_Vector_base(const allocator_type&, _Vector_base&&)): New, use latter.
	(_Vector_base()): Default.
	(_Vector_base(_Vector_base&&)): Default.
	(_Vector_base(size_t)) [_GLIBCXX_INLINE_VERSION]: Delete.
	(_Vector_base(_Tp_alloc_type&&)) [_GLIBCXX_INLINE_VERSION]: Delete.
	(_Vector_base::_M_create_storage(size_t)): Make protected.
	(vector()): Default.
	(vector(vector&&)): Default.
	(vector(vector&&, const allocator_type&, true_type)): New.
	(vector(vector&&, const allocator_type&, false_type)): New.
	(vector(vector&&, const allocator_type&)): Use latters.
	(vector(_InputIte, _InputIte, const allocator_type&)): Call
	_M_range_initialize directly.
	* include/debug/vector
	(vector(vector&&, const allocator_type&)): Add noexcept qualification.
	* testsuite/23_containers/vector/allocator/default_init.cc: New.
	* testsuite/23_containers/vector/cons/noexcept_move_construct.cc: Add
	static assertions.

From-SVN: r262194
2018-06-27 20:23:20 +00:00
Jonathan Wakely cd7ec27c3f Add std::__is_byte<std::byte> specialization
* include/bits/cpp_type_traits.h [__cplusplus >= 201703]
	(__is_byte<byte>): Define specialization for std::byte.

From-SVN: r262182
2018-06-27 11:30:52 +01:00
Jonathan Wakely db9e7b2a12 Declare some explicit instantiations for strings in Debug Mode
The empty reps and the I/O functions do not need to be implicitly
instantiated to enable assertions, so declare the explicit
instantiations when _GLIBCXX_EXTERN_TEMPLATE == -1 (i.e. when
_GLIBCXX_ASSERTIONS is defined).

	PR libstdc++/86138
	* include/bits/basic_string.tcc: [_GLIBCXX_EXTERN_TEMPLATE < 0]
	Declare explicit instantiations of COW empty reps and I/O functions.

From-SVN: r262167
2018-06-27 01:11:53 +01:00
David Edelsohn 18338e9eee sample-2.cc: Add TLS DejaGNU directives.
* testsuite/experimental/algorithm/sample-2.cc: Add TLS DejaGNU
        directives.
        * testsuite/experimental/algorithm/shuffle.cc: Likewise.

From-SVN: r262163
2018-06-26 15:17:08 -04:00
Jonathan Wakely 3da2f26ca4 Add missing noexcept on definition to match declaration
* include/bits/regex.tcc (regex_iterator::operator==): Add missing
	noexcept.

From-SVN: r262146
2018-06-26 13:24:47 +01:00
Jonathan Wakely 4fdb6fb6ae PR libstdc++/86112 fix printers for Python 2.6
Dict comprehensions are only supported since Python 2.7, so use an
alternative syntax that is backwards compatible.

	PR libstdc++/86112
	* python/libstdcxx/v6/printers.py (add_one_template_type_printer):
	Replace dict comprehension.

From-SVN: r262115
2018-06-25 22:03:49 +01:00
Jonathan Wakely 03cd7d3fa2 Update powerpc64-linux-gnu/baseline_symbols.txt
PR libstdc++/81092
	* config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update.

From-SVN: r262112
2018-06-25 21:36:51 +01:00
Jonathan Wakely 3685dcd7fb PR libstdc++/86292 fix exception safety of std::vector<InputIterator> constructor
PR libstdc++/86292
	* include/bits/stl_vector.h (vector::_M_range_initialize<InputIter>):
	Add try-catch block.
	* testsuite/23_containers/vector/cons/86292.cc: New.

From-SVN: r262029
2018-06-25 17:46:33 +01:00
Jonathan Wakely b03f3a94e6 * doc/xml/manual/status_cxx2017.xml: Document N4531 status.
From-SVN: r262025
2018-06-25 17:42:28 +01:00
Jonathan Wakely 37cb7887f8 Add experimental::sample and experimental::shuffle from N4531
The additions to <experimental/random> were added in 2015 but the new
algorithms in <experimental/algorithm> were not. This adds them.

	* include/experimental/algorithm (sample, shuffle): Add new overloads
	using per-thread random number engine.
	* testsuite/experimental/algorithm/sample.cc: Simpify and reduce
	dependencies by using __gnu_test::test_container.
	* testsuite/experimental/algorithm/sample-2.cc: New.
	* testsuite/experimental/algorithm/shuffle.cc: New.

From-SVN: r262024
2018-06-25 17:23:49 +01:00
Jonathan Wakely 626d407be8 Fix unexported basic_string symbols for 32-bit targets
* config/abi/pre/gnu.ver: Fix __cxx11::basic_string patterns for
	different size_t mangling on 32-bit targets.

From-SVN: r261892
2018-06-22 15:19:12 +01:00
Jonathan Wakely 0b4bc9a1e8 PR libstdc++/86280 fix undefined left shift on 32-bit targets
PR libstdc++/86280
	* include/experimental/memory_resource
	(__resource_adaptor_common::_AlignMgr::_M_token_size): Use type large
	enough for result of left shift.

From-SVN: r261888
2018-06-22 14:05:20 +01:00
François Dumont 89de39a98f 2018-06-21 François Dumont <fdumont@gcc.gnu.org>
Fix this ChangeLog entry.

From-SVN: r261878
2018-06-22 05:23:47 +00:00
Jonathan Wakely d72888d340 PR libstdc++/86138 prevent implicit instantiation of COW empty rep
The explicit instantiation declarations for std::basic_string are
disabled for C++17 (and later) so that basic_string symbols get
implicitly instantiated in every translation unit that needs them.  On
targets that don't support STB_GNU_UNIQUE this leads to multiple copies
of the empty rep symbol for COW strings. In order to detect whether a
COW string needs to deallocate its storage it compares the address with
the empty rep.  When there are multiple copies of the empty rep object
the address is not unique, and so string destructors try to delete the
empty rep, which crashes.

In order to guarantee uniqueness of the _S_empty_rep_storage symbol this
patch adds an explicit instantiation declaration for just that symbol.
This means the other symbols are still implicitly instantiated in C++17
code, but for the empty rep the definition in the library gets used.

Separately, there is no need for C++17 code to implicitly instantiate
the I/O functions for strings, so this also restores the explicit
instantiation declarations for those functions.

	PR libstdc++/86138
	* include/bits/basic_string.tcc:
	[__cplusplus > 201402 && !_GLIBCXX_USE_CXX11_ABI]
	(basic_string<char>::_Rep::_S_empty_rep_storage)
	(basic_string<wchar_t>::_Rep::_S_empty_rep_storage): Add explicit
	instantiation declarations.
	[__cplusplus > 201402] (operator>>, operator<<, getline): Re-enable
	explicit instantiation declarations.
	* testsuite/21_strings/basic_string/cons/char/86138.cc: New.
	* testsuite/21_strings/basic_string/cons/wchar_t/86138.cc: New.

From-SVN: r261873
2018-06-22 00:29:01 +01:00
Jonathan Wakely cda121ac7a PR libstdc++/83328 add correct basic_string::insert for initializer_list
The SSO basic_string has a non-standard insert(iterator, initializer_list)
overload, from a C++0x draft. This adds the correct overload, while also
preserving the old one so that the old symbol is still exported from the
library.

The COW basic_string doesn't have any of the C++11 changes to the insert
overloads (they all still have non-const iterator parameters and the
ones that should return an iterator still return void). This doesn't
make any change to the COW string.

	PR libstdc++/83328
	* acinclude.m4 (libtool_VERSION): Bump to 6:26:0.
	* config/abi/pre/gnu.ver: Add GLIBCXX_3.4.26 and export new symbol.
	* configure: Regenerate.
	* include/bits/basic_string.h [_GLIBCXX_USE_CXX11_ABI]
	(basic_string::insert(const_iterator, initializer_list<C>)): Add.
	[_GLIBCXX_USE_CXX11_ABI && !_GLIBCXX_DEFINING_STRING_INSTANTIATIONS]
	(basic_string::insert(iterator, initializer_list<C>)): Suppress
	definition.
	* include/debug/string (basic_string::insert(iterator, C)): Change
	first parameter to const_iterator.
	(basic_string::insert(iterator, size_type, C)): Likewise. Change
	return type to iterator.
	(basic_string::insert(iterator, InputIterator, InputIterator)):
	Likewise.
	(basic_string::insert(iterator, initializer_list<C>)): Change first
	parameter to const_iterator and return type to iterator.
	* src/c++11/string-inst.cc: Extend comment.
	* testsuite/21_strings/basic_string/modifiers/insert/char/83328.cc:
	New.
	* testsuite/21_strings/basic_string/modifiers/insert/wchar_t/83328.cc:
	New.
	* testsuite/util/testsuite_abi.cc: Add new symbol version.

From-SVN: r261866
2018-06-21 23:01:25 +01:00
Jonathan Wakely 5cfd862095 * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Update.
From-SVN: r261865
2018-06-21 21:57:07 +01:00
Jonathan Wakely e9df6a8f03 PR libstdc++/70940 make pmr::resource_adaptor return aligned memory
PR libstdc++/70940
	* include/experimental/memory_resource
	(__resource_adaptor_imp::do_deallocate): Add missing return.
	* testsuite/experimental/memory_resource/new_delete_resource.cc: New.
	* testsuite/experimental/memory_resource/resource_adaptor.cc: Test
	resource_adaptor with std::allocator, __gnu_cxx::new_allocator and
	__gnu_cxx::malloc_allocator.

From-SVN: r261851
2018-06-21 17:24:00 +01:00
Jonathan Wakely 7956c508dd PR libstdc++/70940 make pmr::resource_adaptor return aligned memory
PR libstdc++/70940
	* include/experimental/memory_resource (__resource_adaptor_common):
	New base class.
	(__resource_adaptor_common::_AlignMgr): Helper for obtaining aligned
	pointer from unaligned, and vice versa.
	(__resource_adaptor_imp::do_allocate): Use _AlignMgr to adjust
	allocated pointer to meet alignment request.
	(__resource_adaptor_imp::do_deallocate): Use _AlignMgr to retrieve
	original pointer for deallocation.
	(__resource_adaptor_imp::do_is_equal): Reformat.
	(__resource_adaptor_imp::_S_aligned_size): Remove.
	(__resource_adaptor_imp::_S_supported): Remove.
	(new_delete_resource): Use __gnu_cxx::new_allocator.
	* testsuite/experimental/memory_resource/resource_adaptor.cc: Test
	extended alignments and use debug_allocator to check for matching
	allocate/deallocate pairs.

From-SVN: r261849
2018-06-21 15:01:11 +01:00
François Dumont 802743baca debug.h (_Safe_iterator<>(const _Safe_iterator<_MutableIterator,>& __x)): Compare __x base iterator with a default initialized iterator of the same type.
2018-06-21  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/debug.h
	(_Safe_iterator<>(const _Safe_iterator<_MutableIterator,>& __x)):
	Compare __x base iterator with a default initialized iterator of the
	same type.

From-SVN: r261831
2018-06-21 05:36:48 +00:00
Jonathan Wakely e70359b3de PR libstdc++/70966 make pmr::new_delete_resource() immortal
Construct the program-wide resource objects using placement new. This
means they have dynamic storage duration and won't be destroyed during
termination.

	PR libstdc++/70966
	* include/experimental/memory_resource (__resource_adaptor_imp): Add
	static assertions to enforce requirements on pointer types.
	(__resource_adaptor_imp::get_allocator()): Add noexcept.
	(new_delete_resource, null_memory_resource): Return address of an
	object with dynamic storage duration.
	(__null_memory_resource): Remove.
	* testsuite/experimental/memory_resource/70966.cc: New.

From-SVN: r261818
2018-06-20 20:34:53 +01:00
Jonathan Wakely d9addf3344 Add testcase accidentally not committed earlier
* testsuite/20_util/duration/arithmetic/dr3050.cc: Add new test
	missed from recent commit.

From-SVN: r261810
2018-06-20 16:54:57 +01:00
Jonathan Wakely 828d64499e Remove unused <exception> header from <utility>
This header was needed for the declaration of std::terminate but the
calls to it were removed in r242401.

	* include/std/utility: Remove unused <exception> header.

From-SVN: r261749
2018-06-19 18:19:16 +01:00
Jonathan Wakely 05891e9f45 LWG 2975 ensure construct(pair<T,U>*, ...) used to construct pairs
* include/std/scoped_allocator (__not_pair): Define SFINAE helper.
	(construct(_Tp*, _Args&&...)): Remove from overload set when _Tp is
	a specialization of std::pair.
	* testsuite/20_util/scoped_allocator/construct_pair.cc: Ensure
	pair elements are constructed correctly.

From-SVN: r261716
2018-06-18 21:17:44 +01:00
Jonathan Wakely b0874c667d LWG 2989 hide path iostream operators from normal lookup
By only defining these operators as friends (with no namespace-scope
declaration) they can only be found by ADL and do not participate in
overload resolution for arguments of types other than path.

	LWG 2989 hide path iostream operators from normal lookup
	* include/bits/fs_path.h (operator<<, operator>>): Define inline as
	friends.
	* testsuite/27_io/filesystem/path/io/dr2989.cc: New.

From-SVN: r261711
2018-06-18 19:59:44 +01:00
Jonathan Wakely 8499a82c19 LWG 3050 Fix cv-qualification of convertibility constraints
LWG 3050 Fix cv-qualification of convertibility constraints
	* include/std/chrono (duration, operator*, operator/, operator%): Use
	const-qualified type as source type in is_convertible constraints.
	* testsuite/20_util/duration/arithmetic/dr3050.cc: New.
	* testsuite/20_util/duration/cons/dr3050.cc: New.
	* testsuite/20_util/duration/literals/range.cc: Rename to...
	* testsuite/20_util/duration/literals/range_neg.cc: Here. Adjust
	dg-error lineno.

From-SVN: r261708
2018-06-18 19:02:24 +01:00
Maya Rashish 4f9eae9fd8 crossconfig.m4: Handle OpenBSD just like NetBSD.
2018-06-18  Maya Rashish  <coypu@sdf.org>

	* crossconfig.m4: Handle OpenBSD just like NetBSD.
	* configure: Rebuilt.

	* config/alpha/openbsd.h (TARGET_DEFAULT): Define.
	(LINK_SPEC, STARTFILE_SPEC, ENDFILE_SPEC): Likewise.
	(INTMAX_TYPE, UINTMAX_TYPE, WINT_TYPE): Likewise.

	* config/alpha/elf.h (STARTFILE_SPEC, ENDFILE_SPEC): Move from
	here to ...
	* config/alpha/linux.h (STARTFILE_SPEC, ENDFILE_SPEC): Here.

From-SVN: r261707
2018-06-18 11:28:53 -06:00
Jonathan Wakely 410fb7d7b0 P0754R2 <version> header
* include/Makefile.am: Add new header.
	* include/Makefile.in: Regenerate.
	* include/bits/c++config: Change doxygen comment to suggest <version>
	instead of <iosfwd>.
	* include/precompiled/stdc++.h: Include <cwchar> and <cwctype>
	unconditionally.  Add C++17 and C++20 headers.
	* include/std/version: New header.
	* testsuite/17_intro/headers/c++2017/all_attributes.cc: New.
	* testsuite/17_intro/headers/c++2017/all_no_exceptions.cc: New.
	* testsuite/17_intro/headers/c++2017/all_no_rtti.cc: New.
	* testsuite/17_intro/headers/c++2017/all_pedantic_errors.cc: New.
	* testsuite/17_intro/headers/c++2017/operator_names.cc: New.
	* testsuite/17_intro/headers/c++2017/stdc++.cc: New.
	* testsuite/17_intro/headers/c++2017/stdc++_multiple_inclusion.cc:
	New.
	* testsuite/17_intro/headers/c++2020/all_attributes.cc: New.
	* testsuite/17_intro/headers/c++2020/all_no_exceptions.cc: New.
	* testsuite/17_intro/headers/c++2020/all_no_rtti.cc: New.
	* testsuite/17_intro/headers/c++2020/all_pedantic_errors.cc: New.
	* testsuite/17_intro/headers/c++2020/operator_names.cc: New.
	* testsuite/17_intro/headers/c++2020/stdc++.cc: New.
	* testsuite/17_intro/headers/c++2020/stdc++_multiple_inclusion.cc:
	New.
	* testsuite/18_support/headers/version/macros.cc: New.
	* testsuite/18_support/headers/version/macros.cc: New.

From-SVN: r261706
2018-06-18 17:42:11 +01:00
Jonathan Wakely 7314856c61 Fix bootstrap failure for bare metal due to autoconf link tests
The AC_CHECK_FUNCS tests cause the build to fail for bare metal cross
compilers, where link tests are not allowed. Replace them with
GCC_TRY_COMPILE_OR_LINK tests instead. Skip all the Filesystem
dependency checks if not building the filesystem library.

	* acinclude.m4 (GLIBCXX_CHECK_FILESYSTEM_DEPS): Only check when
	enable_libstdcxx_filesystem_ts = yes. Check for link, readlink and
	symlink.
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* configure.ac: Remove AC_CHECK_FUNCS for link, readlink and symlink.

From-SVN: r261704
2018-06-18 17:01:24 +01:00
Jonathan Wakely 3be9ded290 LWG 3035. std::allocator's constructors should be constexpr
LWG 3035. std::allocator's constructors should be constexpr
	* include/bits/allocator.h (allocator): Add constexpr to constructors
	for C++2a. Replace dynamic exception specifications with NOTHROW
	macro.
	(allocator, operator==, operator!=): Replace USE_NOEXCEPT macro with
	NOTHROW.
	* include/bits/c++config (_GLIBCXX20_CONSTEXPR): Define.
	* include/ext/malloc_allocator.h (malloc_allocator): Add constexpr
	to constructors for C++2a.
	* include/ext/new_allocator.h (new_allocator): Likewise.

From-SVN: r261703
2018-06-18 16:47:07 +01:00
Jonathan Wakely 5d84e6c53e LWG 3076 basic_string CTAD ambiguity
When deduction guides are supported by the compiler (i.e. for C++17 and
later) replace two basic_string constructors by constrained function
templates as required by LWG 3075. In order to ensure that the pre-C++17
non-template constructors are still exported from the shared library
define a macro in src/c++11/string-inst.cc to force the non-template
declarations (this isn't strictly needed yet, because the string
instantiations are compiled with -std=gnu++11, but that is likely to
change).

	LWG 3076 basic_string CTAD ambiguity
	* doc/xml/manual/intro.xml: Document LWG 3076 change.
	* include/bits/basic_string.h
	[__cpp_deduction_guides && !_GLIBCXX_DEFINING_STRING_INSTANTIATIONS]
	(basic_string(const _CharT*, const _Alloc&)): Turn into a function
	template constrained by _RequireAllocator.
	(basic_string(size_type, _CharT, const _Alloc&)): Likewise.
	* src/c++11/string-inst.cc (_GLIBCXX_DEFINING_STRING_INSTANTIATIONS):
	Define.
	* testsuite/21_strings/basic_string/cons/char/deduction.cc: Test
	deduction
	* testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc:
	Likewise.

From-SVN: r261670
2018-06-16 00:47:33 +01:00
Jonathan Wakely 525d67d42f PR libstdc++/86169 unshare COW string when non-const data() called
PR libstdc++/86169
	* include/bits/basic_string.h [!_GLIBCXX_USE_CXX11_ABI]
	(basic_string::data()): Unshare string.
	* testsuite/21_strings/basic_string/operations/data/char/86169.cc:
	New.

From-SVN: r261642
2018-06-15 19:47:29 +01:00
Jonathan Wakely 36eec25a6f Decorate string_view members with nonnull attribute
The C++ committee has confirmed that passing a null pointer to the
unary basic_string_view constructor is undefined. This removes the check
from our implementation, and adds the nonnull attribute to warn when the
compiler can detect undefined input.

	* include/std/string_view (basic_string_view(const CharT*)): Remove
	check for null pointer and add nonnull attribute.
	(compare(const CharT*), compare(size_type, size_type, const CharT*))
	(find(const CharT*, size_type), rfind(const CharT*, size_type))
	(find_first_of(const CharT*, size_type))
	(find_last_of(const CharT*, size_type))
	(find_first_not_of(const CharT*, size_type))
	(find_last_not_of(const CharT*, size_type)): Add nonnull attribute.
	* testsuite/21_strings/basic_string_view/cons/char/nonnull.cc: New.
	* testsuite/21_strings/basic_string_view/operations/compare/char/
	nonnull.cc: New.
	* testsuite/21_strings/basic_string_view/operations/find/char/
	nonnull.cc: New.
	* testsuite/21_strings/basic_string_view/operations/rfind/char/
	nonnull.cc: New.

From-SVN: r261638
2018-06-15 17:47:55 +01:00
Jonathan Wakely 3438bf7b9f PR libstdc++/86168 fix ambiguous default constructor
PR libstdc++/86168
	* include/bits/random.h (random_device(const string&)): Remove
	default argument.

From-SVN: r261636
2018-06-15 17:11:12 +01:00
Jonathan Wakely 5a95794c58 Only define __cpp_lib_constexpr_char_traits for C++17
* include/bits/char_traits.h (__cpp_lib_constexpr_char_traits): Only
	define for C++17 and above.

From-SVN: r261634
2018-06-15 16:47:56 +01:00
Jonathan Wakely 7f93abd805 LWG 2993 reference_wrapper<T> conversion from T&&
* doc/xml/manual/intro.xml: Document LWG 2993 change.
	* include/bits/refwrap.h (reference_wrapper(_Tp&)): Remove.
	(reference_wrapper(_Tp&&)): Remove.
	(reference_wrapper<_Up>(_Up&&)): Define new constructor as constrained
	template.
	(reference_wrapper): Add deduction guide.
	* testsuite/20_util/reference_wrapper/deduction.cc: New.
	* testsuite/20_util/reference_wrapper/lwg2993.cc: New.

From-SVN: r261632
2018-06-15 15:19:47 +01:00
Jonathan Wakely cb4f9a8c05 LWG 3039 Unnecessary decay in thread and packaged_task
* include/std/future (__constrain_pkgdtask): Replace with ...
	(packaged_task::__not_same): New alias template, using
	__remove_cvref_t instead of decay.
	* include/std/thread (thread::__not_same): Add comment.

From-SVN: r261618
2018-06-15 01:19:07 +01:00
Jonathan Wakely 53e926c8cd LWG 3075 basic_string needs deduction guides from basic_string_view
* testsuite/21_strings/basic_string/cons/char/deduction.cc: Test
	deduction from string views.
	* testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc:
	Likewise.

From-SVN: r261612
2018-06-14 21:27:04 +01:00
Jonathan Wakely db5ab3aa92 LWG 3074 make scalar types non-deduced in valarray non-member functions
* include/bits/valarray_after.h (_DEFINE_EXPR_BINARY_FUNCTION): Change
	scalar parameters to be a non-deduced context.
	* include/std/valarray (_DEFINE_BINARY_OPERATOR): Likewise. Adjust
	whitespace.
	* testsuite/26_numerics/valarray/operators.cc: Test scalar operands.
	* testsuite/26_numerics/valarray/transcend.cc: New.

From-SVN: r261610
2018-06-14 20:36:54 +01:00
Jonathan Wakely 2d26d4ce69 Partially revert move of std::tuple_element_t to <tuple>
Defining std::tuple_element_t in <utility> makes it available wherever
std::tuple_element is available.

	* include/std/tuple (__cpp_lib_tuple_element_t, tuple_element_t):
	Move back to <utility>.
	* include/std/utility (__cpp_lib_tuple_element_t. tuple_element_t):
	Restore to here.

From-SVN: r261604
2018-06-14 20:02:40 +01:00
Jonathan Wakely e9ecac306b P0935R0 Eradicating unnecessarily explicit default constructors
More pieces of P0935R0, making default constructors non-explicit.

	* include/backward/strstream (strstreambuf): Add non-explicit default
	constructor.
	* include/bits/locale_conv.h (wbuffer_convert, wstring_convert):
	Likewise.
	* include/bits/regex.h (match_results): Likewise.
	* testsuite/22_locale/conversions/buffer/1.cc: Test for non-explicit
	default constructor.
	* testsuite/22_locale/conversions/string/1.cc: Likewise.
	* testsuite/28_regex/match_results/ctors/char/default.cc: Likewise.
	* testsuite/28_regex/match_results/ctors/wchar_t/default.cc: Likewise.

From-SVN: r261597
2018-06-14 15:12:24 +01:00
Jonathan Wakely 74755c6afc Define __cpp_lib_tuple_element_t in <tuple> not <utility>
* include/std/tuple (__cpp_lib_tuple_element_t): Move feature test
	macro from <utility> and change type to long.
	* include/std/utility (__cpp_lib_tuple_element_t): Remove.
	* testsuite/20_util/tuple/tuple_element_t.cc: Check for feature test
	macro.

From-SVN: r261596
2018-06-14 15:01:29 +01:00
Jonathan Wakely 977ac63eab P0935R0 Eradicating unnecessarily explicit default constructors
The param_type constructors of each random number distribution should
mirror the constructors of the distribution itself, so make the same
changes w.r.t explicit on default constructors.

	* include/bits/random.h (uniform_real_distribution::param_type)
	(normal_distribution::param_type, lognormal_distribution::param_type)
	(gamma_distribution::param_type, chi_squared_distribution::param_type)
	(cauchy_distribution::param_type, fisher_f_distribution::param_type)
	(student_t_distribution::param_type)
	(bernoulli_distribution::param_type)
	(binomial_distribution::param_type)
	(geometric_distribution::param_type)
	(negative_binomial_distribution::param_type)
	(poisson_distribution::param_type)
	(exponential_distribution::param_type)
	(weibull_distribution::param_type)
	(extreme_value_distribution::param_type): Add non-explicit default
	constructors. Remove default argument for first parameter of explicit
	constructors.
	* include/bits/uniform_int_dist.h
	(uniform_int_distribution::param_type): Likewise.
	* include/ext/random
	(beta_distribution::param_type, rice_distribution::param_type)
	(nakagami_distribution::param_type, pareto_distribution::param_type)
	(k_distribution::param_type, arcsine_distribution::param_type)
	(hoyt_distribution::param_type, triangular_distribution::param_type)
	(von_mises_distribution::param_type)
	(hypergeometric_distribution::param_type)
	(logistic_distribution::param_type)
	(uniform_inside_sphere_distribution::param_type): Likewise.
	(uniform_on_sphere_distribution::param_type): Make default constructor
	non-explicit.
	* testsuite/26_numerics/random/bernoulli_distribution/cons/default.cc:
	Test param_type for non-explicit default constructor.
	* testsuite/26_numerics/random/binomial_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/cauchy_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/chi_squared_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/discrete_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/exponential_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/extreme_value_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/fisher_f_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/gamma_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/geometric_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/lognormal_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/negative_binomial_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/normal_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/piecewise_constant_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/piecewise_linear_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/poisson_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/student_t_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/uniform_int_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/uniform_real_distribution/cons/default.cc:
	Likewise.
	* testsuite/26_numerics/random/weibull_distribution/cons/default.cc:
	Likewise.
	* testsuite/ext/random/arcsine_distribution/cons/default.cc: Likewise.
	* testsuite/ext/random/beta_distribution/cons/default.cc: Likewise.
	* testsuite/ext/random/hoyt_distribution/cons/default.cc: Likewise.
	* testsuite/ext/random/hypergeometric_distribution/cons/default.cc:
	Likewise.
	* testsuite/ext/random/k_distribution/cons/default.cc: Likewise.
	* testsuite/ext/random/logistic_distribution/cons/default.cc: Likewise.
	* testsuite/ext/random/nakagami_distribution/cons/default.cc: Likewise.
	* testsuite/ext/random/normal_mv_distribution/cons/default.cc:
	Likewise.
	* testsuite/ext/random/pareto_distribution/cons/default.cc: Likewise.
	* testsuite/ext/random/rice_distribution/cons/default.cc: Likewise.
	* testsuite/ext/random/triangular_distribution/cons/default.cc:
	Likewise.
	* testsuite/ext/random/uniform_inside_sphere_distribution/cons/default.cc:
	Likewise.
	* testsuite/ext/random/uniform_on_sphere_distribution/cons/default.cc:
	Likewise.
	* testsuite/ext/random/von_mises_distribution/cons/default.cc:
	Likewise.

From-SVN: r261592
2018-06-14 14:32:53 +01:00
Jonathan Wakely 8513bec38c Fix errors in libstdc++-v3/ChangeLog entries.
From-SVN: r261589
2018-06-14 11:59:14 +01:00
Daniel Trebbien 4c1d999a7e PR libstdc++/83982 fix exception-safety guarantee of std::vector::resize
Construct new elements before moving existing ones, so that if a default
constructor throws, the existing elements are not left in a moved-from
state.

2018-06-14  Daniel Trebbien <dtrebbien@gmail.com>
	    Jonathan Wakely  <jwakely@redhat.com>

	PR libstdc++/83982
	* include/bits/vector.tcc (vector::_M_default_append(size_type)):
	Default-construct new elements before moving existing ones.
	* testsuite/23_containers/vector/capacity/resize/strong_guarantee.cc:
	New.

Co-Authored-By: Jonathan Wakely <jwakely@redhat.com>

From-SVN: r261585
2018-06-14 10:26:51 +01:00
François Dumont eb04ee1d0f 2018-06-13 François Dumont <fdumont@gcc.gnu.org>
* include/debug/helper_functions.h
	(__gnu_debug::_Safe_iterator<>): Add declaration.
	(__can_advance(_Ite, _Size)): New.
	(__can_advance(const _Safe_iterator<>&, _Size)): Overload declaration.
	* include/debug/functions.h
	(__gnu_debug::_Safe_iterator<>): Remove declaration.
	* include/debug/stl_iterator.h
	(__can_advance(const _Safe_iterator<>&)): New definition.
	* include/debug/stl_iterator.h
	(__can_advance(const std::reverse_iterator<>&, _Size)): New.
	(__can_advance(const std::move_iterator<>&, _Size)): New.
	* include/debug/macros.h (__glibcxx_check_can_increment): New.
	* include/debug/debug.h (__glibcxx_requires_can_increment): New.
	* include/bits/stl_algobase.h (fill_n): Use latter.
	* testsuite/25_algorithms/fill_n/2.cc: New.
	* testsuite/25_algorithms/fill_n/debug/1_neg.cc: New.
	* testsuite/25_algorithms/fill_n/debug/2_neg.cc: New.
	* testsuite/25_algorithms/fill_n/debug/3_neg.cc: New.
	* testsuite/25_algorithms/fill_n/debug/4_neg.cc: New.

From-SVN: r261566
2018-06-13 20:27:26 +00:00
Jonathan Wakely 1cc56f079e PR libstdc++/86127 avoid unnecessary allocator conversions
There is no need to use an allocator of the correct value_type when
calling allocator_traits::construct and allocator_traits::destroy. The
existing node allocator can be used, instead of constructing a new
allocator object every time.

There's also no benefit to using __gnu_cxx::__alloc_traits instead of
std::allocator_traits to get the pointer and const_pointer types.
std::forward_list is only available for C++11 and later, when
std::allocator_traits is available too.

	PR libstdc++/86127
	* include/bits/forward_list.h (_Fwd_list_base::_Tp_alloc_type): Remove
	unused typedef.
	(_Fwd_list_base::_Node_alloc_traits): Use allocator_traits instead of
	__gnu_cxx::__alloc_traits.
	(_Fwd_list_base::_M_create_node, _Fwd_list_base::_M_erase_after):
	Use node allocator to create and destroy elements.
	(forward_list::_Tp_alloc_type): Remove unused typedef.
	(forward_list::_Alloc_traits): Use allocator_traits instead of
	__gnu_cxx::__alloc_traits.

From-SVN: r261554
2018-06-13 16:14:48 +01:00
François Dumont cde650fe2b debug.h (__glibcxx_requires_can_increment_range): New.
2018-06-13  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/debug.h (__glibcxx_requires_can_increment_range): New.
	(__glibcxx_requires_can_decrement_range): New.

From-SVN: r261537
2018-06-13 06:10:03 +00:00
François Dumont 84a9d3b6c1 macros.h (__glibcxx_check_can_increment_range): New.
2018-06-12  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/macros.h (__glibcxx_check_can_increment_range): New.
	(__glibcxx_check_can_decrement_range): New.
	* include/debug/debug.h (__glibcxx_requires_can_increment_range): New.
	(__glibcxx_requires_can_decrement_range): New.
	* include/bits/stl_algobase.h (std::copy(_II, _II, _OI)): Use
	__glibcxx_requires_can_increment_range.
	(std::move(_II, _II, _OI)): Likewise.
	(std::copy_backward(_BI, _BI, _BI2)): Use
	__glibcxx_requires_can_decrement_range.
	(std::move_backward(_BI, _BI, _BI2)): Likewise.
	* testsuite/25_algorithms/copy_backward/debug/1_neg.cc: New.
	* testsuite/25_algorithms/copy_backward/debug/2_neg.cc: New.
	* testsuite/25_algorithms/copy_backward/debug/3_neg.cc: New.
	* testsuite/25_algorithms/equal/debug/1_neg.cc: New.
	* testsuite/25_algorithms/equal/debug/2_neg.cc: New.
	* testsuite/25_algorithms/equal/debug/3_neg.cc: New.

From-SVN: r261525
2018-06-12 20:18:35 +00:00