Commit Graph

12176 Commits

Author SHA1 Message Date
Jonathan Wakely
0bd242ec5a libstdc++: Make test memory_resource work without exceptions and RTTI
libstdc++-v3/ChangeLog:

	* testsuite/util/testsuite_allocator.h (memory_resource):
	Remove requirement for RTTI and exceptions to be enabled.
2021-02-12 14:30:13 +00:00
Jonathan Wakely
e9c3105211 libstdc++: Only use dynamic_cast in tests when RTTI is enabled
libstdc++-v3/ChangeLog:

	* testsuite/27_io/basic_istringstream/rdbuf/char/2832.cc: Use
	static_cast when RTTI is disabled.
	* testsuite/27_io/basic_istringstream/rdbuf/wchar_t/2832.cc:
	Likewise.
	* testsuite/27_io/basic_ostringstream/rdbuf/char/2832.cc:
	Likewise.
	* testsuite/27_io/basic_ostringstream/rdbuf/wchar_t/2832.cc:
	Likewise.
	* testsuite/27_io/basic_stringstream/str/char/2.cc:
	Likewise.
	* testsuite/27_io/basic_stringstream/str/wchar_t/2.cc:
	Likewise.
2021-02-12 14:30:13 +00:00
Jonathan Wakely
14b554c462 libstdc++: Fix errors when syncbuf is used without RTTI
libstdc++-v3/ChangeLog:

	* include/std/ostream (__syncbuf_base::_S_get): Mark parameter
	as unused and only use dynamic_cast when RTTI is enabled.
2021-02-12 14:30:12 +00:00
Jonathan Wakely
4591f7e532 libstdc++: Fix bootstrap with -fno-rtti [PR 99077]
When libstdc++ is built without RTTI the __ios_failure type is just an
alias for std::ios_failure, so trying to construct it from an int won't
compile. This changes the RTTI-enabled __ios_failure type to have the
same constructor parameters as std::ios_failure, so that the constructor
takes the same arguments whether RTTI is enabled or not.

The __throw_ios_failure function now constructs the error_code, instead
of the __ios_failure constructor. As a drive-by fix that error_code is
constructed with std::generic_category() not std::system_category(),
because the int comes from errno which corresponds to the generic
category.

libstdc++-v3/ChangeLog:

	PR libstdc++/99077
	* src/c++11/cxx11-ios_failure.cc (__ios_failure(const char*, int)):
	Change int parameter to error_code, to match std::ios_failure.
	(__throw_ios_failure(const char*, int)): Construct error_code
	from int parameter.
2021-02-12 14:30:12 +00:00
GCC Administrator
0c5cdb31bd Daily bump. 2021-02-12 00:16:25 +00:00
Jonathan Wakely
bc0f7db7eb libstdc++: Fix versioned namespace build
The recent changes to define various std::exception_ptr functions inline
included a change so that the definitions of those functions would be
omitted for the ABI unstable gnu-versioned-namespace configuration. That
change was incorrect, because the existing functions that are gated by
the _GLIBCXX_EH_PTR_COMPAT macro are always needed even for the
versioned namespace.

This change introduces a new macro to control whether operator== is
defined as deleted or not, distinct from the existing macro. The new
macro is not defined for versioned namespace builds, but the old macro
still is.

libstdc++-v3/ChangeLog:

	* libsupc++/eh_ptr.cc (_GLIBCXX_EH_PTR_RELOPS_COMPAT): Define
	new macro.
	* libsupc++/exception_ptr.h (_GLIBCXX_EH_PTR_USED): Check new
	macro instead of _GLIBCXX_EH_PTR_COMPAT.
	(operator==): Likewise.
2021-02-11 17:28:16 +00:00
Jonathan Wakely
ce43c90604 libstdc++: Document when C++11/14/17 support became stable [PR 99058]
libstdc++-v3/ChangeLog:

	PR libstdc++/99058
	* doc/xml/manual/status_cxx2011.xml: Document when support
	became stable.
	* doc/xml/manual/status_cxx2014.xml: Likewise.
	* doc/xml/manual/status_cxx2017.xml: Likewise.
	* doc/html/manual/status.html: Regenerate.
2021-02-11 17:28:16 +00:00
GCC Administrator
4b37c3ea8a Daily bump. 2021-02-11 00:16:33 +00:00
Jonathan Wakely
3df5b249b3 libstdc++: Re-enable workaround for _wstat64 bug [PR 88881]
This wasn't fixed upstream for mingw-w64 so we still need the
workaround.

libstdc++-v3/ChangeLog:

	PR libstdc++/88881
	* src/c++17/fs_ops.cc (fs::status): Re-enable workaround.
2021-02-10 16:51:34 +00:00
Jonathan Wakely
313e2dc377 libstdc++: Use correct error category for Windows error codes
When the result of GetLastError() is stored in a std::error_code it
should use std::system_category(), not std::generic_category() that is
used for POSIX errno values.

libstdc++-v3/ChangeLog:

	* src/c++17/fs_ops.cc (fs::create_hard_link, fs::equivalent)
	(fs::remove): Use std::system_category() for error codes from
	GetLastError().
	* src/filesystem/ops.cc (fs::create_hard_link, fs::remove):
	Likewise.
2021-02-10 16:45:38 +00:00
Jonathan Wakely
6a6f74be9d libstdc++: Fix spelling of __MINGW32__ macros
libstdc++-v3/ChangeLog:

	* testsuite/27_io/filesystem/operations/proximate.cc: Fix typo
	in __MINGW32__ macro name.
	* testsuite/27_io/filesystem/path/compare/lwg2936.cc: Likewise.
	* testsuite/27_io/filesystem/path/generation/proximate.cc:
	Likewise.
	* testsuite/27_io/filesystem/path/generation/relative.cc:
	Likewise.
	* testsuite/util/testsuite_fs.h: Likewise.
2021-02-10 16:40:29 +00:00
GCC Administrator
0a91b73e5b Daily bump. 2021-02-10 00:16:39 +00:00
François Dumont
d2b1a6842c libstdc++: Add unordered containers heterogeneous lookup
Add unordered containers heterogeneous lookup member functions find, count, contains and
equal_range in C++20. Those members are considered for overload resolution only if hash and
equal functors used to instantiate the container have a nested is_transparent type.

libstdc++-v3/ChangeLog:

	* include/bits/stl_tree.h
	(__has_is_transparent, __has_is_transparent_t): Move...
	* include/bits/stl_function.h: ...here.
	* include/bits/hashtable_policy.h (_Hash_code_base<>::_M_hash_code_tr): New..
	(_Hashtable_base<>::_M_equals_tr): New.
	* include/bits/hashtable.h (_Hashtable<>::_M_find_tr, _Hashtable<>::_M_count_tr,
	_Hashtable<>::_M_equal_range_tr): New member function templates to perform
	heterogeneous lookup.
	(_Hashtable<>::_M_find_before_node_tr): New.
	(_Hashtable<>::_M_find_node_tr): New.
	* include/bits/unordered_map.h (unordered_map::find<>, unordered_map::count<>,
	unordered_map::contains<>, unordered_map::equal_range<>): New member function
	templates to perform heterogeneous lookup.
	(unordered_multimap::find<>, unordered_multimap::count<>,
	unordered_multimap::contains<>, unordered_multimap::equal_range<>): Likewise.
	* include/bits/unordered_set.h  (unordered_set::find<>, unordered_set::count<>,
	unordered_set::contains<>, unordered_set::equal_range<>): Likewise.
	(unordered_multiset::find<>, unordered_multiset::count<>,
	unordered_multiset::contains<>, unordered_multiset::equal_range<>): Likewise.
	* include/debug/unordered_map
	(unordered_map::find<>, unordered_map::equal_range<>): Likewise.
	(unordered_multimap::find<>, unordered_multimap::equal_range<>): Likewise.
	* include/debug/unordered_set
	(unordered_set::find<>, unordered_set::equal_range<>): Likewise.
	(unordered_multiset::find<>, unordered_multiset::equal_range<>): Likewise.
	* testsuite/23_containers/unordered_map/operations/1.cc: New test.
	* testsuite/23_containers/unordered_multimap/operations/1.cc: New test.
	* testsuite/23_containers/unordered_multiset/operations/1.cc: New test.
	* testsuite/23_containers/unordered_set/operations/1.cc: New test.
2021-02-09 21:56:27 +01:00
François Dumont
f6be5d6ee3 libstdc++: Remove execution branch in deque iterator operator-
libstdc++-v3/ChangeLog:

	* include/bits/stl_deque.h
	(std::operator-(deque::iterator, deque::iterator)): Replace if/then with
	a null pointer test.
2021-02-09 21:56:27 +01:00
Jonathan Wakely
bfdb7b8c6f libstdc++: Clear up directories created by tests
libstdc++-v3/ChangeLog:

	* testsuite/27_io/filesystem/operations/remove_all.cc: Remove
	test directory after making it writable again.
	* testsuite/experimental/filesystem/operations/remove_all.cc:
	Likewise.
2021-02-09 16:54:41 +00:00
Jonathan Wakely
26a3f288f1 libstdc++: Make coroutine_handle<_Promise>::from_address() noexcept [PR 99021]
The coroutine_handle<void>::from_address(void*) version is already
noexcept, and they do the same thing. Make them consistent.

libstdc++-v3/ChangeLog:

	PR libstdc++/99021
	* include/std/coroutine (coroutine_handle<P>::from_address): Add
	noexcept.
2021-02-09 12:31:52 +00:00
Vladimir Vishnevsky
adeaa43ad3 libstdc++: Fix build failure for targets without unistd.h
The patch fixes build issues occurring if build parameter
"--enable-cstdio=stdio_pure" is specified and no unistd.h is
present in the environment.

libstdc++-v3/ChangeLog:

	* include/ext/stdio_sync_filebuf.h: Remove unused <unistd.h>.
	* src/c++17/fs_ops.cc (fs::permissions): Qualify mode_t.
2021-02-09 12:31:52 +00:00
Jakub Jelinek
e14ea108fa string: Add a workaround for -Wstringop-overread false positives [PR98465]
In the PR there are several possibilities how to improve _M_disjunct at
least in certain cases so that the compiler can figure out at least in some
cases where __s is provably disjunct from _M_data() ... _M_data() + this->size()
but it is probably GCC 12 material.

The false positive warning is on this particular copy, which is done for
non-disjunct pointers when __len2 > __len1 and the __s >= __p + __len1,
i.e. __s used to point to the characters moved through _S_move a few lines earlier
by __len2 - __len1 characters up to make space.  That is why the
_S_copy source is __s + __len2 - __len1.  Unfortunately, when the compiler
can't prove objects are disjunct, that copying from __s + __len2 - __len1
of __len2 characters can very well mean accessing characters the source
object (if it is not disjunct) provably can't have.

The following patch works around that by making the _S_copy be a __p based
pointer instead of __s based pointer.
__s + __len2 - __len1
and
__p + (__s - __p) + (__len2 - __len1)
have the same value and the latter may seem to be uselessly longer,
but it seems at least currently in GIMPLE we keep it that way and so that is
what the warning code during expansion will see, and only actually
optimize it to __s + __len2 - __len1 during RTL when we lose information
on what is a pointer and what is a mere offset with the same mode.

So, in the end we emit exactly the same assembly, just without the false
positive warning.

2021-02-09  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/98465
	* include/bits/basic_string.tcc (basic_string::_M_replace): When __s
	points to the characters moved by earlier _S_move, compute the source
	address using expression based on the __p pointer rather than __s
	pointer.

	* g++.dg/warn/Wstringop-overread-1.C: New test.
2021-02-09 12:32:43 +01:00
GCC Administrator
9faaa80776 Daily bump. 2021-02-04 00:16:32 +00:00
Jonathan Wakely
a6f08be383 libstdc++: Fix incorrect test for std::error_code comparisons
The tests for std::error_code comparisons assumed that a default
constructed object uses std::generic_category(). That's true for a
default constructed std::error_condition, but not std::error_code.

Fix the three-way comparisons to correctly depend on the result of
comparing the categories, and add another test for comparing two objects
with the same category and different values.

libstdc++-v3/ChangeLog:

	* testsuite/19_diagnostics/error_code/operators/not_equal.cc:
	Add comparison with same category and different values.
	* testsuite/19_diagnostics/error_code/operators/less.cc:
	Likewise. Fix comparison involving different categories.
	* testsuite/19_diagnostics/error_code/operators/three_way.cc:
	Likewise.
	* testsuite/19_diagnostics/error_condition/operators/less.cc:
	Add comment.
	* testsuite/19_diagnostics/error_condition/operators/three_way.cc:
	Likewise.
2021-02-03 15:49:36 +00:00
yaozhongxiao
5988765741 libstdc++: Improve "find_first/last_set" for NEON
The find_first_set and find_last_set method is not optimal for neon, it
needs to be improved by synthesized with horizontal adds(vaddv) which
will reduce the generated assembly code. In the following cases,
vaddvq_s16 will generate 2 instructions but vpadd_s16 will generate 4
instructions:

 # vaddvq_s16
    vaddvq_s16(__asint);
    //  addv    h0, v1.8h
    //  smov    w1, v0.h[0]
 # vpadd_s16
    vpaddq_s16(vpaddq_s16(vpaddq_s16(__asint, __zero), __zero), __zero)[0]
    // addp v1.8h,v1.8h,v2.8h
    // addp v1.8h,v1.8h,v2.8h
    // addp v1.8h,v1.8h,v2.8h
    // smov    w1, v1.h[0]
 #

libstdc++-v3/ChangeLog:

	* include/experimental/bits/simd_neon.h: Replace repeated vpadd
	calls with a single vaddv for aarch64.
2021-02-03 15:49:30 +00:00
Matthias Kretz
3de9bd16c9 libstdc++: Work around test failures using -mno-tree-vrp
This is necessary to avoid failures resulting from PR98834.

libstdc++-v3/ChangeLog:

	* testsuite/Makefile.am: Warn about the workaround. Add
	-fno-tree-vrp to CXXFLAGS passed to the check_simd script.
	Improve initial user feedback from make check-simd.
	* testsuite/Makefile.in: Regenerated.
2021-02-03 15:49:30 +00:00
Matthias Kretz
4b940ccee1 libstc++: Implement hmin and hmax
From 9.7.4 in Parallelism TS 2. For some reason I overlooked these two
functions. Implement them via call to _S_reduce.

libstdc++-v3/ChangeLog:

	* include/experimental/bits/simd.h: Add __detail::_Minimum and
	__detail::_Maximum to use them as _BinaryOperation to _S_reduce.
	Add hmin and hmax overloads for simd and const_where_expression.
	* include/experimental/bits/simd_scalar.h
	(_SimdImplScalar::_S_reduce): Make unused _BinaryOperation
	parameter const-ref to allow calling _S_reduce with an rvalue.
	* testsuite/experimental/simd/tests/reductions.cc: Add tests for
	hmin and hmax. Since the compiler statically determined that all
	tests pass, repeat the test after a call to make_value_unknown.
2021-02-03 15:49:30 +00:00
Matthias Kretz
af60e4bd4b libstdc++: Improve test codegen for interpreting assembly
In many failure cases it is helpful to inspect the instructions leading
up to the test failure. After this change the location is easier to find
and the branch after failure is easier to find.

libstdc++-v3/ChangeLog:

	* testsuite/experimental/simd/tests/bits/verify.h (verify): Add
	instruction pointer data member. Ensure that the `if (m_failed)`
	branch is always inlined into the calling code. The body of the
	conditional can still be a function call. Move the get_ip call
	into the verify ctor to simplify the ctor calls.
	(COMPARE): Don't mention the use of all_of for reduction of a
	simd_mask. It only distracts from the real issue.
2021-02-03 15:49:30 +00:00
Matthias Kretz
8f7ad98651 libstdc++: Support timeout and timeout-factor options
libstdc++-v3/ChangeLog:

	* testsuite/experimental/simd/driver.sh: Abstract reading test
	options into read_src_option function. Read skip, only,
	expensive, and xfail via read_src_option. Add timeout and
	timeout-factor options and adjust timeout variable accordingly.
	* testsuite/experimental/simd/tests/loadstore.cc: Set
	timeout-factor 2.
2021-02-03 15:49:30 +00:00
Matthias Kretz
ec384c5690 libstdc++: Abort test after 1000 lines of output
Handle overly large output by aborting the log and thus the test. This
is a similar condition to a timeout.

libstdc++-v3/ChangeLog:

	* testsuite/experimental/simd/driver.sh: When handling the pipe
	to log (and on verbose to stdout) count the lines. If it exceeds
	1000 log the issue and exit 125, which is then handled as a
	failure.
2021-02-03 15:49:30 +00:00
Matthias Kretz
b83a52fe07 libstdc++: Skip testing hypot3 for long double on PPC
std::hypot(a, b, c) is imprecise and makes this test fail even though
the failure is unrelated to simd.

libstdc++-v3/ChangeLog:

	* testsuite/experimental/simd/tests/hypot3_fma.cc: Add skip:
	markup for long double on powerpc64*.
2021-02-03 15:49:30 +00:00
Matthias Kretz
81c2c32de9 libstdc++: Fix mask reduction of simd_mask<double> on POWER7
POWER7 does not support __vector long long reductions, making the
generic _S_popcount implementation ill-formed. Specializing _S_popcount
for PPC allows optimization and avoids the issue.

libstdc++-v3/ChangeLog:

	* include/experimental/bits/simd.h: Add __have_power10vec
	conditional on _ARCH_PWR10.
	* include/experimental/bits/simd_builtin.h: Forward declare
	_MaskImplPpc and use it as _MaskImpl when __ALTIVEC__ is
	defined.
	(_MaskImplBuiltin::_S_some_of): Call _S_popcount from the
	_SuperImpl for optimizations and correctness.
	* include/experimental/bits/simd_ppc.h: Add _MaskImplPpc.
	(_MaskImplPpc::_S_popcount): Implement via vec_cntm for POWER10.
	Otherwise, for >=int use -vec_sums divided by a sizeof factor.
	For <int use -vec_sums(vec_sum4s(...)) to sum all mask entries.
2021-02-03 15:49:30 +00:00
Matthias Kretz
71f9b9bd0a libstdc++: Immediate feedback with -v
libstdc++-v3/ChangeLog:

	* testsuite/experimental/simd/driver.sh: Remove executable on
	SIGINT. Process compiler and test executable output: In verbose
	mode print messages immediately, limited to 1000 lines and
	breaking long lines to below $COLUMNS (or 1024 if not set).
	Communicating the exit status of the compiler / test with the
	necessary pipe is done via a message through stdout/-in.
2021-02-03 15:49:29 +00:00
Matthias Kretz
0a8bc61fe0 libstdc++: Fix incorrect display of old test summaries
libstdc++-v3/ChangeLog:

	* testsuite/Makefile.am: Ensure .simd.summary is empty before
	collecting a new summary.
	* testsuite/Makefile.in: Regenerate.
2021-02-03 15:49:29 +00:00
Matthias Kretz
b27ea896dd libstdc++: Fix DRIVEROPTS and TESTFLAGS processing
libstdc++-v3/ChangeLog:

	* testsuite/experimental/simd/generate_makefile.sh: Use
	different variables internally than documented for user
	overrides. This makes internal append/prepend work as intended.
2021-02-03 15:49:29 +00:00
Matthias Kretz
471b193348 libstdc++: Fix several check-simd interaction issues
libstdc++-v3/ChangeLog:

	* testsuite/experimental/simd/driver.sh (verify_test): Print
	test output on run xfail. Do not repeat lines from the log that
	were already printed on stdout.
	(test_selector): Make the compiler flags pattern usable as a
	substring selector.
	(toplevel): Trap on SIGINT and remove the log and sum files.
	Call timout with --foreground to quickly terminate on SIGINT.
	* testsuite/experimental/simd/generate_makefile.sh: Simplify run
	targets via target patterns. Default DRIVEROPTS to -v for run
	targets. Remove log and sum files after completion of the run
	target (so that it's always recompiled).
	Place help text into text file for reasonable 'make help'
	performance.
2021-02-03 15:49:29 +00:00
Matthias Kretz
abc540e30a libstdc++: Fix simd_mask<double> on POWER w/o POWER8
libstdc++-v3/ChangeLog:

	* include/experimental/bits/simd.h: Remove unnecessary static
	assertion. Allow sizeof(8) integer __intrinsic_type to enable
	the necessary mask type.
2021-02-03 15:49:29 +00:00
Matthias Kretz
db256f9bef libstdc++: Support -mlong-double-64 on PPC
libstdc++-v3/ChangeLog:

	* include/experimental/bits/simd.h: Let __intrinsic_type<long
	double, N> be valid if sizeof(long double) == sizeof(double) and
	use a __vector double as member type.
2021-02-03 15:49:29 +00:00
Matthias Kretz
4f22942841 libstdc++: Fix NEON intrinsic types usage
Intrinsics types for NEON differ from gnu::vector_size types now. This
requires explicit specializations for __intrinsic_type and a new
__is_intrinsic_type trait.

libstdc++-v3/ChangeLog:

	* include/experimental/bits/simd.h (__is_intrinsic_type): New
	internal type trait. Alias for __is_vector_type on x86.
	(_VectorTraitsImpl): Enable for __intrinsic_type in addition for
	__vector_type.
	(__intrin_bitcast): Allow casting to & from vector & intrinsic
	types.
	(__intrinsic_type): Explicitly specialize for NEON intrinsic
	vector types.
2021-02-03 15:49:29 +00:00
Matthias Kretz
aa89c53c73 libstdc++: Support skip, only, expensive, and xfail markers for simd tests
libstdc++-v3/ChangeLog:

	* testsuite/experimental/simd/driver.sh: Implement skip, only,
	expensive, and xfail markers. They can select on type, ABI tag
	subset number, target-triplet, and compiler flags.
	* testsuite/experimental/simd/generate_makefile.sh: The summary
	now includes lines for unexpected passes and expected failures.
	If the skip or only markers are only conditional on the type, do
	not generate rules for those types.
	* testsuite/experimental/simd/tests/abs.cc: Mark test expensive
	for ABI tag subsets 1-9.
	* testsuite/experimental/simd/tests/algorithms.cc: Ditto.
	* testsuite/experimental/simd/tests/broadcast.cc: Ditto.
	* testsuite/experimental/simd/tests/casts.cc: Ditto.
	* testsuite/experimental/simd/tests/generator.cc: Ditto.
	* testsuite/experimental/simd/tests/integer_operators.cc: Ditto.
	* testsuite/experimental/simd/tests/loadstore.cc: Ditto.
	* testsuite/experimental/simd/tests/mask_broadcast.cc: Ditto.
	* testsuite/experimental/simd/tests/mask_conversions.cc: Ditto.
	* testsuite/experimental/simd/tests/mask_implicit_cvt.cc: Ditto.
	* testsuite/experimental/simd/tests/mask_loadstore.cc: Ditto.
	* testsuite/experimental/simd/tests/mask_operator_cvt.cc: Ditto.
	* testsuite/experimental/simd/tests/mask_operators.cc: Ditto.
	* testsuite/experimental/simd/tests/mask_reductions.cc: Ditto.
	* testsuite/experimental/simd/tests/operator_cvt.cc: Ditto.
	* testsuite/experimental/simd/tests/operators.cc: Ditto.
	* testsuite/experimental/simd/tests/reductions.cc: Ditto.
	* testsuite/experimental/simd/tests/simd.cc: Ditto.
	* testsuite/experimental/simd/tests/split_concat.cc: Ditto.
	* testsuite/experimental/simd/tests/splits.cc: Ditto.
	* testsuite/experimental/simd/tests/where.cc: Ditto.
	* testsuite/experimental/simd/tests/fpclassify.cc: Ditto. In
	addition replace "test only floattypes" marker by unconditional
	"float|double|ldouble" only marker.
	* testsuite/experimental/simd/tests/frexp.cc: Ditto.
	* testsuite/experimental/simd/tests/hypot3_fma.cc: Ditto.
	* testsuite/experimental/simd/tests/ldexp_scalbn_scalbln_modf.cc:
	Ditto.
	* testsuite/experimental/simd/tests/logarithm.cc: Ditto.
	* testsuite/experimental/simd/tests/math_1arg.cc: Ditto.
	* testsuite/experimental/simd/tests/math_2arg.cc: Ditto.
	* testsuite/experimental/simd/tests/remqo.cc: Ditto.
	* testsuite/experimental/simd/tests/trigonometric.cc: Ditto.
	* testsuite/experimental/simd/tests/trunc_ceil_floor.cc: Ditto.
	* testsuite/experimental/simd/tests/sincos.cc: Ditto. In
	addition, xfail on run because the reference data is missing.
2021-02-03 15:49:29 +00:00
GCC Administrator
548b75d822 Daily bump. 2021-02-03 00:16:23 +00:00
Jonathan Wakely
886f9f519c libstdc++: Fix markup for status tables in docs
libstdc++-v3/ChangeLog:

	* doc/xml/manual/status_cxx2011.xml: Remove stray table cell.
	* doc/xml/manual/status_cxx2014.xml: Likewise.
	* doc/xml/manual/status_cxx2017.xml: Likewise.
	* doc/html/manual/status.html: Regenerate.
2021-02-02 09:55:52 +00:00
GCC Administrator
f7884fb176 Daily bump. 2021-02-02 00:16:23 +00:00
François Dumont
33a1e511b5 libstdc++: Make deque iterator operator- usable with value-init iterators
N3644 implies that operator- can be used on value-init iterators. We now return
0 if both iterators are value initialized. If only one is value initialized we
keep the UB by returning the result of a normal computation which is a meaningless
value.

libstdc++-v3/ChangeLog:

	PR libstdc++/70303
	* include/bits/stl_deque.h (std::deque<>::operator-(iterator, iterator)):
	Return 0 if both iterators are value-initialized.
	* testsuite/23_containers/deque/70303.cc: New test.
	* testsuite/23_containers/vector/70303.cc: New test.
2021-02-01 19:19:53 +01:00
Jonathan Wakely
90c9b2c176 libstdc++: Update C++17 status table for <charconv>
libstdc++-v3/ChangeLog:

	* doc/xml/manual/status_cxx2011.xml: Update std::call_once
	status.
	* doc/xml/manual/status_cxx2014.xml: Likewise.
	* doc/xml/manual/status_cxx2017.xml: Likewise. Update
	std::from_chars and std::to_chars status. Fix formatting.
	* doc/html/manual/status.html: Regenerate.
2021-02-01 16:06:45 +00:00
GCC Administrator
85d04a2ecb Daily bump. 2021-01-29 00:16:21 +00:00
Jonathan Wakely
a054608c9c libstdc++: Fix copyright dates for simd headers and tests
libstdc++-v3/ChangeLog:

	* include/experimental/bits/numeric_traits.h: Update copyright
	dates.
	* include/experimental/bits/simd.h: Likewise.
	* include/experimental/bits/simd_builtin.h: Likewise.
	* include/experimental/bits/simd_converter.h: Likewise.
	* include/experimental/bits/simd_detail.h: Likewise.
	* include/experimental/bits/simd_fixed_size.h: Likewise.
	* include/experimental/bits/simd_math.h: Likewise.
	* include/experimental/bits/simd_neon.h: Likewise.
	* include/experimental/bits/simd_ppc.h: Likewise.
	* include/experimental/bits/simd_scalar.h: Likewise.
	* include/experimental/bits/simd_x86.h: Likewise.
	* include/experimental/bits/simd_x86_conversions.h: Likewise.
	* include/experimental/simd: Likewise.
	* testsuite/experimental/simd/*: Likewise.
2021-01-28 18:13:03 +00:00
GCC Administrator
aa69f0a820 Daily bump. 2021-01-28 00:16:56 +00:00
Jonathan Wakely
3670dbe490 libstdc++: Regenerate libstdc++ HTML docs
libstdc++-v3/ChangeLog:

	* doc/xml/manual/status_cxx2017.xml: Replace invalid entity.
	* doc/html/*: Regenerate.
2021-01-27 17:53:07 +00:00
Jonathan Wakely
c31a633e13 libstdc++: Use printf to print control characters
Bash and GNU echo do not interpret backslash escapes by default, so use
printf when printing \n or \t in strings.

libstdc++-v3/ChangeLog:

	* testsuite/experimental/simd/generate_makefile.sh: Use printf
	instead of echo when printing escape characters.
2021-01-27 16:37:27 +00:00
Matthias Kretz
02e32295b2 libstdc++: Add simd testsuite
Add a new check-simd target to the testsuite. The new target creates a
subdirectory, generates the necessary Makefiles, and spawns submakes to
build and run the tests. Running this testsuite with defaults on my
machine takes half of the time the dejagnu testsuite required to only
determine whether to run tests. Since the simd testsuite integrated in
dejagnu increased the time of the whole libstdc++ testsuite by ~100%
this approach is a compromise for speed while not sacrificing coverage
too much. Since the test driver is invoked individually per test
executable from a Makefile, make's jobserver (-j) trivially parallelizes
testing.

Testing different flags and with simulator (or remote execution) is
possible. E.g. `make check-simd DRIVEROPTS=-q
target_list="unix{-m64,-m32}{-march=sandybridge,-march=skylake-avx512}{,-
ffast-math}"`
runs the testsuite 8 times in different subdirectories, using 8
different combinations of compiler flags, only outputs failing tests
(-q), and prints all summaries at the end. It skips most ABI tags by
default unless --run-expensive is passed to DRIVEROPTS or
GCC_TEST_RUN_EXPENSIVE is not empty.

To use a simulator, the CHECK_SIMD_CONFIG variable needs to point to a
shell script which calls `define_target <name> <flags> <simulator>` and
set target_list as needed. E.g.:
case "$target_triplet" in
x86_64-*)
  target_list="unix{-march=sandybridge,-march=skylake-avx512}
  ;;
powerpc64le-*)
  define_target power8 "-static -mcpu=power8" "/usr/bin/qemu-ppc64le -cpu
power8"
  define_target power9 -mcpu=power9 "$HOME/bin/run_on_gcc135"
  target_list="power8 power9{,-ffast-math}"
  ;;
esac

libstdc++-v3/ChangeLog:

	* scripts/check_simd: New file. This script is called from the
	the check-simd target. It determines a set of compiler flags and
	simulator setups for calling generate_makefile.sh and passes the
	information back to the check-simd target, which recurses to the
	generated Makefiles.
	* scripts/create_testsuite_files: Remove files below simd/tests/
	from testsuite_files and place them in testsuite_files_simd.
	* testsuite/Makefile.am: Add testsuite_files_simd. Add
	check-simd target.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/experimental/simd/driver.sh: New file. This script
	compiles and runs a given simd test, logging its output and
	status. It uses the timeout command to implement compile and
	test timeouts.
	* testsuite/experimental/simd/generate_makefile.sh: New file.
	This script generates a Makefile which uses driver.sh to compile
	and run the tests and collect the logs into a single log file.
	* testsuite/experimental/simd/tests/abs.cc: New file. Tests
	abs(simd).
	* testsuite/experimental/simd/tests/algorithms.cc: New file.
	Tests min/max(simd, simd).
	* testsuite/experimental/simd/tests/bits/conversions.h: New
	file. Contains functions to support tests involving conversions.
	* testsuite/experimental/simd/tests/bits/make_vec.h: New file.
	Support functions make_mask and make_vec.
	* testsuite/experimental/simd/tests/bits/mathreference.h: New
	file. Support functions to supply precomputed math function
	reference data.
	* testsuite/experimental/simd/tests/bits/metahelpers.h: New
	file. Support code for SFINAE testing.
	* testsuite/experimental/simd/tests/bits/simd_view.h: New file.
	* testsuite/experimental/simd/tests/bits/test_values.h: New
	file. Test functions to easily drive a test with simd objects
	initialized from a given list of values and a range of random
	values.
	* testsuite/experimental/simd/tests/bits/ulp.h: New file.
	Support code to determine the ULP distance of simd objects.
	* testsuite/experimental/simd/tests/bits/verify.h: New file.
	Test framework for COMPARE'ing simd objects and instantiating
	the test templates with value_type and ABI tag.
	* testsuite/experimental/simd/tests/broadcast.cc: New file. Test
	simd broadcasts.
	* testsuite/experimental/simd/tests/casts.cc: New file. Test
	simd casts.
	* testsuite/experimental/simd/tests/fpclassify.cc: New file.
	Test floating-point classification functions.
	* testsuite/experimental/simd/tests/frexp.cc: New file. Test
	frexp(simd).
	* testsuite/experimental/simd/tests/generator.cc: New file. Test
	simd generator constructor.
	* testsuite/experimental/simd/tests/hypot3_fma.cc: New file.
	Test 3-arg hypot(simd,simd,simd) and fma(simd,simd,sim).
	* testsuite/experimental/simd/tests/integer_operators.cc: New
	file. Test integer operators.
	* testsuite/experimental/simd/tests/ldexp_scalbn_scalbln_modf.cc:
	New file. Test ldexp(simd), scalbn(simd), scalbln(simd), and
	modf(simd).
	* testsuite/experimental/simd/tests/loadstore.cc: New file. Test
	(converting) simd loads and stores.
	* testsuite/experimental/simd/tests/logarithm.cc: New file. Test
	log*(simd).
	* testsuite/experimental/simd/tests/mask_broadcast.cc: New file.
	Test simd_mask broadcasts.
	* testsuite/experimental/simd/tests/mask_conversions.cc: New
	file. Test simd_mask conversions.
	* testsuite/experimental/simd/tests/mask_implicit_cvt.cc: New
	file. Test simd_mask implicit conversions.
	* testsuite/experimental/simd/tests/mask_loadstore.cc: New file.
	Test simd_mask loads and stores.
	* testsuite/experimental/simd/tests/mask_operator_cvt.cc: New
	file. Test simd_mask operators convert as specified.
	* testsuite/experimental/simd/tests/mask_operators.cc: New file.
	Test simd_mask compares, subscripts, and negation.
	* testsuite/experimental/simd/tests/mask_reductions.cc: New
	file. Test simd_mask reductions.
	* testsuite/experimental/simd/tests/math_1arg.cc: New file. Test
	1-arg math functions on simd.
	* testsuite/experimental/simd/tests/math_2arg.cc: New file. Test
	2-arg math functions on simd.
	* testsuite/experimental/simd/tests/operator_cvt.cc: New file.
	Test implicit conversions on simd binary operators behave as
	specified.
	* testsuite/experimental/simd/tests/operators.cc: New file. Test
	simd compares, subscripts, not, unary minus, plus, minus,
	multiplies, divides, increment, and decrement.
	* testsuite/experimental/simd/tests/reductions.cc: New file.
	Test reduce(simd).
	* testsuite/experimental/simd/tests/remqo.cc: New file. Test
	remqo(simd).
	* testsuite/experimental/simd/tests/simd.cc: New file. Basic
	sanity checks of simd types.
	* testsuite/experimental/simd/tests/sincos.cc: New file. Test
	sin(simd) and cos(simd).
	* testsuite/experimental/simd/tests/split_concat.cc: New file.
	Test split(simd) and concat(simd, simd).
	* testsuite/experimental/simd/tests/splits.cc: New file. Test
	split(simd_mask).
	* testsuite/experimental/simd/tests/trigonometric.cc: New file.
	Test remaining trigonometric functions on simd.
	* testsuite/experimental/simd/tests/trunc_ceil_floor.cc: New
	file. Test trunc(simd), ceil(simd), and floor(simd).
	* testsuite/experimental/simd/tests/where.cc: New file. Test
	masked operations using where.
2021-01-27 16:37:26 +00:00
Matthias Kretz
2bcceb6fc5 libstdc++: Add std::experimental::simd from the Parallelism TS 2
Adds <experimental/simd>.

This implements the simd and simd_mask class templates via
[[gnu::vector_size(N)]] data members. It implements overloads for all of
<cmath> for simd. Explicit vectorization of the <cmath> functions is not
finished.

The majority of functions are marked as [[gnu::always_inline]] to enable
quasi-ODR-conforming linking of TUs with different -m flags.
Performance optimization was done for x86_64.  ARM, Aarch64, and POWER
rely on the compiler to recognize reduction, conversion, and shuffle
patterns.

Besides verification using many different machine flages, the code was
also verified with different fast-math flags.

libstdc++-v3/ChangeLog:

	* doc/xml/manual/status_cxx2017.xml: Add implementation status
	of the Parallelism TS 2. Document implementation-defined types
	and behavior.
	* include/Makefile.am: Add new headers.
	* include/Makefile.in: Regenerate.
	* include/experimental/simd: New file. New header for
	Parallelism TS 2.
	* include/experimental/bits/numeric_traits.h: New file.
	Implementation of P1841R1 using internal naming. Addition of
	missing IEC559 functionality query.
	* include/experimental/bits/simd.h: New file. Definition of the
	public simd interfaces and general implementation helpers.
	* include/experimental/bits/simd_builtin.h: New file.
	Implementation of the _VecBuiltin simd_abi.
	* include/experimental/bits/simd_converter.h: New file. Generic
	simd conversions.
	* include/experimental/bits/simd_detail.h: New file. Internal
	macros for the simd implementation.
	* include/experimental/bits/simd_fixed_size.h: New file. Simd
	fixed_size ABI specific implementations.
	* include/experimental/bits/simd_math.h: New file. Math
	overloads for simd.
	* include/experimental/bits/simd_neon.h: New file. Simd NEON
	specific implementations.
	* include/experimental/bits/simd_ppc.h: New file. Implement bit
	shifts to avoid invalid results for integral types smaller than
	int.
	* include/experimental/bits/simd_scalar.h: New file. Simd scalar
	ABI specific implementations.
	* include/experimental/bits/simd_x86.h: New file. Simd x86
	specific implementations.
	* include/experimental/bits/simd_x86_conversions.h: New file.
	x86 specific conversion optimizations. The conversion patterns
	work around missing conversion patterns in the compiler and
	should be removed as soon as PR85048 is resolved.
	* testsuite/experimental/simd/standard_abi_usable.cc: New file.
	Test that all (not all fixed_size<N>, though) standard simd and
	simd_mask types are usable.
	* testsuite/experimental/simd/standard_abi_usable_2.cc: New
	file. As above but with -ffast-math.
	* testsuite/libstdc++-dg/conformance.exp: Don't build simd tests
	from the standard test loop. Instead use
	check_vect_support_and_set_flags to build simd tests with the
	relevant machine flags.
2021-01-27 16:37:26 +00:00
Jonathan Wakely
a199da782f libstdc++: Optimize std::string_view::find [PR 66414]
This reuses the code from std::string::find, which was improved by
r244225, but string_view was not changed to match.

libstdc++-v3/ChangeLog:

	PR libstdc++/66414
	* include/bits/string_view.tcc
	(basic_string_view::find(const CharT*, size_type, size_type)):
	Optimize.
2021-01-27 13:45:52 +00:00
Paul Fee
f004d6d9fa libstdc++: Add string contains member functions for C++2b
This implements WG21 P1679R3, adding contains member functions to
basic_string_view and basic_string.

libstdc++-v3/ChangeLog:

	* include/bits/basic_string.h (basic_string::contains): New
	member functions.
	* include/std/string_view (basic_string_view::contains):
	Likewise.
	* include/std/version (__cpp_lib_string_contains): Define.
	* testsuite/21_strings/basic_string/operations/starts_with/char/1.cc:
	Remove trailing whitespace.
	* testsuite/21_strings/basic_string/operations/starts_with/wchar_t/1.cc:
	Likewise.
	* testsuite/21_strings/basic_string/operations/contains/char/1.cc: New test.
	* testsuite/21_strings/basic_string/operations/contains/wchar_t/1.cc: New test.
	* testsuite/21_strings/basic_string_view/operations/contains/char/1.cc: New test.
	* testsuite/21_strings/basic_string_view/operations/contains/char/2.cc: New test.
	* testsuite/21_strings/basic_string_view/operations/contains/wchar_t/1.cc: New test.
2021-01-27 12:37:36 +00:00