Commit Graph

180704 Commits

Author SHA1 Message Date
Marek Polacek
455ade1846 c++: Deprecate arithmetic convs on different enums [PR97573]
I noticed that C++20 P1120R0 deprecated certain arithmetic conversions
as outlined in [depr.arith.conv.enum], but we don't warn about them.  In
particular, "If one operand is of enumeration type and the other operand
is of a different enumeration type or a floating-point type, this
behavior is deprecated."  These will likely become ill-formed in C++23,
so we should warn by default in C++20.  To this effect, this patch adds
two new warnings (like clang++): -Wdeprecated-enum-enum-conversion and
-Wdeprecated-enum-float-conversion.  They are enabled by default in
C++20.  In older dialects, to enable these warnings you can now use
-Wenum-conversion which I made available in C++ too.  Note that unlike
C, in C++ it is not enabled by -Wextra, because that breaks bootstrap.

We already warn about comparisons of two different enumeration types via
-Wenum-compare, the rest is handled in this patch: we're performing the
usual arithmetic conversions in these contexts:
  - an arithmetic operation,
  - a bitwise operation,
  - a comparison,
  - a conditional operator,
  - a compound assign operator.

Using the spaceship operator as enum <=> real_type is ill-formed but we
don't reject it yet.  We should also address [depr.array.comp] too, but
it's not handled in this patch.

gcc/c-family/ChangeLog:

	PR c++/97573
	* c-opts.c (c_common_post_options): In C++20, turn on
	-Wdeprecated-enum-enum-conversion and
	-Wdeprecated-enum-float-conversion.
	* c.opt (Wdeprecated-enum-enum-conversion,
	Wdeprecated-enum-float-conversion): New options.
	(Wenum-conversion): Allow for C++ too.

gcc/cp/ChangeLog:

	PR c++/97573
	* call.c (build_conditional_expr_1): Warn about the deprecated
	enum/real type conversion in C++20.  Also warn about a non-enumerated
	and enumerated type in ?: when -Wenum-conversion is on.
	* typeck.c (do_warn_enum_conversions): New function.
	(cp_build_binary_op): Call it.

gcc/ChangeLog:

	PR c++/97573
	* doc/invoke.texi: Document -Wdeprecated-enum-enum-conversion
	and -Wdeprecated-enum-float-conversion.  -Wenum-conversion is
	no longer C/ObjC only.

gcc/testsuite/ChangeLog:

	PR c++/97573
	* g++.dg/cpp0x/linkage2.C: Add dg-warning.
	* g++.dg/parse/attr3.C: Likewise.
	* g++.dg/cpp2a/enum-conv1.C: New test.
	* g++.dg/cpp2a/enum-conv2.C: New test.
	* g++.dg/cpp2a/enum-conv3.C: New test.
2020-10-28 17:37:18 -04:00
Marek Polacek
976e7ef1a2 c++: Prevent warnings for value-dependent exprs [PR96742]
Here, in r11-155, I changed the call to uses_template_parms to
type_dependent_expression_p_push to avoid a crash in C++98 in
value_dependent_expression_p on a non-constant expression.  But that
prompted a host of complaints that we now warn for value-dependent
expressions in templates.  Those warnings are technically valid, but
people still don't want them because they're awkward to avoid.  This
patch uses value_dependent_expression_p or type_dependent_expression_p.
But make sure that we don't ICE in value_dependent_expression_p by
checking potential_constant_expression first.

gcc/cp/ChangeLog:

	PR c++/96675
	PR c++/96742
	* pt.c (tsubst_copy_and_build): Call value_dependent_expression_p or
	type_dependent_expression_p instead of type_dependent_expression_p_push.
	But only call value_dependent_expression_p for expressions that are
	potential_constant_expression.

gcc/testsuite/ChangeLog:

	PR c++/96675
	PR c++/96742
	* g++.dg/warn/Wdiv-by-zero-3.C: Turn dg-warning into dg-bogus.
	* g++.dg/warn/Wtautological-compare3.C: New test.
	* g++.dg/warn/Wtype-limits5.C: New test.
	* g++.old-deja/g++.pt/crash10.C: Remove dg-warning.
2020-10-28 17:26:45 -04:00
David Edelsohn
122f0db279 testsuite: Adjust target requirements for sad-vectorize and signbit.
More testcases with incorrect target selectors.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/sad-vectorize-1.c: Remove AIX skip.
	* gcc.target/powerpc/sad-vectorize-2.c: Remove AIX skip.
	* gcc.target/powerpc/sad-vectorize-3.c: Remove target.
	Require p9vector_hw.
	* gcc.target/powerpc/sad-vectorize-4.c: Remove target.
	Require p9vector_hw.
	* gcc.target/powerpc/signbit-1.c: Remove target.
	Require ppc_float128_sw.
	* gcc.target/powerpc/signbit-2.c: Remove target.
	Require ppc_float128_sw.
	* gcc.target/powerpc/signbit-3.c: Remove target.
	Require ppc_float128_sw.
2020-10-28 17:08:29 -04:00
Marek Polacek
323dd42552 c++: Member template function lookup failure [PR94799]
My earlier patch for this PR, r11-86, broke pybind11.  That patch
changed cp_parser_class_name to also consider the object expression
scope (parser->context->object_type) to fix parsing of

  p->template A<T>::foo(); // consider p's scope too

Here we reject

  b.operator typename B<T>::type();

because 'typename_p' in cp_parser_class_name uses 'scope', which means
that 'typename_p' will be true for the example above.  Then we create
a TYPENAME_TYPE via make_typename_type, which fails when tsubsting it;
the code basically created 'typename B::B' and then we complain that there
is no member named 'B' in 'A<int>'.  So, when deciding if we should
create a TYPENAME_TYPE, don't consider the object_type scope, like we
did pre-r11-86.

gcc/cp/ChangeLog:

	PR c++/94799
	* parser.c (cp_parser_class_name): Use parser->scope when
	setting typename_p.

gcc/testsuite/ChangeLog:

	PR c++/94799
	* g++.dg/template/lookup16.C: New test.
2020-10-28 15:25:51 -04:00
Marek Polacek
43cb72263f c++: GCC accepts junk before fold-expression [PR86773]
Here we accept a bogus expression before a left fold:

Recall that a fold expression looks like:

 fold-expression:
    ( cast-expression fold-operator ... )
    ( ... fold-operator cast-expression )
    ( cast-expression fold-operator ... fold-operator cast-expression )

but here we have

    ( cast-expression ... fold-operator cast-expression )

The best fix seems to just return error_mark_node when we know this code
is invalid, and let the subsequent code report that a ) was expected.

gcc/cp/ChangeLog:

	PR c++/86773
	* parser.c (cp_parser_fold_expression): Return error_mark_node
	if a left fold is preceded by an expression.

gcc/testsuite/ChangeLog:

	PR c++/86773
	* g++.dg/cpp1z/fold12.C: New test.
2020-10-28 15:22:05 -04:00
Ian Lance Taylor
dfbadb8ce9 syscall: don't build libcall_bsd.go on solaris
This new file was based on master sources that are built for *BSD
but not Solaris

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/266017
2020-10-28 12:18:01 -07:00
Tamar Christina
3dcd47389b AArch64: Skip test for pr97535 on ILP32 since it can't express the range.
I am excluding the test from ILP32 since the goal of the test is to test
truncations of large numbers above INT_MAX.

gcc/testsuite/ChangeLog:

	PR target/97535
	* gcc.target/aarch64/pr97535.c: Exclude ILP32.
2020-10-28 19:13:27 +00:00
Richard Sandiford
54ef7701a9 value-range: Give up on POLY_INT_CST ranges [PR97457]
This PR shows another problem with calculating value ranges for
POLY_INT_CSTs.  We have:

  ivtmp_76 = ASSERT_EXPR <ivtmp_60, ivtmp_60 > POLY_INT_CST [9, 4294967294]>

where the VQ coefficient is unsigned but is effectively acting
as a negative number.  We wrongly give the POLY_INT_CST the range:

  [9, INT_MAX]

and things go downhill from there: later iterations of the unrolled
epilogue are wrongly removed as dead.

I guess this is the final nail in the coffin for doing VRP on
POLY_INT_CSTs.  For other similarly exotic testcases we could have
overflow for any coefficient, not just those that could be treated
as contextually negative.

Testing TYPE_OVERFLOW_UNDEFINED doesn't seem like an option because we
couldn't handle warn_strict_overflow properly.  At this stage we're
just recording a range that might or might not lead to strict-overflow
assumptions later.

It still feels like we should be able to do something here, but for
now removing the code seems safest.  It's also telling that there
are no testsuite failures on SVE from doing this.

gcc/
	PR tree-optimization/97457
	* value-range.cc (irange::set): Don't decay POLY_INT_CST ranges
	to integer ranges.

gcc/testsuite/
	PR tree-optimization/97457
	* gcc.dg/vect/pr97457.c: New test.
2020-10-28 19:05:49 +00:00
Joseph Myers
a4223abb3d c: Allow omitted parameter names for C2x
C2x allows parameter names to be omitted in function definitions, as
in C++; add support for this feature.  As with other features that
only result in previously rejected code being accepted, this feature
is now accepted as an extension for previous standard versions, with a
pedwarn-if-pedantic that is disabled by -Wno-c11-c2x-compat.  The
logic for avoiding unused-parameter warnings for unnamed parameters is
in code shared between C and C++, so no changes are needed there.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/c/
2020-10-28  Joseph Myers  <joseph@codesourcery.com>

	* c-decl.c (store_parm_decls_newstyle): Use pedwarn_c11 not
	error_at for omitted parameter name.

gcc/testsuite/
2020-10-28  Joseph Myers  <joseph@codesourcery.com>

	* gcc.dg/c11-parm-omit-1.c, gcc.dg/c11-parm-omit-2.c,
	gcc.dg/c11-parm-omit-3.c, gcc.dg/c11-parm-omit-4.c,
	gcc.dg/c2x-parm-omit-1.c, gcc.dg/c2x-parm-omit-2.c,
	gcc.dg/c2x-parm-omit-3.c, gcc.dg/c2x-parm-omit-4.c: New tests.
	* gcc.dg/noncompile/pr79758.c: Do not expect error for omitted
	parameter name.
2020-10-28 18:58:43 +00:00
Thomas Rodgers
a0e4d7b44c libstdc++: Implement C++20 features for <sstream>
New ctors and ::view() accessor for -
  * basic_stingbuf
  * basic_istringstream
  * basic_ostringstream
  * basic_stringstreamm

New ::get_allocator() accessor for basic_stringbuf.

libstdc++-v3/ChangeLog:
	* acinclude.m4 (glibcxx_SUBDIRS): Add src/c++20.
	* config/abi/pre/gnu.ver (GLIBCXX_3.4.29): New symbols.
	* configure: Regenerate.
	* include/std/sstream:
	(basic_stringbuf::basic_stringbuf(allocator const&)): New constructor.
	(basic_stringbuf::basic_stringbuf(openmode, allocator const&)): Likewise.
	(basic_stringbuf::basic_stringbuf(basic_string&&, openmode)): Likewise.
	(basic_stringbuf::basic_stringbuf(basic_stringbuf&&, allocator const&)):
	Likewise.
	(basic_stringbuf::get_allocator()): New method.
	(basic_stringbuf::view()): Likewise.
	(basic_istringstream::basic_istringstream(basic_string&&, openmode)):
	New constructor.
	(basic_istringstream::basic_istringstream(openmode, allocator const&)):
	Likewise
	(basic_istringstream::view()): New method.
	(basic_ostringstream::basic_ostringstream(basic_string&&, openmode)):
	New constructor.
	(basic_ostringstream::basic_ostringstream(openmode, allocator const&)):
	Likewise
	(basic_ostringstream::view()): New method.
	(basic_stringstream::basic_stringstream(basic_string&&, openmode)):
	New constructor.
	(basic_stringstream::basic_stringstream(openmode, allocator const&)):
	Likewise
	(basic_stringstream::view()): New method.
	* src/Makefile.in: Add c++20 directory.
	* src/Makefile.am: Regenerate.
	* src/c++20/Makefile.am: Add makefile for new sub-directory.
	* src/c++20/Makefile.in: Generate.
	* src/c++20/sstream-inst.cc: New file defining explicit
	instantiations for basic_stringbuf, basic_istringstream,
	basic_ostringstream, and basic_stringstream member functions
	added in C++20.
	* testsuite/27_io/basic_stringbuf/cons/char/2.cc: New test.
	* testsuite/27_io/basic_stringbuf/cons/wchar_t/2.cc: Likewise.
	* testsuite/27_io/basic_stringbuf/view/char/1.cc: Likewise.
	* testsuite/27_io/basic_stringbuf/view/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_istringstream/cons/char/1.cc: Likewise.
	* testsuite/27_io/basic_istringstream/cons/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_istringstream/view/char/1.cc: Likewise.
	* testsuite/27_io/basic_istringstream/view/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_ostringstream/cons/char/1.cc: Likewise.
	* testsuite/27_io/basic_ostringstream/cons/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_ostringstream/view/char/1.cc: Likewise.
	* testsuite/27_io/basic_ostringstream/view/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_stringstream/cons/char/1.cc: Likewise.
	* testsuite/27_io/basic_stringstream/cons/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_stringstream/view/char/1.cc: Likewise.
	* testsuite/27_io/basic_stringstream/view/wchar_t/1.cc: Likewise.
2020-10-28 11:56:06 -07:00
Nathan Sidwell
4289e488dd c++: Make OMP UDR DECL_LOCAL_DECL_P earlier
I discovered that we were pushing an OMP UDR in a template before
setting DECL_LOCAL_DECL.  This caused the template machinery to give
it some template info.  It doesn't need that, and this changes the
parser to set it earlier.  We have to adjust instantiate_body to not
try and access such a function's non-existant template_info.  The
access checks that we're no longer doing are the same as those we did
on the containing function anyway.  So nothing is lost.

	gcc/cp/
	* parser.c (cp_parser_omp_declare_reduction): Set
	DECL_LOCAL_DECL_P before push_template_decl.
	* pt.c (instantiate_body): Nested fns do not have template_info.
2020-10-28 11:46:46 -07:00
Carl Love
a3c13696fd VSX_EXTRACT fix
2020-10-28  Carl Love  <cel@us.ibm.com>

gcc/

	* config/rs6000/vsx.md(xxgenpcvm_<mode>_internal): Remove TARGET_64BIT.
2020-10-28 11:53:01 -05:00
Patrick Palka
8572edc828 libstdc++: Fix arithmetic bug in year_month_weekday conversion [PR96713]
The conversion function year_month_weekday::operator sys_days computes
the offset in days from the first weekday of the month with:

 days{(index()-1)*7}
      ^~~~~~~~~~~~~  type 'unsigned'

We want the above to yield -7d when index() is 0u, but our 'days' alias
is based on long instead of int, so the conversion from unsigned to the
underlying type of 'days' instead yields a large positive value.

This patch fixes this by casting the result of index() to int so that
the initializer is sign-extended in the conversion to long.

The added testcase also verifies we do the right thing when index() == 5.

libstdc++-v3/ChangeLog:

	PR libstdc++/96713
	* include/std/chrono (year_month_weekday::operator sys_days):
	Cast the result of index() to int so that the initializer for
	days{} is sign-extended when it's converted to the underlying
	type.
	* testsuite/std/time/year_month_weekday/3.cc: New test.
2020-10-28 12:28:08 -04:00
Richard Biener
f4af2dde57 dump when SLP analysis fails due to shared vectype mismatch
This adds another one.

2020-10-28  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_slp_analyze_node_operations_1): Dump
	when shared vectype update fails.
2020-10-28 16:49:36 +01:00
Patrick Palka
9ccc349576 c++: Check constraints before instantiation from mark_used [PR95132]
This makes mark_used check constraints of a function _before_ calling
maybe_instantiate_decl, so that we don't try instantiating a function
(as part of return type deduction) with unsatisfied constraints.

gcc/cp/ChangeLog:

	PR c++/95132
	* decl2.c (mark_used): Move up the constraints_satisfied_p check
	so that we check constraints before calling maybe_instantiate_decl.

gcc/testsuite/ChangeLog:

	PR c++/95132
	* g++.dg/cpp2a/concepts-fn7.C: New test.
2020-10-28 11:47:26 -04:00
Nathan Sidwell
7d5f38e49e c++: Refactor push_template_decl
Sadly I need to wander into push_template_decl again.  But here's a
piece of RAII goodness first.

	gcc/cp/
	* pt.c (push_template_decl): Refactor for some RAII.
2020-10-28 08:13:17 -07:00
David Edelsohn
176b8b9679 testsuite: Correct requirements for vadsdu*, vslv and vsrv testcases.
This patch renmoves extraneous dg-requirement restrictions on the testcases.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/vadsdu-0.c: Remove target.
	* gcc.target/powerpc/vadsdu-1.c: Remove target.
	* gcc.target/powerpc/vadsdu-2.c: Remove target.
	* gcc.target/powerpc/vadsdu-3.c: Remove target.
	* gcc.target/powerpc/vadsdu-4.c: Remove target.
	* gcc.target/powerpc/vadsdu-5.c: Remove target.
	* gcc.target/powerpc/vadsdub-1.c: Remove target.
	* gcc.target/powerpc/vadsdub-2.c: Remove target.
	* gcc.target/powerpc/vadsduh-1.c: Remove target.
	* gcc.target/powerpc/vadsduh-2.c: Remove target.
	* gcc.target/powerpc/vadsduw-1.c: Remove target.
	* gcc.target/powerpc/vadsduw-2.c: Remove target.
	* gcc.target/powerpc/vslv-0.c: Remove target.
	* gcc.target/powerpc/vslv-1.c: Remove target.
	* gcc.target/powerpc/vsrv-0.c: Remove target.
	* gcc.target/powerpc/vsrv-1.c: Remove target.
2020-10-28 11:04:54 -04:00
Richard Biener
6f62d8dd33 Ignore ignored operands in vect_get_and_check_slp_defs
This passes down skip_args to vect_get_and_check_slp_defs to skip
ignored ops there, too and not fail SLP discovery.  This fixes
gcc.target/aarch64/sve/reduc_strict_5.c

2020-10-28  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_get_and_check_slp_defs): For skipped
	args just push NULLs and vect_uninitialized_def.
	(vect_build_slp_tree_2): Allocate skip_args for all ops
	and pass it down to vect_get_and_check_slp_defs.
2020-10-28 16:00:34 +01:00
David Edelsohn
a4b9620d56 testsuite: Correct requirements for byte-in-* testcases.
commit 25ffd3d34e means we no longer define an overloaded
__builtin_byte_in_set for -m32, so the more informative
"__builtin_byte_in_set is not supported in this compiler
configuration" is not reported.

This patch changes byte-in-set-2.c to expect an implicit declaration
warning.  It also removes unnecessary target requirement for all
byte-in-*.c tests and no longer skips AIX.

gcc/testsuite/ChangeLog:

2020-10-28  David Edelsohn  <dje.gcc@gmail.com>
	    Alan Modra  <amodra@gmail.com>

	* gcc.target/powerpc/byte-in-either-range-0.c: Remove target.
	* gcc.target/powerpc/byte-in-either-range-1.c: Remove target.
	* gcc.target/powerpc/byte-in-range-0.c: Remove target.
	* gcc.target/powerpc/byte-in-range-1.c: Remove target.
	* gcc.target/powerpc/byte-in-set-0.c: Remove target.
	* gcc.target/powerpc/byte-in-set-1.c: Remove target.
	* gcc.target/powerpc/byte-in-set-2.c: Remove target. Expect
	implicit declaration warning.
2020-10-28 10:41:13 -04:00
Richard Biener
69adcfce12 Fix gcc.dg/vect/bb-slp-5[89].c
I forgot a vect_double check.

2020-10-28  Richard Biener  <rguenther@suse.de>

	* gcc.dg/vect/bb-slp-58.c: Require vect_double.
	* gcc.dg/vect/bb-slp-59.c: Likewise.
2020-10-28 15:04:06 +01:00
Richard Biener
b626b00823 tree-optimization/97615 - avoid creating externals from patterns
The previous change missed to check for patterns again, the following
corrects that.

2020-10-28  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97615
	* tree-vect-slp.c (vect_build_slp_tree_2): Do not build
	an external from pattern defs.

	* gcc.dg/vect/bb-slp-pr97615.c: New testcase.
2020-10-28 15:04:06 +01:00
Richard Biener
616351b897 Fix iteration over loads in SLP optimize
I've made a typo when refactoring the iteration over all loads in
the SLP graph.  Fixed.

2020-10-28  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_optimize_slp): Fix iteration over
	all loads.
2020-10-28 15:04:06 +01:00
Jonathan Wakely
c227d96feb libstdc++: Add comment to nothrow new explaining catch (...)
The decision to not rethrow a __forced_unwind exception is deliberate,
so add a comment explaining it.

libstdc++-v3/ChangeLog:

	* libsupc++/new_opnt.cc (new): Add comment about forced unwind
	exceptions.
2020-10-28 13:19:21 +00:00
Jonathan Wakely
0bc199fc5d libstdc++: Override BUFSIZ for Windows targets [PR 94268]
This replaces uses of BUFSIZ with a new _GLIBCXX_BUFSIZ macro that can
be overridden in target-specific config headers.

That allows the mingw and mingw-w64 targets to override it, because
BUFSIZ is apparently defined to 512, resulting in poor performance. The
MSVCRT stdio apparently uses 4096, so we use that too.

libstdc++-v3/ChangeLog:

	PR libstdc++/94268
	* config/os/mingw32-w64/os_defines.h (_GLIBCXX_BUFSIZ):
	Define.
	* config/os/mingw32/os_defines.h (_GLIBCXX_BUFSIZ):
	Define.
	* include/bits/fstream.tcc: Use _GLIBCXX_BUFSIZ instead
	of BUFSIZ.
	* include/ext/stdio_filebuf.h: Likewise.
	* include/std/fstream (_GLIBCXX_BUFSIZ): Define.
2020-10-28 13:19:21 +00:00
Richard Biener
2acb33103c Change the way we split stores in BB vectorization
The following fixes missed optimizations due to the strange way we
split stores in BB vectorization.  The solution is to split at
the failure boundary and not re-align that to the initial piece
chosen vector size.  Also re-analyze any larger matching rest.

2020-10-28  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_build_slp_instance): Split the store
	group at the failure boundary and also re-analyze a large enough
	matching rest.

	* gcc.dg/vect/bb-slp-68.c: New testcase.
2020-10-28 14:15:37 +01:00
Richard Biener
ac1724ccfd dump reason for throwing away SLP instance
This adds dumping to vect_slp_analyze_node_alignment when it fails
an SLP instance due to shared vector type conflicts.

2020-10-28  Richard Biener  <rguenther@suse.de>

	* tree-vect-data-refs.c (vect_slp_analyze_node_alignment):
	Dump when vect_update_shared_vectype fails.
2020-10-28 14:15:37 +01:00
Jonathan Wakely
72a87d82e0 libstdc++: Fix name clash with _Cosh in QNX headers [PR 95592]
This replaces unqualified names like _Cosh with struct std::_Cosh to
ensure there is no ambiguity with other entities with the same name.

libstdc++-v3/ChangeLog:

	PR libstdc++/95592
	* include/bits/valarray_after.h (_DEFINE_EXPR_UNARY_OPERATOR)
	(_DEFINE_EXPR_BINARY_OPERATOR, _DEFINE_EXPR_BINARY_FUNCTION):
	Use elaborated-type-specifier and qualified-id to avoid
	ambiguities with QNX system headers.
	* testsuite/26_numerics/valarray/95592.cc: New test.
2020-10-28 12:35:44 +00:00
Jonathan Wakely
0f7cd5e573 libstdc++: Make std::span layout-compatible with struct iovec [PR 95609]
This change reorders the data members of std::span so that span<byte> is
layout-compatible with common implementations of struct iovec. This will
allow span<byte> to be used directly in places that use a struct iovec
to do scatter-gather I/O.

It's important to note that POSIX doesn't specify the order of members
in iovec. Also the equivalent type on Windows has members in the other
order, and uses type ULONG (which is always 32-bit whereas size_t is
64-bit for Win64). So this change will only help for certain targets and
an indirection between std::span and I/O system calls will still be
needed for the general case.

libstdc++-v3/ChangeLog:

	PR libstdc++/95609
	* include/std/span (span): Reorder data members to match common
	implementations of struct iovec.
	* testsuite/23_containers/span/layout_compat.cc: New test.
2020-10-28 12:07:40 +00:00
Andrea Corallo
292c812a27 aarch64: Add vstN_lane_bf16 + vstNq_lane_bf16 intrinsics
gcc/ChangeLog

2020-10-19  Andrea Corallo  <andrea.corallo@arm.com>

	* config/aarch64/arm_neon.h (__ST2_LANE_FUNC, __ST3_LANE_FUNC)
	(__ST4_LANE_FUNC): Rename the macro generating the 'q' variants
	into __ST2Q_LANE_FUNC, __ST2Q_LANE_FUNC, __ST2Q_LANE_FUNC so they
	all can be undefed at the and of the file.
	(vst2_lane_bf16, vst2q_lane_bf16, vst3_lane_bf16, vst3q_lane_bf16)
	(vst4_lane_bf16, vst4q_lane_bf16): Add new intrinsics.

gcc/testsuite/ChangeLog

2020-10-19  Andrea Corallo  <andrea.corallo@arm.com>

	* gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
	(hbfloat16_t): Define type.
	(CHECK_FP): Make it working for bfloat types.
	* gcc.target/aarch64/advsimd-intrinsics/bf16_vstN_lane_1.c: New file.
	* gcc.target/aarch64/advsimd-intrinsics/bf16_vstN_lane_2.c: Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vst2_lane_bf16_indices_1.c:
	Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vst2q_lane_bf16_indices_1.c:
	Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vst3_lane_bf16_indices_1.c:
	Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vst3q_lane_bf16_indices_1.c:
	Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vst4_lane_bf16_indices_1.c:
	Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vst4q_lane_bf16_indices_1.c:
	Likewise.
2020-10-28 12:19:47 +01:00
Andrea Corallo
44e570d9fb aarch64: Add bfloat16 vldN_lane_bf16 + vldNq_lane_bf16 intrisics
gcc/ChangeLog

2020-10-15  Andrea Corallo  <andrea.corallo@arm.com>

	* config/aarch64/arm_neon.h (__LD2_LANE_FUNC, __LD3_LANE_FUNC)
	(__LD4_LANE_FUNC): Rename the macro generating the 'q' variants
	into __LD2Q_LANE_FUNC, __LD2Q_LANE_FUNC, __LD2Q_LANE_FUNC so they
	all can be undefed at the and of the file.
	(vld2_lane_bf16, vld2q_lane_bf16, vld3_lane_bf16, vld3q_lane_bf16)
	(vld4_lane_bf16, vld4q_lane_bf16): Add new intrinsics.

gcc/testsuite/ChangeLog

2020-10-15  Andrea Corallo  <andrea.corallo@arm.com>

	* gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_1.c: New
	testcase.
	* gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_2.c:
	Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vld2_lane_bf16_indices_1.c:
	Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vld2q_lane_bf16_indices_1.c:
	Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vld3_lane_bf16_indices_1.c:
	Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vld3q_lane_bf16_indices_1.c:
	Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vld4_lane_bf16_indices_1.c:
	Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vld4q_lane_bf16_indices_1.c:
	Likewise.
2020-10-28 12:19:47 +01:00
Alexandre Oliva
31643fa3e9 [PR97504] riscv needs wraplf for aux_long_long_float too
riscv is another platform on which GNAT maps Long_Long_Float to double
rather than long double, so we have to explicitly avoid the long
double intrinsics.


for  gcc/ada/ChangeLog

	PR ada/97504
	* Makefile.rtl (LIBGNAT_TARGET_PAIRS> <riscv*-*-*>: Use wraplf
	version of Aux_Long_Long_Float.
2020-10-28 07:54:33 -03:00
Jakub Jelinek
3a8b20947f openmp: Parsing and some semantic analysis of OpenMP allocate clause
This patch adds parsing of OpenMP allocate clause, but still ignores
it during OpenMP lowering where we should for privatized variables
with allocate clause use the corresponding allocators rather than
allocating them on the stack.

2020-10-28  Jakub Jelinek  <jakub@redhat.com>

gcc/
	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_ALLOCATE.
	* tree.h (OMP_CLAUSE_ALLOCATE_ALLOCATOR,
	OMP_CLAUSE_ALLOCATE_COMBINED): Define.
	* tree.c (omp_clause_num_ops, omp_clause_code_name): Add allocate
	clause.
	(walk_tree_1): Handle OMP_CLAUSE_ALLOCATE.
	* tree-pretty-print.c (dump_omp_clause): Likewise.
	* gimplify.c (gimplify_scan_omp_clauses, gimplify_adjust_omp_clauses,
	gimplify_omp_for): Likewise.
	* tree-nested.c (convert_nonlocal_omp_clauses,
	convert_local_omp_clauses): Likewise.
	* omp-low.c (scan_sharing_clauses): Likewise.
gcc/c-family/
	* c-pragma.h (enum pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_ALLOCATE.
	* c-omp.c: Include bitmap.h.
	(c_omp_split_clauses): Handle OMP_CLAUSE_ALLOCATE.
gcc/c/
	* c-parser.c (c_parser_omp_clause_name): Handle allocate.
	(c_parser_omp_clause_allocate): New function.
	(c_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_ALLOCATE.
	(OMP_FOR_CLAUSE_MASK, OMP_SECTIONS_CLAUSE_MASK,
	OMP_PARALLEL_CLAUSE_MASK, OMP_SINGLE_CLAUSE_MASK,
	OMP_TASK_CLAUSE_MASK, OMP_TASKGROUP_CLAUSE_MASK,
	OMP_DISTRIBUTE_CLAUSE_MASK, OMP_TEAMS_CLAUSE_MASK,
	OMP_TARGET_CLAUSE_MASK, OMP_TASKLOOP_CLAUSE_MASK): Add
	PRAGMA_OMP_CLAUSE_ALLOCATE.
	* c-typeck.c (c_finish_omp_clauses): Handle OMP_CLAUSE_ALLOCATE.
gcc/cp/
	* parser.c (cp_parser_omp_clause_name): Handle allocate.
	(cp_parser_omp_clause_allocate): New function.
	(cp_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_ALLOCATE.
	(OMP_FOR_CLAUSE_MASK, OMP_SECTIONS_CLAUSE_MASK,
	OMP_PARALLEL_CLAUSE_MASK, OMP_SINGLE_CLAUSE_MASK,
	OMP_TASK_CLAUSE_MASK, OMP_TASKGROUP_CLAUSE_MASK,
	OMP_DISTRIBUTE_CLAUSE_MASK, OMP_TEAMS_CLAUSE_MASK,
	OMP_TARGET_CLAUSE_MASK, OMP_TASKLOOP_CLAUSE_MASK): Add
	PRAGMA_OMP_CLAUSE_ALLOCATE.
	* semantics.c (finish_omp_clauses): Handle OMP_CLAUSE_ALLOCATE.
	* pt.c (tsubst_omp_clauses): Likewise.
gcc/testsuite/
	* c-c++-common/gomp/allocate-1.c: New test.
	* c-c++-common/gomp/allocate-2.c: New test.
	* c-c++-common/gomp/clauses-1.c (omp_allocator_handle_t): New typedef.
	(foo, bar, baz): Add allocate clauses where allowed.
2020-10-28 10:38:01 +01:00
Jakub Jelinek
2298ca2d3e openmp: Implicitly discover declare target for variants of declare variant calls
This marks all variants of declare variant also declare target if the base
functions are called directly in target regions or declare target functions.

2020-10-28  Jakub Jelinek  <jakub@redhat.com>

gcc/
	* omp-offload.c (omp_declare_target_tgt_fn_r): Handle direct calls to
	declare variant base functions.
libgomp/
	* testsuite/libgomp.c/target-42.c: New test.
2020-10-28 10:36:31 +01:00
Jakub Jelinek
3f39b64e57 xfail and improve some failing libgomp tests [PR81690]
With the patch I've posted today to fix up declare variant LTO handling,
Tobias reported the patch still doesn't work, and there are two
reasons for that.
One is that when the base function is marked implicitly as declare target,
we don't mark also implicitly the variants.  I'll need to ask on omp-lang
about details for that, but generally the compiler should do it some way.
The other one is that the way base_delay is written, it will always
call the usleep function, which is undesirable for nvptx.  While the
compiler will replace all direct calls to base_delay to nvptx_delay,
the base_delay definition which calls usleep stays.

2020-10-28  Jakub Jelinek  <jakub@redhat.com>
	    Tom de Vries  <tdevries@suse.de>

	PR testsuite/81690
	* testsuite/libgomp.c/usleep.h: New file.
	* testsuite/libgomp.c/target-32.c: Include usleep.h.
	(main): Use tgt_usleep instead of usleep.
	* testsuite/libgomp.c/thread-limit-2.c: Include usleep.h.
	(main): Use tgt_usleep instead of usleep.
2020-10-28 10:30:41 +01:00
Jakub Jelinek
f165ef89c0 lto: LTO cgraph support for late declare variant resolution [PR96680]
> I've tried to add the saving/restoring next to ipa refs saving/restoring, as
> the declare variant alt stuff is kind of extension of those, unfortunately
> following doesn't compile, because I need to also write or read a tree there
> (ctx is a portion of DECL_ATTRIBUTES of the base function), but the ipa refs
> write/read back functions don't have arguments that can be used for that.

This patch adds the streaming out and in of those omp_declare_variant_alt
hash table on the side data for the declare_variant_alt cgraph_nodes and
treats for LTO purposes the declare_variant_alt nodes (which have no body)
as if they contained a body that calls all the possible variants.
After IPA all the calls to these magic declare_variant_alt calls are
replaced with call to one of the variant depending on which one has the
highest score in the context.

2020-10-28  Jakub Jelinek  <jakub@redhat.com>

	PR lto/96680
gcc/
	* lto-streamer.h (omp_lto_output_declare_variant_alt,
	omp_lto_input_declare_variant_alt): Declare variant.
	* symtab.c (symtab_node::get_partitioning_class): Return
	SYMBOL_DUPLICATE for declare_variant_alt nodes.
	* passes.c (ipa_write_summaries): Add declare_variant_alt to
	partition.
	* lto-cgraph.c (output_refs): Call omp_lto_output_declare_variant_alt
	on declare_variant_alt nodes.
	(input_refs): Call omp_lto_input_declare_variant_alt on
	declare_variant_alt nodes.
	* lto-streamer-out.c (output_function): Don't call
	collect_block_tree_leafs if DECL_INITIAL is error_mark_node.
	(lto_output): Call output_function even for declare_variant_alt
	nodes.
	* omp-general.c (omp_lto_output_declare_variant_alt,
	omp_lto_input_declare_variant_alt): New functions.
gcc/lto/
	* lto-common.c (lto_fixup_prevailing_decls): Don't use
	LTO_NO_PREVAIL on TREE_LIST's TREE_PURPOSE.
	* lto-partition.c (lto_balanced_map): Treat declare_variant_alt
	nodes like definitions.
libgomp/
	* testsuite/libgomp.c/declare-variant-1.c: New test.
2020-10-28 10:29:09 +01:00
Jakub Jelinek
279a9ce9d5 wide-int: Fix up set_bit_large
> >> wide_int new_lb = wi::set_bit (r.lower_bound (0), 127)
> >>
> >> and creates the value:
> >>
> >> p new_lb
> >> {<wide_int_storage> = {val = {-65535, -1, 0}, len = 2, precision = 128},
> >> static is_sign_extended = true}
> >
> > This is non-canonical and so invalid, if the low HWI has the MSB set
> > and the high HWI is -1, it should have been just
> > val = {-65535}, len = 1, precision = 128}
> >
> > I guess the bug is that wi::set_bit_large doesn't call canonize.
>
> Yeah, looks like a micro-optimisation gone wrong.

2020-10-28  Jakub Jelinek  <jakub@redhat.com>

	* wide-int.cc (wi::set_bit_large): Call canonize unless setting
	msb bit and clearing bits above it.
2020-10-28 10:24:20 +01:00
Alan Modra
2241061463 [RS6000] power10 scan-assembler tests
On power10 these are "dg-do run" tests, so need -save-temps for the
assembler scanning.

	* gcc.target/powerpc/vsx-load-element-extend-char.c: Add -save-temps.
	* gcc.target/powerpc/vsx-load-element-extend-int.c: Likewise.
	* gcc.target/powerpc/vsx-load-element-extend-longlong.c: Likewise.
	* gcc.target/powerpc/vsx-load-element-extend-short.c: Likewise.
	* gcc.target/powerpc/vsx-store-element-truncate-char.c: Likewise.
	* gcc.target/powerpc/vsx-store-element-truncate-int.c: Likewise.
	* gcc.target/powerpc/vsx-store-element-truncate-longlong.c: Likewise.
	* gcc.target/powerpc/vsx-store-element-truncate-short.c: Likewise.
2020-10-28 10:58:10 +10:30
Alan Modra
ec69fe4e98 [RS6000] dg-do !compile and scan-assembler
These tests never checked assembly, because .s files were not
produced.  One was looking for the wrong instructions.

A typical error log
PASS: gcc.target/powerpc/vec-permute-ext-runnable.c (test for excess errors)
gcc.target/powerpc/vec-permute-ext-runnable.c output file does not exist
UNRESOLVED: gcc.target/powerpc/vec-permute-ext-runnable.c scan-assembler-times \\mpermx\\M 10

	* gcc.target/powerpc/vec-blend-runnable.c: Add save-temps.
	* gcc.target/powerpc/vec-insert-word-runnable.c: Likewise.
	* gcc.target/powerpc/vec-permute-ext-runnable.c: Likewise.
	* gcc.target/powerpc/vec-replace-word-runnable.c: Likewise.
	* gcc.target/powerpc/vec-splati-runnable.c: Likewise.
	* gcc.target/powerpc/vec-ternarylogic-3.c: Likewise.
	* gcc.target/powerpc/vec-ternarylogic-9.c: Likewise.
	* gcc.target/powerpc/vsx_mask-count-runnable.c: Likewise.
	* gcc.target/powerpc/vsx_mask-expand-runnable.c: Likewise.
	* gcc.target/powerpc/vsx_mask-extract-runnable.c: Likewise.
	* gcc.target/powerpc/vsx_mask-move-runnable.c: Likewise.
	* gcc.target/powerpc/vec-shift-double-runnable.c: Likewise,
	and correct assembly match.
2020-10-28 10:58:10 +10:30
Andrew MacLeod
c25d317cf7 Tweaks to ranger API routines.
Remove the gcc_assert wrappers that contain statements that need to be
executed.
Audit routines to ensure range is set to UNDEFINED when false is returned.

	* gimple-range-gori.cc (gori_compute_cache::cache_stmt): Accumulate
	return values and only set cache when everything returned true.
	* gimple-range.cc (get_tree_range): Set the return range to UNDEFINED
	when the range isn't supported.
	(gimple_ranger::calc_stmt): Return varying if the type is supported,
	even if the stmt processing failed.  False otherwise.
	(range_of_builtin_ubsan_call): Don't use gcc_assert.
	(range_of_builtin_call): Ditto.
	(gimple_ranger::range_of_cond_expr): Ditto.
	(gimple_ranger::range_of_expr): Ditto
	(gimple_ranger::range_on_entry): Ditto.
	(gimple_ranger::range_on_exit): Ditto.
	(gimple_ranger::range_on_edge): DItto.
	(gimple_ranger::range_of_stmt): Don't use gcc_assert, and initialize
	return value to UNDEFINED.
2020-10-27 20:17:29 -04:00
GCC Administrator
89bb01e7cb Daily bump. 2020-10-28 00:16:38 +00:00
Joseph Myers
75ce04fba4 c: Allow duplicate C2x standard attributes
N2557, accepted into C2x at the October WG14 meeting, removes the
requirement that duplicates of standard attributes cannot appear
within an attribute list (so allowing e.g. [[deprecated, deprecated]],
where previously that was disallowed but [[deprecated]] [[deprecated]]
was OK).  Remove the code checking for this (standard attributes
aren't in any released version of the C standard) and update tests
accordingly.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc/c/
2020-10-27  Joseph Myers  <joseph@codesourcery.com>

	* c-parser.c (c_parser_std_attribute_specifier): Allow duplicate
	standard attributes.

gcc/testsuite/
2020-10-27  Joseph Myers  <joseph@codesourcery.com>

	* gcc.dg/c2x-attr-deprecated-4.c, gcc.dg/c2x-attr-fallthrough-4.c,
	gcc.dg/c2x-attr-maybe_unused-4.c: Allow duplicate attributes.
2020-10-27 22:15:46 +00:00
Ian Lance Taylor
668894d7b5 libgo: update to Go 1.15.3 release
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265717
2020-10-27 13:58:02 -07:00
Andreas Krebbel
2b3e722a3c Fix PR97497
This works around a limitation of gcse with handling of partially
clobbered registers.  With this patch our GOT pointer register r12 is
not marked as partially clobbered anymore for the -m31 -mzarch -fpic
combination. This is correct since all the bits in r12 we actually
care about are in fact preserved.

gcc/ChangeLog:

	PR rtl-optimization/97497
	* config/s390/s390.c (s390_hard_regno_call_part_clobbered): Do not
	return true for r12 when -fpic is used.

gcc/testsuite/ChangeLog:

	* gcc.target/s390/pr97497.c: New test.
2020-10-27 21:01:26 +01:00
Harald Anlauf
a764c40079 PR fortran/97491 - Wrong restriction for VALUE arguments of pure procedures
A dummy argument with the VALUE attribute may be redefined in a PURE or
ELEMENTAL procedure.  Adjust the associated purity check.

gcc/fortran/ChangeLog:

	* resolve.c (gfc_impure_variable): A dummy argument with the VALUE
	attribute may be redefined without making a procedure impure.

gcc/testsuite/ChangeLog:

	* gfortran.dg/value_8.f90: New test.
2020-10-27 20:26:44 +01:00
Carl Love
edea991d2c PPC testsuite fixes
2020-10-27  Carl Love  <cel@us.ibm.com>

gcc/testsuite
	* gcc.target/powerpc/vec-blend-runnable.c: Change #ifdef
	DEBUG to #if DEBUG.
	Fix printf line so it is less then 80 characters long.
	* gcc.target/powerpc/vec-insert-word-runnable.c: Change
	#ifdef DEBUG to #if DEBUG.
	* gcc.target/powerpc/vec-permute-ext-runnable.c: Change
	#ifdef DEBUG to #if DEBUG.
	* gcc.target/powerpc/vec-replace-word-runnable.c: Change
	#ifdef DEBUG to #if DEBUG.
	Fix printf lines so they are less then 80 characters long.
	* gcc.target/powerpc/vec-shift-double-runnable.c: Change
	#ifdef DEBUG to #if DEBUG.
2020-10-27 13:40:56 -05:00
Ian Lance Taylor
b7ac5fdbe7 compiler, go/internal/gccgoimporter: export notinheap annotation
This is the gofrontend version of https://golang.org/cl/259297.
This is required now because that change is in the 1.15.3 release.

This requires changing the go/internal/gccgoimporter package, to skip
the new annotation. This change will need to be ported to the gc and
x/tools repos.

For golang/go#41761

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265258
2020-10-27 11:03:11 -07:00
Ian Lance Taylor
6f33e2d842 compiler: remove unused Type::in_heap_ member variable
This member variable was added in https://golang.org/cl/46490, but it
was never used. The code uses Named_type::in_heap_ instead.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265257
2020-10-27 11:01:02 -07:00
Nathan Sidwell
54380d42e6 c++: Kill nested_udts
During the implementation of modules I added myself a note to
implement nested_udt handling.  It wasn't obvious to me what they were
for and nothing seemed to be broken in ignoring them.  I figured
something would eventually pop up and I'd add support.  Nothing popped up.

Investigating on trunk discovered 3 places where we look at the
nested-udts.  I couldn't figure how the one in lookup_field_r was
needed -- surely the regular lookup would find the type.  It turned
out that code was unreachable.  So we can delete it.

Next in do_type_instantiation, we walk the nested-utd table
instantiating types.  But those types are also on the TYPE_FIELDS
list, which we've just iterated over.  So I can move the handling into
that loop.

The final use is in handling structs that have a typedef name for
linkage purposes.  Again, we can just iterate over TYPE_FIELDS.  (As
commented, we probably don't need to do even that, as a DR, whose
number I forget, requires such structs to only have C-like things in
them.  But I didn't go that far.

Having removed all the uses of nested-udts, I can remove their
creation from name-lookup, and as the only instance of a binding_table
object, we can remove all that code too.

	gcc/cp/
	* cp-tree.h (struct lang_type): Delete nested_udts field.
	(CLASSTYPE_NESTED_UTDS): Delete.
	* name-lookup.h (binding_table, binding_entry): Delete typedefs.
	(bt_foreach_proc): Likewise.
	(struct binding_entry_s): Delete.
	(SCOPE_DEFAULT_HT_SIZE, CLASS_SCOPE_HT_SIZE)
	(NAMESPACE_ORDINARY_HT_SIZE, NAMESPACE_STD_HT_SIZE)
	(GLOBAL_SCOPE_HT_SIZE): Delete.
	(binding_table_foreach, binding_table_find): Delete declarations.
	* name-lookup.c (ENTRY_INDEX): Delete.
	(free_binding_entry): Delete.
	(binding_entry_make, binding_entry_free): Delete.
	(struct binding_table_s): Delete.
	(binding_table_construct, binding_table_free): Delete.
	(binding_table_new, binding_table_expand): Delete.
	(binding_table_insert, binding_table_find): Delete.
	(binding_table_foreach): Delete.
	(maybe_process_template_type_declaration): Delete
	CLASSTYPE_NESTED_UTDS insertion.
	(do_pushtag): Likewise.
	* decl2.c (bt_reset_linkage_1): Fold into reset_type_linkage_1.
	(reset_type_linkage_2, bt_reset_linkage_2): Fold into
	reset_type_linkage.
	* pt.c (instantiate_class_template_1): Delete NESTED_UTDs comment.
	(bt_instantiate_type_proc): Delete.
	(do_type_instantiation): Instantiate implicit typedef fields.
	Delete NESTED_UTD walk.
	* search.c (lookup_field_r): Delete unreachable NESTED_UTD
	search.
2020-10-27 10:07:32 -07:00
Nathan Sidwell
88f8b3dda5 c++: Small cleanup for do_type_instantiation
In working on a bigger cleanup I noticed some opportunities to make
do_type_instantiation's control flow simpler.

	gcc/cp/
	* parser.c (cp_parser_explicit_instantiation): Refactor some RAII.
	* pt.c (bt_instantiate_type_proc): DATA is the tree, pass type to
	do_type_instantiation.
	(do_type_instantiation): Require T to be a type.  Refactor for
	some RAII.
2020-10-27 10:07:31 -07:00
Tamar Christina
0f801e0b6c AArch64: Fix overflow in memcopy expansion on aarch64.
Currently the inline memcpy expansion code for AArch64 is using a signed int
to hold the number of elements to copy.  When you giver give it a value larger
than INT_MAX it will overflow.

The overflow causes the maximum number of instructions we want to expand to
check to fail since this assumes an unsigned number.

This patch changes the maximum isns arithmetic to be unsigned HOST_WIDE_INT.

note that the calculation *must* remained signed as the memcopy issues
overlapping unaligned copies.  This means the pointer must be moved back and
so you need signed arithmetic.

gcc/ChangeLog:

	PR target/97535
	* config/aarch64/aarch64.c (aarch64_expand_cpymem): Use unsigned
	arithmetic in check.

gcc/testsuite/ChangeLog:

	PR target/97535
	* gcc.target/aarch64/pr97535.c: New test.
2020-10-27 16:59:12 +00:00