Commit Graph

11576 Commits

Author SHA1 Message Date
Jonathan Wakely
357beca8bc libstdc++: Fix tests using wrong allocator type
libstdc++-v3/ChangeLog:

	* testsuite/23_containers/unordered_multiset/cons/noexcept_default_construct.cc:
	Use allocator with the correct value type.
	* testsuite/23_containers/unordered_set/cons/noexcept_default_construct.cc:
	Likewise.
2020-07-30 18:41:59 +01:00
Jonathan Wakely
561a19c301 libstdc++: Fix test for old string ABI
The COW string doesn't accept const_iterator arguments in insert and
related member functions. Pass a mutable iterator instead.

libstdc++-v3/ChangeLog:

	* testsuite/20_util/from_chars/4.cc: Pass non-const iterator
	to string::insert.
2020-07-30 16:04:59 +01:00
Jonathan Wakely
9e67b4356e libstdc++: cv bool can't be an integer-like type (LWG 3467)
libstdc++-v3/ChangeLog:

	* include/bits/iterator_concepts.h (__detail::__cv_bool): New
	helper concept.
	(__detail::__integral_nonbool): Likewise.
	(__detail::__is_integer_like): Use __integral_nonbool.
	* testsuite/std/ranges/access/lwg3467.cc: New test.
2020-07-30 13:09:18 +01:00
Jonathan Wakely
eeb45f8a41 libstdc++: Add options for ieee float to relevant tests
libstdc++-v3/ChangeLog:

	* testsuite/20_util/from_chars/4.cc: Use dg-add-options ieee.
	* testsuite/29_atomics/atomic_float/1.cc: Likewise.
2020-07-30 12:50:03 +01:00
Jonathan Wakely
4c27c6584d libstdc++: Make testsuite usable with -fno-exceptions
Previously it was not possible to add -fno-exceptions to the testsuite
flags, because some files that are compiled by the v3-build_support
procedure failed with exceptions disabled.

This adjusts those files to still compile without exceptions (with
degraded functionality in some cases).

The sole testcase that explicitly checks for -fno-exceptions has also
been adjusted to use the more robust exceptions_enabled effective-target
keyword from gcc/testsuite/lib/target-supports.exp.

libstdc++-v3/ChangeLog:

	* testsuite/23_containers/vector/bool/72847.cc: Use the
	exceptions_enabled effective-target keyword instead of
	checking for an explicit -fno-exceptions option.
	* testsuite/util/testsuite_abi.cc (examine_symbol): Remove
	redundant try-catch.
	* testsuite/util/testsuite_allocator.h [!__cpp_exceptions]:
	Do not define check_allocate_max_size and memory_resource.
	* testsuite/util/testsuite_containers.h: Replace comment with
	#error if wrong standard dialect used.
	* testsuite/util/testsuite_shared.cc: Likewise.
2020-07-30 12:50:02 +01:00
GCC Administrator
bea7a39103 Daily bump. 2020-07-30 00:16:24 +00:00
François Dumont
acc1d1a954 libstdc++: Review _Local_iterator/_Local_const_iterator implementations.
_Local_iterator_base inherits _Node_iterator_base and so share the same
comparison operators. It avoids to expose special method _M_curr for debug
mode to compare such iterators.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable_policy.h (_Node_iterator_base()): New.
	(operator==(const _Node_iterator_base&, const _Node_iterator_base&)):
	Make hidden friend.
	(operator!=(const _Node_iterator_base&, const _Node_iterator_base&)):
	Make hidden friend.
	(_Local_iterator_base<>): Inherits _Node_iterator_base.
	(_Local_iterator_base<>::_M_cur): Remove.
	(_Local_iterator_base<>::_M_curr()): Remove.
	(operator==(const _Local_iterator_base&, const _Local_iterator_base&)):
	Remove.
	(operator!=(const _Local_iterator_base&, const _Local_iterator_base&)):
	Remove.
	* include/debug/unordered_map (unordered_map<>::_M_invalidate): Adapt.
	(unordered_multimap<>::_M_invalidate): Adapt.
	* include/debug/unordered_set (unordered_set<>::_M_invalidate): Adapt.
	(unordered_multiset<>::_M_invalidate): Adapt.
2020-07-29 20:46:09 +02:00
David Edelsohn
55ede0bb87 testsuite: libstdc++ atomic_float/value_init.cc requires libatomic
atomic_float/value_init.cc requires libatomic for some targets, i.e., when
it tries to perform an atomic operation with a 64 bit floating point
double type on a 32 bit target.  This patch adds AIX and Darwin to the
list of targets that require the libatomic option and adds the option to
the atomic_float/value_init.cc testcase.

libstdc++-v3/ChangeLog:

2020-07-28  David Edelsohn  <dje.gcc@gmail.com>
	    Jonathan Wakely  <jwakely@redhat.com>
	    Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* testsuite/lib/dg-options.exp (add_options_for_libatomic): Add
	target powerpc-ibm-aix* and powerpc*-*-darwin*.
	* testsuite/29_atomics/atomic_float/value_init.cc: Add options
	for libatomic.
2020-07-29 10:00:05 -04:00
François Dumont
12324b9a93 libstdc++: Fix unordered containers move constructors noexcept qualification
_Hashtable move constructor is wrongly qualified as noexcept(true) regardless of
_Equal and _H1 copy constructor qualifications.
_Hashtable allocator-aware move constructor is missing its noexcept
qualification like the depending unordered containers ones.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable.h
	(_Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a, true_type)):
	Add noexcept qualification.
	(_Hashtable(_Hashtable&&)): Fix noexcept qualification.
	(_Hashtable(_Hashtable&&, const allocator_type&)): Add noexcept
	qualification.
	* include/bits/unordered_map.h
	(unordered_map(unordered_map&&, const allocator_type&)): Add noexcept
	qualification.
	(unordered_multimap(unordered_multimap&&, const allocator_type&)):
	Likewise.
	* include/bits/unordered_set.h
	(unordered_set(unordered_set&&, const allocator_type&)): Likewise.
	(unordered_multiset(unordered_multiset&&, const allocator_type&)):
	Likewise.
	* include/debug/unordered_map
	(unordered_map(unordered_map&&, const allocator_type&)): Likewise.
	(unordered_multimap(unordered_multimap&&, const allocator_type&)):
	Likewise.
	* include/debug/unordered_set
	(unordered_set(unordered_set&&, const allocator_type&)): Likewise.
	(unordered_multiset(unordered_multiset&&, const allocator_type&)):
	Likewise.
	* testsuite/23_containers/unordered_map/allocator/default_init.cc:
	New test.
	* testsuite/23_containers/unordered_map/cons/noexcept_default_construct.cc:
	New test.
	* testsuite/23_containers/unordered_map/cons/noexcept_move_construct.cc:
	New test.
	* testsuite/23_containers/unordered_map/modifiers/move_assign.cc:
	New test.
	* testsuite/23_containers/unordered_multimap/cons/noexcept_default_construct.cc:
	New test.
	* testsuite/23_containers/unordered_multimap/cons/noexcept_move_construct.cc:
	New test.
	* testsuite/23_containers/unordered_multiset/cons/noexcept_default_construct.cc:
	New test.
	* testsuite/23_containers/unordered_multiset/cons/noexcept_move_construct.cc:
	New test.
	* testsuite/23_containers/unordered_set/allocator/default_init.cc:
	New test.
	* testsuite/23_containers/unordered_set/cons/noexcept_default_construct.cc:
	New test.
	* testsuite/23_containers/unordered_set/cons/noexcept_move_construct.cc:
	New test.
2020-07-29 11:26:42 +02:00
GCC Administrator
7ebb7d0ce1 Daily bump. 2020-07-29 00:16:24 +00:00
François Dumont
6dcf042368 libstdc++: Do not over-size hashtable buckets on range insertion
We used to consider range size on insertion but on unique keys container
not all range values might be inserted resulting in over-sizing. In this
case we just consider user reservation and if none then the container will
adapt to actually inserted elements.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable.h
	(_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
	const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
	const allocator_type&, true_type)): New.
	(_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
	const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
	const allocator_type&, false_type)): New.
	(_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
	const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
	const allocator_type&)): Delegate to latters.
	(operator=(initializer_list<value_type>)): Rehash if too small.
	(_M_insert(_Arg&&, const _NodeGenerator&, true_type)): Remove
	size_t len parameter.
	* include/bits/hashtable_policy.h (_Insert_base<>::_M_insert_range):
	Do not try to get input range distance.
	* testsuite/23_containers/unordered_set/cons/bucket_hint.cc: New test.
	* testsuite/23_containers/unordered_set/modifiers/insert.cc: New test.
2020-07-28 14:37:16 +02:00
GCC Administrator
e71dab8774 Daily bump. 2020-07-28 00:16:25 +00:00
François Dumont
f9d98fa748 libstdc++: Review _Hashtable count, equal_range _M_erase(false_type,) code
Simplify operator[] implementation using find method. Review several
_Hashtable method implementations to limit the computation of bucket index.
Introduce _M_update_bbegin to simplify code.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable_policy.h (_Map_base<>::at): Use
	_Hashtable<>::find.
	(_Hashtable_base<>::_Equal_hash_code<>::_S_node_equals):New.
	(_Hashtable_base<>::_M_node_equals): New, use latter.
	(_Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash,
	_RehashPolicy, false>::_M_equal): Adapt to use latter.
	* include/bits/hashtable.h (_Hashtable<>::_M_update_bbegin): New.
	(_Hashtable<>::_M_assign): Use latter.
	(_Hashtable<>::_M_move_assign): Likewise.
	(_Hashtable<>(_Hashtable<>&&)): Likewise.
	(_Hashtable<>(_Hashtable<>&&, const allocator_type&)): Likewise.
	(_Hashtable<>::swap): Likewise.
	(_Hashtable<>::find): Build iterator directly from _M_find_node result.
	(_Hashtable<>::count): Use _Hashtable<>::find.
	(_Hashtable<>::equal_range): Likewise.
	(_Hashtable<>::_M_erase(false_type, const key_type&)): Use
	_M_node_equals.
2020-07-27 21:55:49 +02:00
Jonathan Wakely
2251b4a542 libstdc++: Make std::from_chars always round to nearest
Also fix the tests that fail on targets without uselocale.

libstdc++-v3/ChangeLog:

	* src/c++17/floating_from_chars.cc (from_chars_impl): Ensure
	that FE_NEAREST is used.
	* testsuite/20_util/from_chars/4.cc: Do not use if constexpr in
	a { target c++14 } test.
	[!_GLIBCXX_HAVE_USELOCALE]: Disable all tests.
	* testsuite/20_util/from_chars/5.cc [!_GLIBCXX_HAVE_USELOCALE]:
	Likewise.
	* testsuite/20_util/from_chars/6.cc: New test.
2020-07-27 15:51:24 +01:00
GCC Administrator
3ea9abca71 Daily bump. 2020-07-23 00:16:28 +00:00
Jonathan Wakely
1f53367fb5 libstdc++: Add static assertions to futures and promises [LWG 3458]
LWG recently decided it should be ill-formed to instantiate std::future
and std::shared_future for types that can't be returned from a function.
This adds static assertions to enforce it (std::future already failed,
but this makes the error more understandable).

LWG 3466 extends that to std::promise. The actual constraint is that
t.~T() is well-formed for the primary template, but rejecting arrays and
functions as done for futures matches that condition.

libstdc++-v3/ChangeLog:

	* include/std/future (future, shared_future, promise): Add
	static assertions to the primary template to reject array and
	function types.
	* testsuite/30_threads/future/requirements/lwg3458.cc: New test.
	* testsuite/30_threads/promise/requirements/lwg3466.cc: New test.
	* testsuite/30_threads/shared_future/requirements/lwg3458.cc: New test.
2020-07-22 20:11:00 +01:00
Jonathan Wakely
a5a8a4e615 libstdc++: Constrain reverse_iterator and move_iterator conversions [LWG 3435]
libstdc++-v3/ChangeLog:

	* include/bits/stl_iterator.h (reverse_iterator): Constrain
	converting constructor and converting assignment operator.
	Access source iterator's data member directly instead of
	calling base().
	(move_iterator): Likewise.
	* testsuite/24_iterators/move_iterator/dr3435.cc: New test.
	* testsuite/24_iterators/reverse_iterator/dr3435.cc: New test.
2020-07-22 15:10:29 +01:00
GCC Administrator
0933f50859 Daily bump. 2020-07-21 00:16:28 +00:00
Jonathan Wakely
932fbc868a libstdc++: Add std::from_chars for floating-point types
This adds the missing std::from_chars overloads for floating-point
types, as required for C++17 conformance.

The implementation is a hack and not intended to be used in the long
term. Rather than parsing the string directly, this determines the
initial portion of the string that matches the pattern determined by the
chars_format parameter, then creates a NTBS to be parsed by strtod (or
strtold or strtof).

Because creating a NTBS requires allocating memory, but std::from_chars
is noexcept, we need to be careful to minimise allocation. Even after
being careful, allocation failure is still possible, and so a
non-conforming std::no_more_memory error code might be returned.

Because strtod et al depend on the current locale, but std::from_chars
does not, we change the current thread's locale to "C" using newlocale
and uselocale before calling strtod, and restore it afterwards.

Because strtod doesn't have the equivalent of a std::chars_format
parameter, it has to examine the input to determine the format in use,
even though the std::from_chars code has already parsed it once (or
twice for large input strings!)

By replacing the use of strtod we could avoid allocation, avoid changing
locale, and use optimised code paths specific to each std::chars_format
case. We would also get more portable behaviour, rather than depending
on the presence of uselocale, and on any bugs or quirks of the target
libc's strtod. Replacing strtod is a project for a later date.

libstdc++-v3/ChangeLog:

	* acinclude.m4 (libtool_VERSION): Bump version.
	* config.h.in: Regenerate.
	* config/abi/pre/gnu.ver: Add GLIBCXX_3.4.29 version and new
	exports.
	* config/os/gnu-linux/ldbl-extra.ver: Add _GLIBCXX_LDBL_3.4.29
	version and new export.
	* configure: Regenerate.
	* configure.ac: Check for <xlocale.h> and uselocale.
	* crossconfig.m4: Add macro or checks for uselocale.
	* include/std/charconv (from_chars): Declare overloads for
	float, double, and long double.
	* src/c++17/Makefile.am: Add new file.
	* src/c++17/Makefile.in: Regenerate.
	* src/c++17/floating_from_chars.cc: New file.
	(from_chars): Define for float, double, and long double.
	* testsuite/20_util/from_chars/1_c++20_neg.cc: Prune extra
	diagnostics caused by new overloads.
	* testsuite/20_util/from_chars/1_neg.cc: Likewise.
	* testsuite/20_util/from_chars/2.cc: Check leading '+'.
	* testsuite/20_util/from_chars/4.cc: New test.
	* testsuite/20_util/from_chars/5.cc: New test.
	* testsuite/util/testsuite_abi.cc: Add new symbol versions.
2020-07-20 23:49:27 +01:00
Jonathan Wakely
4d1c5b4957 libstdc++: Avoid overflow in istream::get(streambuf&) [LWG 3464]
Similar to the recent changes to basic_istream::ignore, this change
ensures that _M_gcount doesn't overflow when extracting characters and
inserting them into another streambuf.

The solution used here is to use unsigned long long for the count. We
assume that the number of characters extracted won't exceed the maximum
value for that type, but even if it does we avoid any undefined
behaviour.

libstdc++-v3/ChangeLog:

	* include/bits/istream.tcc
	(basic_istream::get(__streambuf_type&, char_type): Use unsigned
	long long for counter and check if it would overflow _M_gcount.
	* testsuite/27_io/basic_istream/get/char/lwg3464.cc: New test.
	* testsuite/27_io/basic_istream/get/wchar_t/lwg3464.cc: New test.
2020-07-20 20:06:46 +01:00
GCC Administrator
ab660b01c3 Daily bump. 2020-07-18 00:16:24 +00:00
Iain Sandoe
f1b6e46c41 libstdc++, coroutine: Add missing constexpr markers.
The methods of the trivial awaitables are intended to
be constexpr.

libstdc++-v3/ChangeLog:

	* include/std/coroutine: Mark the methods of the
	trivial awaitables as constexpr.
2020-07-17 19:51:09 +01:00
GCC Administrator
8ca07a3072 Daily bump. 2020-07-15 00:16:35 +00:00
David Edelsohn
4f97bed9a7 aix: FAT libraries: test native compiler mode directly
The FAT libraries config fragments need to know which library is native
and which is a multilib to choose the correct multilib from which to
append the additional object file or shared object file.  Testing the
top-level archive is fragile because it will fail if rebuilding.  This
patch tests the compiler preprocessing macros for the 64 bit AIX specific
__64BIT__ to determine the native mode of the compiler in MULTILIBTOP.

2020-07-14  David Edelsohn  <dje.gcc@gmail.com>

libatomic/ChangeLog

	* config/t-aix: Set BITS from compiler cpp macro.

libgcc/ChangeLog

	* config/rs6000/t-slibgcc-aix: Set BITS from compiler cpp macro.

libgfortran/ChangeLog

	* config/t-aix: Set BITS from compiler cpp macro.

libgomp/ChangeLog

	* config/t-aix: Set BITS from compiler cpp macro.

libstdc++-v3/ChangeLog

	* config/os/aix/t-aix: Set BITS from compiler cpp macro.
2020-07-14 10:41:40 -04:00
GCC Administrator
ea69fcf9a0 Daily bump. 2020-07-14 00:16:30 +00:00
Jonathan Wakely
ba8fe4b483 libstdc++: Fix istream::ignore exit conditions (PR 94749, PR 96161)
My previous fix for PR 94749 did fix the reported case, so that the next
character is not discarded if it happens to equal the delimiter when __n
characters have already been read. But it introduced a new bug, which is
that the delimiter character would *not* be discarded if the number of
characters discarded is numeric_limits<streamsize>::max() or more before
reaching the delimiter.

The new bug happens because I changed the code to check _M_gcount < __n.
But when __n == numeric_limits<streamsize>::max() that is false, and so
we don't discard the delimiter. It's not sufficient to check for the
delimiter when the __large_ignore condition is true, because there's an
edge case where the delimiter is reached when _M_gcount == __n and so
we break out of the loop without setting __large_ignore.

PR 96161 is a similar bug to the original PR 94749 report, where eofbit
is set after discarding __n characters if there happen to be no more
characters in the stream.

This patch fixes both cases (and the regression) by checking different
conditions for the __n == max case and the __n < max case. For the
former case, we know that we must have either reached the delimiter or
EOF, and the value of _M_gcount doesn't matter (except to avoid integer
overflow). For the latter case we need to check _M_gcount first and only
set eofbit or discard the delimiter if it didn't reach __n. For the
latter case overflow can't happen because _M_gcount <= __n < max.

libstdc++-v3/ChangeLog:

	PR libstdc++/94749
	PR libstdc++/96161
	* include/bits/istream.tcc (basic_istream::ignore(streamsize))
	[n == max]: Check overflow conditions on _M_gcount. Rely on
	the fact that either EOF or the delimiter was reached.
	[n < max]: Check _M_gcount < n before checking for EOF or
	delimiter.
	(basic_istream::ignore(streamsize, char_type): Likewise.
	* src/c++98/compatibility.cc (istream::ignore(streamsize))
	(wistream::ignore(streamsize)): Likewise.
	* src/c++98/istream.cc (istream::ignore(streamsize, char_type))
	(wistream::ignore(streamsize, char_type)): Likewise.
	* testsuite/27_io/basic_istream/ignore/char/94749.cc: Check that
	delimiter is discarded if the number of characters ignored
	doesn't fit in streamsize.
	* testsuite/27_io/basic_istream/ignore/wchar_t/94749.cc:
	Likewise.
	* testsuite/27_io/basic_istream/ignore/char/96161.cc: New test.
	* testsuite/27_io/basic_istream/ignore/wchar_t/96161.cc: New test.
2020-07-13 12:09:44 +01:00
GCC Administrator
50873cc588 Daily bump. 2020-07-09 00:16:44 +00:00
François Dumont
c832cf1c1d libstdc++: Fix [multi]map/[multi]set move constructors noexcept qualification
Container move constructors shall not consider their allocator move
constructor qualification.

libstdc++-v3/ChangeLog:

	* include/bits/stl_tree.h (_Rb_tree_impl(_Rb_tree_impl&&)): Add noexcept
	qualification based only on _Compare one.
	* testsuite/23_containers/map/cons/noexcept_move_construct.cc: Add
	static asserts.
	* testsuite/23_containers/multimap/cons/noexcept_move_construct.cc:
	Likewise.
	* testsuite/23_containers/multiset/cons/noexcept_move_construct.cc:
	Likewise.
	* testsuite/23_containers/set/cons/noexcept_move_construct.cc: Likewise.
2020-07-08 08:02:16 +02:00
GCC Administrator
f60ee68de3 Daily bump. 2020-07-08 00:16:40 +00:00
Jonathan Wakely
161aa50ee2 libstdc++: Whitespace changes to remove spaces before tabs
libstdc++-v3/ChangeLog:

	* include/std/limits: Whitespace changes.
2020-07-07 23:39:44 +01:00
Jonathan Wakely
eb04805be4 libstdc++: Replace __int_limits with __numeric_traits_integer
I recently added std::__detail::__int_limits as a lightweight
alternative to std::numeric_limits, forgetting that the values it
provides (digits, min and max) are already provided by
__gnu_cxx::__numeric_traits.

This change adds __int_traits as an alias for __numeric_traits_integer.
This avoids instantiating __numeric_traits to decide whether to use
__numeric_traits_integer or __numeric_traits_floating. Then all uses of
__int_limits can be replaced with __int_traits, and __int_limits can be
removed.

libstdc++-v3/ChangeLog:

	* include/Makefile.am: Remove bits/int_limits.h.
	* include/Makefile.in: Regenerate.
	* include/bits/int_limits.h: Removed.
	* include/bits/parse_numbers.h (_Select_int_base): Replace
	__int_limits with __int_traits.
	* include/bits/range_access.h (_SSize::operator()): Likewise.
	* include/ext/numeric_traits.h (__numeric_traits_integer): Add
	static assertion.
	(__int_traits): New alias template.
	* include/std/bit (__rotl, __rotr, __countl_zero, __countl_one)
	(__countr_zero, __countr_one, __popcount, __bit_ceil)
	(__bit_floor, __bit_width) Replace __int_limits with
	__int_traits.
	* include/std/charconv (__to_chars_8, __from_chars_binary)
	(__from_chars_alpha_to_num, from_chars): Likewise.
	* include/std/memory_resource (polymorphic_allocator::allocate)
	(polymorphic_allocator::allocate_object): Likewise.
	* include/std/string_view (basic_string_view::_S_compare):
	Likewise.
	* include/std/utility (cmp_equal, cmp_less, in_range): Likewise.
2020-07-07 23:36:29 +01:00
Jonathan Wakely
9ca8fefeb7 libstdc++: Whitespace changes to keep lines below 80 columns
Also remove leading spaces that are followed by tabs.

libstdc++-v3/ChangeLog:

	* include/std/limits: Whitespace changes.
2020-07-07 23:35:10 +01:00
Jonathan Wakely
92cae0785e libstdc++: Add PR number to ChangeLog entry and fix typos 2020-07-07 08:23:12 +01:00
GCC Administrator
4077d74c6d Daily bump. 2020-07-07 00:16:40 +00:00
Jonathan Wakely
6e1c9715b3 libstdc++: Cleanup whitespace and type trait usage in <optional>
This makes the formatting in <optional> consistent and also removes
redundant && tokens from template arguments for traits like
is_constructible and is_convertible.

libstdc++-v3/ChangeLog:

	* include/std/optional (_Optional_payload_base, _Optional_base)
	(optional, __optional_hash_call_base): Adjust whitespace and
	other formatting. Remove redundant && tokens on template
	arguments to type traits.
2020-07-06 21:55:50 +01:00
Jonathan Wakely
bcfe4681f9 libstdc++: Constrain std::make_optional
The standard rquires that std::make_optional is constrained similarly to
the std::optional constructors, which our implementation fails to do.

As a conforming extension this also adds a noexcept-specifier to each
std::make_optional overload.

libstdc++-v3/ChangeLog:

	* include/std/optional (make_optional): Add enable_if
	constraints and noexcept-specifier to each overload.
	* testsuite/20_util/optional/make_optional-2.cc: New test.
2020-07-06 21:54:59 +01:00
Jonathan Wakely
8992cd1892 libstdc++: Add noexcept to std::optional initialization (PR 96036)
libstdc++-v3/ChangeLog:

	PR libstdc++/96036
	* include/std/optional (optional): Add noexcept-specifier to
	every constructor, assignment operator, emplace function and
	dereference operator.
	* testsuite/20_util/optional/assignment/noexcept.cc: New test.
	* testsuite/20_util/optional/cons/noexcept.cc: New test.
2020-07-06 21:54:12 +01:00
Jonathan Wakely
0e5abeb0cb libstdc++: Fix -Wmismatched-tags warnings (PR 96063)
libstdc++-v3/ChangeLog:

	* include/bits/fs_dir.h: Use consistent tag in class-head.
	* include/bits/localefwd.h: Likwise.
	* include/bits/regex.h: Likwise.
	* include/bits/stl_map.h: Likwise.
	* include/bits/stl_multimap.h: Likwise.
	* include/bits/stl_multiset.h: Likwise.
	* include/bits/stl_set.h: Likwise.
	* include/std/complex: Likwise.
	* include/std/functional: Likwise.
	* include/std/future: Likwise.
	* include/std/system_error: Likwise.
	* include/std/thread: Likwise.
	* include/std/tuple: Likwise.
	* include/std/type_traits: Likwise.
	* include/std/valarray: Likwise.
2020-07-06 17:12:29 +01:00
GCC Administrator
b5f2473963 Daily bump. 2020-07-03 00:16:25 +00:00
Jonathan Wakely
5079855e7e libstdc++: Require c++98_only effective target for a test
This test checks a conversion which only exists in C++98 and won't
compile since C++11. It uses { dg-options "-std=gnu++98" } so that it is
explicitly run in C++98 mode. This change also adds a target selector so
that the test will be skipped if the dg-options directive is filtered
out or overridden.

libstdc++-v3/ChangeLog:

	* testsuite/27_io/basic_ios/conv/voidptr.cc: Add c++98_only
	target selector.
2020-07-02 21:27:22 +01:00
Jonathan Wakely
b857b17977 libstdc++: Require c++98_only effective target for some tests
These tests verify that including C++11 headers fails to compile in
C++98 mode. They use { dg-options "-std=gnu++98" } so that they are
explicitly run in C++98 mode. This change also adds a target selector so
that the tests will be skipped even if the dg-options directive is
filtered out or overridden. This is in preparation for a desired future
change where tests do not use -std options, so that they can be tested
with e.g. --target_board=unix\"{-std=gnu++17,-std=gnu++20}\"

In some cases the dg-options and dg-do directives need to be reordered,
so that the -std=gnu++98 option is already added to the options before
the target selector is checked.

libstdc++-v3/ChangeLog:

	* testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc: Add
	c++98_only target selector.
	* testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc:
	Likewise.
	* testsuite/18_support/headers/cstdint/std_c++0x_neg.cc:
	Likewise.
	* testsuite/18_support/headers/new/synopsis_cxx98.cc: Likewise.
	* testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc:
	Likewise.
	* testsuite/20_util/headers/type_traits/std_c++0x_neg.cc:
	Likewise.
	* testsuite/23_containers/headers/array/std_c++0x_neg.cc:
	Likewise.
	* testsuite/23_containers/headers/tuple/std_c++0x_neg.cc:
	Likewise.
	* testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc:
	Likewise.
	* testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc:
	Likewise.
	* testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc:
	Likewise.
	* testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc:
	Likewise.
	* testsuite/26_numerics/headers/cmath/c99_classification_macros_c++98.cc:
	Likewise.
	* testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc:
	Likewise.
	* testsuite/26_numerics/headers/random/std_c++0x_neg.cc:
	Likewise.
	* testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc: Likewise.
	* testsuite/28_regex/headers/regex/std_c++0x_neg.cc: Likewise.
	* testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc:
	Likewise.
	* testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc:
	Likewise.
	* testsuite/30_threads/headers/future/std_c++0x_neg.cc:
	Likewise.
	* testsuite/30_threads/headers/mutex/std_c++0x_neg.cc: Likewise.
	* testsuite/30_threads/headers/thread/std_c++0x_neg.cc:
	Likewise.
2020-07-02 21:27:12 +01:00
Ville Voutilainen
dbca7a69f2 PR libstdc++/91807
PR libstdc++/91807
	* include/std/variant
	(_Copy_assign_base::operator=(const _Copy_assign_base&):
	Do the move-assignment from a temporary so that the temporary
	is constructed with an explicit index.
	* testsuite/20_util/variant/91807.cc: New.
2020-07-02 22:16:39 +03:00
Jonathan Wakely
c6f431bba5 libstdc++: Fix atomic<long double> tests (PR 91153, PR 93224)
These tests fail with AIX double double. Use different floating point
values that behave less surprisingly.

libstdc++-v3/ChangeLog:

	PR libstdc++/91153
	PR target/93224
	* testsuite/29_atomics/atomic_float/1.cc: Use different values
	for tests.
	* testsuite/29_atomics/atomic_ref/float.cc: Likewise.
2020-07-02 19:05:13 +01:00
GCC Administrator
64f761e4ac Daily bump. 2020-07-02 00:16:26 +00:00
Jonathan Wakely
a1a0dc4548 libstdc++: Remove noexcept from match_results comparisons (PR 94627)
These functions can't be noexcept because the iterators stored in the
sub_match objects can throw on any operation.

libstdc++-v3/ChangeLog:

	PR libstdc++/94627
	* include/bits/regex.h (operator==, operator!=): Remove noexcept
	equality comparisons for match_results.
	* testsuite/28_regex/match_results/94627.cc: New test.
2020-07-01 21:06:42 +01:00
Martin Sebor
8461191b82 Adjust text of expected warnings changed in PR c++/86568.
libstdc++-v3/ChangeLog:

	* testsuite/21_strings/basic_string_view/cons/char/nonnull.cc: Adjust
	text of expected warning.
	* testsuite/21_strings/basic_string_view/cons/wchar_t/nonnull.cc: Same.
	* testsuite/21_strings/basic_string_view/operations/compare/char/nonnull.cc: Same.
	* testsuite/21_strings/basic_string_view/operations/find/char/nonnull.cc: Same.
	* testsuite/21_strings/basic_string_view/operations/rfind/char/nonnull.cc: Same.
2020-07-01 08:33:29 -06:00
GCC Administrator
458f12eda1 Daily bump. 2020-06-30 09:02:21 +00:00
Ville Voutilainen
2635f9e508 Revert "Add a __nonnnull__ attribute to std::string's _CharT* constructor"
This reverts commit b26fd416fb.
2020-06-30 01:59:34 +03:00
GCC Administrator
69273534c6 Daily bump. 2020-06-29 00:16:29 +00:00
Ville Voutilainen
b26fd416fb Add a __nonnnull__ attribute to std::string's _CharT* constructor
Add a __nonnnull__ attribute to std::string's _CharT* constructor
	* include/bits/basic_string.h (string(_CharT*, const _Alloc&)):
	Add a __nonnull__ attribute.
	* testsuite/21_strings/basic_string/cons/char/nonnull.cc: New.
	* testsuite/21_strings/basic_string/cons/wchar_t/nonnull.cc: Likewise.
2020-06-29 00:47:05 +03:00