gcc.git
4 years agosccvn: Avoid overflows in push_partial_def
Jakub Jelinek [Wed, 4 Mar 2020 11:46:31 +0000 (12:46 +0100)]
sccvn: Avoid overflows in push_partial_def

The following patch attempts to avoid dangerous overflows in the various
push_partial_def HOST_WIDE_INT computations.
This is achieved by performing the subtraction offset2i - offseti in
the push_partial_def function and before doing that doing some tweaks.
If a constant store (non-CONSTRUCTOR) is too large (perhaps just
hypothetical case), native_encode_expr would fail for it, but we don't
necessarily need to fail right away, instead we can treat it like
non-constant store and if it is already shadowed, we can ignore it.
Otherwise, if it at most 64-byte and the caller ensured that there is
a range overlap and push_partial_def ensures the load is at most 64-byte,
I think we should be fine, offset (relative to the load)
can be from -64*8+1 to 64*8-1 only and size at most 64*8, so no risks of
overflowing HOST_WIDE_INT computations.
For CONSTRUCTOR (or non-constant) stores, those can be indeed arbitrarily
large, the caller just checks that both the absolute offset and size fit
into signed HWI.  But, we store the same bytes in that case over and over
(both in the {} case where it is all 0, and in the hypothetical future case
where we handle in push_partial_def also memset (, 123, )), so we can tweak
the write range for our purposes.  For {} store we could just cap it at the
start offset and/or offset+size because all the bits are 0, but I wrote it
in anticipation of the memset case and so the relative offset can now be
down to -7 and similarly size can grow up to 64 bytes + 14 bits, all this
trying to preserve the offset difference % BITS_PER_UNIT or end as well.

2020-03-04  Jakub Jelinek  <jakub@redhat.com>

* tree-ssa-sccvn.c (vn_walk_cb_data::push_partial_def): Add offseti
argument.  Change pd argument so that it can be modified.  Turn
constant non-CONSTRUCTOR store into non-constant if it is too large.
Adjust offset and size of CONSTRUCTOR or non-constant store to avoid
overflows.
(vn_walk_cb_data::vn_walk_cb_data, vn_reference_lookup_3): Adjust
callers.

4 years agotree-optimization/93964 - adjust ISL code generation for pointer params
Richard Biener [Wed, 4 Mar 2020 09:40:32 +0000 (10:40 +0100)]
tree-optimization/93964 - adjust ISL code generation for pointer params

Pointers eventually need intermediate conversions in code generation.
Allowing them is much easier than fending them off since niter
and scev expansion easily drag those in.

2020-02-04  Richard Biener  <rguenther@suse.de>

PR tree-optimization/93964
* graphite-isl-ast-to-gimple.c
(gcc_expression_from_isl_ast_expr_id): Add intermediate
conversion for pointer to integer converts.
* graphite-scop-detection.c (assign_parameter_index_in_region):
Relax assert.

* gcc.dg/graphite/pr93964.c: New testcase.

4 years agoClear --help=language and --help=common interaction.
Martin Liska [Wed, 4 Mar 2020 08:31:55 +0000 (09:31 +0100)]
Clear --help=language and --help=common interaction.

PR c/93886
PR c/93887
* doc/invoke.texi: Clarify --help=language and --help=common
interaction.

4 years agoWrap array in ctor with braces.
Martin Liska [Wed, 4 Mar 2020 08:31:05 +0000 (09:31 +0100)]
Wrap array in ctor with braces.

* method.c: Wrap array in ctor with braces in order
to silent clang warnings.

4 years agotailcall: Fix up process_assignment [PR94001]
Jakub Jelinek [Wed, 4 Mar 2020 08:01:59 +0000 (09:01 +0100)]
tailcall: Fix up process_assignment [PR94001]

When a function returns void or the return value is ignored, ass_var
is NULL_TREE.  The tail recursion handling generally assumes DCE has been
performed and so doesn't expect to encounter useless assignments after the
call and expects them to be part of the return value adjustment that need
to be changed into tail recursion additions/multiplications.
process_assignment does some verification and has a way to tell the caller
to try to move dead or whatever other stmts that don't participate in the
return value modifications before it is returned.
For binary rhs assignments it is just fine, neither op0 nor op1 will be
NULL_TREE and thus if *ass_var is NULL_TREE, it will not match, but unary
rhs is handled by only setting op0 to rhs1 and setting op1 to NULL_TREE.
And at this point, NULL_TREE == NULL_TREE and thus we think e.g. the
  c_2 = -e_3(D);
dead stmt is actually a return value modification, so we queue it as
multiplication and then create a void type SSA_NAME accumulator for it
and ICE shortly after.

Fixed by making sure op1 == *ass_var comparison is done only if *ass_var.

2020-03-04  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/94001
* tree-tailcall.c (process_assignment): Before comparing op1 to
*ass_var, verify *ass_var is non-NULL.

* gcc.dg/pr94001.c: New test.

4 years agoPR target/93995 ICE in patch_jump_insn, at cfgrtl.c:1290 on riscv64-linux-gnu
Kito Cheng [Tue, 3 Mar 2020 06:16:34 +0000 (14:16 +0800)]
PR target/93995 ICE in patch_jump_insn, at cfgrtl.c:1290 on riscv64-linux-gnu

Last code gen change of LTGT didn't consider the situation of cbranch with LTGT,
branch only support few compare codes.

gcc/ChangeLog

* config/riscv/riscv.c (riscv_emit_float_compare): Using NE to compare
the result of IOR.

gcc/testsuite/ChangeLog

* gcc.dg/pr93995.c: New.

4 years agoc++: Fix mismatch in template argument deduction [PR90505]
Marek Polacek [Tue, 3 Mar 2020 22:56:44 +0000 (17:56 -0500)]
c++: Fix mismatch in template argument deduction [PR90505]

My GCC 9 patch for C++20 P0846R0 (ADL and function templates) tweaked
cp_parser_template_name to only return an identifier if name lookup
didn't find anything.  In the deduce4.C case it means that we now
return an OVERLOAD.  That means that cp_parser_template_id will call
lookup_template_function whereby producing a TEMPLATE_ID_EXPR with
unknown_type_node.  Previously, we created a TEMPLATE_ID_EXPR with
no type, making it type-dependent.  What we have now is no longer
type-dependent.  And so, when we call finish_call_expr after we've
parsed "foo<int>(10)", even though we're in a template, we still do
the normal processing, thus perform overload resolution.  When adding
the template candidate foo we need to deduce the template arguments,
and that is where things go downhill.

When fn_type_unification sees that we have explicit template arguments,
but they aren't complete, it will use them to substitute the function
type.  So we substitute e.g. "void <T33d> (U)".  But the explicit
template argument was for a different parameter so we don't actually
substitute anything.  But the problem here was that we reduced the
template level of 'U' anyway.  So then when we're actually deducing
the template arguments via type_unification_real, we fail in unify:
22932       if (TEMPLATE_TYPE_LEVEL (parm)
22933           != template_decl_level (tparm))
22934         /* The PARM is not one we're trying to unify.  Just check
22935            to see if it matches ARG.  */
because 'parm' has been reduced but 'tparm' has not yet.

Therefore we shouldn't reduce the template level of template parameters
when tf_partial aka template argument deduction substitution.  But we
can only return after performing the cp_build_qualified_type etc.
business otherwise things break horribly.

2020-03-03  Jason Merrill  <jason@redhat.com>
    Marek Polacek  <polacek@redhat.com>

PR c++/90505 - mismatch in template argument deduction.
* pt.c (tsubst): Don't reduce the template level of template
parameters when tf_partial.

* g++.dg/template/deduce4.C: New test.
* g++.dg/template/deduce5.C: New test.
* g++.dg/template/deduce6.C: New test.
* g++.dg/template/deduce7.C: New test.

4 years agolibstdc++: Fix incorrect use of memset in ranges::fill_n (PR 94017)
Patrick Palka [Tue, 3 Mar 2020 21:16:05 +0000 (16:16 -0500)]
libstdc++: Fix incorrect use of memset in ranges::fill_n (PR 94017)

When deciding whether to perform the memset optimization in ranges::fill_n, we
were crucially neglecting to check that the output pointer's value type is a
byte type.  This patch adds such a check to the problematic condition in
ranges::fill_n.

At the same time, this patch relaxes the overly conservative
__is_byte<_Tp>::__value check that requires the fill type be a byte type.  It's
overly conservative because it means we won't enable the memset optimization in
the following example

  char c[100];
  ranges::fill(c, 37);

because the fill type is deduced to be int here.  Rather than requiring that the
fill type be a byte type, it seems safe to just require the fill type be an
integral type, which is what this patch does.

libstdc++-v3/ChangeLog:

PR libstdc++/94017
* include/bits/ranges_algobase.h (__fill_n_fn::operator()): Refine
condition for when to use memset, making sure to additionally check that
the output pointer's value type is a non-volatile byte type.  Instead of
requiring that the fill type is a byte type, just require that it's an
integral type.
* testsuite/20_util/specialized_algorithms/uninitialized_fill/94017.cc:
New test.
* testsuite/20_util/specialized_algorithms/uninitialized_fill_n/94017.cc:
New test.
* testsuite/25_algorithms/fill/94013.cc: Uncomment part that was blocked
by PR 94017.
* testsuite/25_algorithms/fill/94017.cc: New test.
* testsuite/25_algorithms/fill_n/94017.cc: New test.

4 years agolibstdc++: Move-only input iterator support in <memory> algorithms (LWG 3355)
Patrick Palka [Tue, 3 Mar 2020 00:39:46 +0000 (19:39 -0500)]
libstdc++: Move-only input iterator support in <memory> algorithms (LWG 3355)

This adds support for move-only input iterators in the ranges::unitialized_*
algorithms defined in <memory>, as per LWG 3355.  The only changes needed are to
add calls to std::move in the appropriate places and to use operator- instead of
ranges::distance because the latter cannot be used with a move-only iterator
that has a sized sentinel, as is the case here.  (This issue with
ranges::distance is LWG 3392.)

libstdc++-v3/ChangeLog:

LWG 3355 The memory algorithms should support move-only input iterators
introduced by P1207
* include/bits/ranges_uninitialized.h
(__uninitialized_copy_fn::operator()): Use std::move to avoid attempting
to copy __ifirst, which could be a move-only input iterator.  Use
operator- instead of ranges::distance to compute distance from a sized
sentinel.
(__uninitialized_copy_n_fn::operator()): Likewise.
(__uninitialized_move_fn::operator()): Likewise.
(__uninitialized_move_n_fn::operator()): Likewise.
(__uninitialized_destroy_fn::operator()): Use std::move to avoid
attempting to copy __first.
(__uninitialized_destroy_n_fn::operator()): Likewise.
* testsuite/20_util/specialized_algorithms/destroy/constrained.cc:
Augment test.
* .../specialized_algorithms/uninitialized_copy/constrained.cc:
Likewise.
* .../specialized_algorithms/uninitialized_move/constrained.cc:
Likewise.

4 years agolibstdc++: Add a testsuite range type that has a sized sentinel
Patrick Palka [Tue, 3 Mar 2020 03:32:22 +0000 (22:32 -0500)]
libstdc++: Add a testsuite range type that has a sized sentinel

This adds a testsuite range type whose end() is a sized sentinel to
<testsuite_iterators.h>, which will be used in the tests that verify LWG 3355.

libstdc++-v3/ChangeLog:

* testsuite/util/testsuite_iterators.h (test_range::get_iterator): Make
protected instead of private.
(test_sized_range_sized_sent): New.

4 years agolibstdc++: Add a move-only testsuite iterator type
Patrick Palka [Mon, 2 Mar 2020 21:21:33 +0000 (16:21 -0500)]
libstdc++: Add a move-only testsuite iterator type

This adds a move-only testsuite iterator wrapper to <testsuite_iterators.h>
which will be used in the tests for LWG 3355.  The tests for LWG 3389 and 3390
are adjusted to use this new iterator wrapper.

libstdc++-v3/ChangeLog:

* testsuite/util/testsuite_iterators.h (input_iterator_wrapper_nocopy):
New testsuite iterator.
* testsuite/24_iterators/counted_iterator/lwg3389.cc: Use it.
* testsuite/24_iterators/move_iterator/lwg3390.cc: Likewise.

4 years agolibstdc++: Fix use of is_nothrow_assignable_v in <bits/ranges_uninitialized.h>
Patrick Palka [Tue, 3 Mar 2020 00:39:13 +0000 (19:39 -0500)]
libstdc++: Fix use of is_nothrow_assignable_v in <bits/ranges_uninitialized.h>

We are passing a value type as the first argument to is_nothrow_assignable_v,
but the result of that is inevitably false.  Since this predicate is a part of
the condition that guards the corresponding optimizations for these algorithms,
this bug means these optimizations are never used.  We should be passing a
reference type to is_nothrow_assignable_v instead.

libstdc++-v3/ChangeLog:

* include/bits/ranges_uninitialized.h
(uninitialized_copy_fn::operator()): Pass a reference type as the first
argument to is_nothrow_assignable_v.
(uninitialized_copy_fn::operator()): Likewise.
(uninitialized_move_fn::operator()): Likewise.  Return an in_out_result
with the input iterator stripped of its move_iterator.
(uninitialized_move_n_fn::operator()): Likewise.
(uninitialized_fill_fn::operator()): Pass a reference type as the first
argument to is_nothrow_assignable_v.
(uninitialized_fill_n_fn::operator()): Likewise.

4 years agocoroutines: Handle component_ref in captures_temporary
JunMa [Tue, 11 Feb 2020 08:01:08 +0000 (16:01 +0800)]
coroutines: Handle component_ref in captures_temporary

gcc/cp
        * coroutines.cc (captures_temporary): Strip component_ref
        to its base object.

gcc/testsuite
        * g++.dg/coroutines/torture/co-await-15-capture-comp-ref.C: New test.

4 years agoDaily bump.
GCC Administrator [Wed, 4 Mar 2020 00:16:33 +0000 (00:16 +0000)]
Daily bump.

4 years agolibstdc++: Workaround is_trivially_copyable<volatile T> (PR 94013)
Jonathan Wakely [Tue, 3 Mar 2020 21:38:57 +0000 (21:38 +0000)]
libstdc++: Workaround is_trivially_copyable<volatile T> (PR 94013)

Several algorithms check the is_trivially_copyable trait to decide
whether to dispatch to memmove or memcmp as an optimization. Since
r271435 (CWG DR 2094) the trait is true for volatile-qualified scalars,
but we can't use memmove or memcmp when the type is volatile. We need to
also check for volatile types.

This is complicated by the fact that in C++20 (but not earlier standards)
iterator_traits<volatile T*>::value_type is T, so we can't just check
whether the value_type is volatile.

The solution in this patch is to introduce new traits __memcpyable and
__memcmpable which combine into a single trait the checks for pointers,
the value types being the same, and the type being trivially copyable
but not volatile-qualified.

PR libstdc++/94013
* include/bits/cpp_type_traits.h (__memcpyable, __memcmpable): New
traits to control when to use memmove and memcmp optimizations.
(__is_nonvolatile_trivially_copyable): New helper trait.
* include/bits/ranges_algo.h (__lexicographical_compare_fn): Do not
use memcmp optimization with volatile data.
* include/bits/ranges_algobase.h (__equal_fn): Use __memcmpable.
(__copy_or_move, __copy_or_move_backward): Use __memcpyable.
* include/bits/stl_algobase.h (__copy_move_a2): Use __memcpyable.
(__copy_move_backward_a2): Likewise.
(__equal_aux1): Use __memcmpable.
(__lexicographical_compare_aux): Do not use memcmp optimization with
volatile data.
* testsuite/25_algorithms/copy/94013.cc: New test.
* testsuite/25_algorithms/copy_backward/94013.cc: New test.
* testsuite/25_algorithms/equal/94013.cc: New test.
* testsuite/25_algorithms/fill/94013.cc: New test.
* testsuite/25_algorithms/lexicographical_compare/94013.cc: New test.
* testsuite/25_algorithms/move/94013.cc: New test.
* testsuite/25_algorithms/move_backward/94013.cc: New test.

4 years agoc++: Fix non-constant TARGET_EXPR constexpr handing [PR93998]
Jakub Jelinek [Tue, 3 Mar 2020 18:49:12 +0000 (19:49 +0100)]
c++: Fix non-constant TARGET_EXPR constexpr handing [PR93998]

We ICE on the following testcase since I've added the SAVE_EXPR-like
constexpr handling where the TARGET_EXPR initializer (and cleanup) is
evaluated only once (because it might have side-effects like new or delete
expressions in it).
The problem is if the TARGET_EXPR (but I guess in theory SAVE_EXPR too)
initializer is *non_constant_p.  We still remember the result, but already
not that it is *non_constant_p.  Normally that wouldn't be a big problem,
if something is *non_constant_p, we only or into it and so the whole
expression will be non-constant too.  Except in the builtins handling,
we try to evaluate the arguments with non_constant_p pointing into a dummy1
bool which we ignore.  This is because some builtins might fold into a
constant even if they don't have a constexpr argument.  Unfortunately if
we evaluate the TARGET_EXPR first in the argument of such a builtin and then
once again, we don't set *non_constant_p.

So, either we don't remember the TARGET_EXPR/SAVE_EXPR result if it wasn't
constant, like the following patch does, or we could remember it, but in
some way that would make it clear that it is non-constant (e.g. by
pushing into the global->values SAVE_EXPR, SAVE_EXPR entry and perhaps
for TARGET_EXPR don't remember it on TARGET_EXPR_SLOT, but the TARGET_EXPR
itself and similarly push TARGET_EXPR, TARGET_EXPR and if we see those
after the lookup, diagnose + set *non_constant_p.  Or we could perhaps
during the builtin argument evaluation push expressions into a different
save_expr vec and undo them afterwards.

2020-03-03  Jakub Jelinek  <jakub@redhat.com>

PR c++/93998
* constexpr.c (cxx_eval_constant_expression)
<case TARGET_EXPR, case SAVE_EXPR>: Don't record anything if
*non_constant_p is true.

* g++.dg/ext/pr93998.C: New test.

4 years agolibgcc: arm: convert thumb1 code to unified syntax
Richard Earnshaw [Tue, 3 Mar 2020 16:02:24 +0000 (16:02 +0000)]
libgcc: arm: convert thumb1 code to unified syntax

Unified syntax has been the official syntax for thumb1 assembly for
over 10 years now.  It's time we made preparations for that becoming
the default in the assembler.  But before we can start doing that we
really need to clean up some laggards from the olden days.  Libgcc
support for thumb1 is one such example.

This patch converts all of the legacy (disjoint) syntax that I could
find over to unified code.  The identification was done by using a
trick version of gas that defaulted to unified mode which then faults
if legacy syntax is encountered.  The code produced was then compared
against the old code to check for differences.  One such difference
does exist, but that is because in unified syntax 'movs rd, rn' is
encoded as 'lsls rd, rn, #0', rather than 'adds rd, rn, #0'; but that
is a deliberate change that was introduced because the lsls encoding
more closely reflects the behaviour of 'movs' in arm state (where only
some of the condition flags are modified).

* config/arm/bpabi-v6m.S (aeabi_lcmp): Convert thumb1 code to unified
syntax.
(aeabi_ulcmp, aeabi_ldivmod, aeabi_uldivmod): Likewise.
(aeabi_frsub, aeabi_cfcmpeq, aeabi_fcmpeq): Likewise.
(aeabi_fcmp, aeabi_drsub, aeabi_cdrcmple): Likewise.
(aeabi_cdcmpeq, aeabi_dcmpeq, aeabi_dcmp): Likewise.
* config/arm/lib1funcs.S (Lend_fde): Convert thumb1 code to unified
syntax.
(divsi3, modsi3): Likewise.
(clzdi2, ctzsi2): Likewise.
* config/arm/libunwind.S (restore_core_regs): Convert thumb1 code to
unified syntax.
(UNWIND_WRAPPER): Likewise.

4 years agoarm: ACLE BFloat16 convert intrinsics
Dennis Zhang [Tue, 3 Mar 2020 13:13:31 +0000 (13:13 +0000)]
arm: ACLE BFloat16 convert intrinsics

This patch is part of a series adding support for Armv8.6-A features.
It implements intrinsics to convert between bfloat16 and float32
formats.

gcc/ChangeLog:

* config/arm/arm_bf16.h (vcvtah_f32_bf16, vcvth_bf16_f32): New.
* config/arm/arm_neon.h (vcvt_f32_bf16, vcvtq_low_f32_bf16): New.
(vcvtq_high_f32_bf16, vcvt_bf16_f32): New.
(vcvtq_low_bf16_f32, vcvtq_high_bf16_f32): New.
* config/arm/arm_neon_builtins.def (vbfcvt, vbfcvt_high): New entries.
(vbfcvtv4sf, vbfcvtv4sf_high): Likewise.
* config/arm/iterators.md (VBFCVT, VBFCVTM): New mode iterators.
(V_bf_low, V_bf_cvt_m): New mode attributes.
* config/arm/neon.md (neon_vbfcvtv4sf<VBFCVT:mode>): New.
(neon_vbfcvtv4sf_highv8bf, neon_vbfcvtsf): New.
(neon_vbfcvt<VBFCVT:mode>, neon_vbfcvt_highv8bf): New.
(neon_vbfcvtbf_cvtmode<mode>, neon_vbfcvtbf): New
* config/arm/unspecs.md (UNSPEC_BFCVT, UNSPEC_BFCVT_HIG): New.

gcc/testsuite/ChangeLog:

* gcc.target/arm/simd/bf16_cvt_1.c: New test.

4 years agolibstdc++: Micro-optimisations for lexicographical_compare_three_way
Jonathan Wakely [Tue, 3 Mar 2020 11:06:26 +0000 (11:06 +0000)]
libstdc++: Micro-optimisations for lexicographical_compare_three_way

As noted in LWG 3410 the specification in the C++20 draft performs more
iterator comparisons than necessary when the end of either range is
reached. Our implementation followed that specification. This removes
the redundant comparisons so that we do no unnecessary work as soon as
we find that we've reached the end of either range.

The odd-looking return statement is because it generates better code
than the original version that copied the global constants.

* include/bits/stl_algobase.h (lexicographical_compare_three_way):
Avoid redundant iterator comparisons (LWG 3410).

4 years agosccvn: Improve handling of load masked with integer constant [PR93582]
Jakub Jelinek [Tue, 3 Mar 2020 10:24:33 +0000 (11:24 +0100)]
sccvn: Improve handling of load masked with integer constant [PR93582]

As mentioned in the PR and discussed on IRC, the following patch is the
patch that fixes the originally reported issue.
We have there because of the premature bitfield comparison -> BIT_FIELD_REF
optimization:
  s$s4_19 = 0;
  s.s4 = s$s4_19;
  _10 = BIT_FIELD_REF <s, 8, 0>;
  _13 = _10 & 8;
and no other s fields are initialized.  If they would be all initialized with
constants, then my earlier PR93582 bitfield handling patches would handle it
already, but if at least one bit we ignore after the BIT_AND_EXPR masking
is not initialized or is initialized earlier to non-constant, we aren't able
to look through it until combine, which is too late for the warnings on the
dead code.
This patch handles BIT_AND_EXPR where the first operand is a SSA_NAME
initialized with a memory load and second operand is INTEGER_CST, by trying
a partial def lookup after pushing the ranges of 0 bits in the mask as
artificial initializers.  In the above case on little-endian, we push
offset 0 size 3 {} partial def and offset 4 size 4 (the result is unsigned
char) and then perform normal partial def handling.
My initial version of the patch failed miserably during bootstrap, because
data->finish (...) called vn_reference_lookup_or_insert_for_pieces
which I believe tried to remember the masked value rather than real for the
reference, or for failed lookup visit_reference_op_load called
vn_reference_insert.  The following version makes sure we aren't calling
either of those functions in the masked case, as we don't know anything
better about the reference from whatever has been discovered when the load
stmt has been visited, the patch just calls vn_nary_op_insert_stmt on
failure with the lhs (apparently calling it with the INTEGER_CST doesn't
work).

2020-03-03  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/93582
* tree-ssa-sccvn.h (vn_reference_lookup): Add mask argument.
* tree-ssa-sccvn.c (struct vn_walk_cb_data): Add mask and masked_result
members, initialize them in the constructor and if mask is non-NULL,
artificially push_partial_def {} for the portions of the mask that
contain zeros.
(vn_walk_cb_data::finish): If mask is non-NULL, set masked_result to
val and return (void *)-1.  Formatting fix.
(vn_reference_lookup_pieces): Adjust vn_walk_cb_data initialization.
Formatting fix.
(vn_reference_lookup): Add mask argument.  If non-NULL, don't call
fully_constant_vn_reference_p nor vn_reference_lookup_1 and return
data.mask_result.
(visit_nary_op): Handle BIT_AND_EXPR of a memory load and INTEGER_CST
mask.
(visit_stmt): Formatting fix.

* gcc.dg/tree-ssa/pr93582-10.c: New test.
* gcc.dg/pr93582.c: New test.
* gcc.c-torture/execute/pr93582.c: New test.

4 years agotree-optimization/93946 - fix bogus redundant store removal in FRE, DSE and DOM
Richard Biener [Tue, 3 Mar 2020 10:01:09 +0000 (11:01 +0100)]
tree-optimization/93946 - fix bogus redundant store removal in FRE, DSE and DOM

This fixes a common mistake in removing a store that looks redudnant but
is not because it changes the dynamic type of the memory and thus makes
a difference for following loads with TBAA.

2020-03-03  Richard Biener  <rguenther@suse.de>

PR tree-optimization/93946
* alias.h (refs_same_for_tbaa_p): Declare.
* alias.c (refs_same_for_tbaa_p): New function.
* tree-ssa-alias.c (ao_ref_alias_set): For a NULL ref return
zero.
* tree-ssa-scopedtables.h
(avail_exprs_stack::lookup_avail_expr): Add output argument
giving access to the hashtable entry.
* tree-ssa-scopedtables.c (avail_exprs_stack::lookup_avail_expr):
Likewise.
* tree-ssa-dom.c: Include alias.h.
(dom_opt_dom_walker::optimize_stmt): Validate TBAA state before
removing redundant store.
* tree-ssa-sccvn.h (vn_reference_s::base_set): New member.
(ao_ref_init_from_vn_reference): Adjust prototype.
(vn_reference_lookup_pieces): Likewise.
(vn_reference_insert_pieces): Likewise.
* tree-ssa-sccvn.c: Track base alias set in addition to alias
set everywhere.
(eliminate_dom_walker::eliminate_stmt): Also check base alias
set when removing redundant stores.
(visit_reference_op_store): Likewise.
* dse.c (record_store): Adjust valdity check for redundant
store removal.

* gcc.dg/torture/pr93946-1.c: New testcase.
* gcc.dg/torture/pr93946-2.c: Likewise.

4 years agos390: Fix --with-arch=... --with-tune=... [PR26877]
Jakub Jelinek [Tue, 3 Mar 2020 09:44:24 +0000 (10:44 +0100)]
s390: Fix --with-arch=... --with-tune=... [PR26877]

In Fedora we configure GCC with --with-arch=zEC12 --with-tune=z13 right now
and furthermore redhat-rpm-config adds to rpm packages -march=zEC12 -mtune=z13
options (among others).  While looking at the git compilation, I've been
surprised that -O2 actually behaves differently from -O2 -mtune=z13 in this
configuration, and indeed, seems --with-tune= is completely ignored on s390
if --with-arch= is specified.

i386 had the same problem, but got that fixed in 2006, see PR26877.
The thing is that for tune, we add -mtune=%(VALUE) only if neither -mtune=
nor -march= is present, but as arch is processed first, it adds
-march=%(VALUE) first and then -march= is always present and so -mtune= is
never added.
By reordering it in OPTION_DEFAULT_SPECS, we process tune first, add the
default -mtune=%(VALUE) if -mtune= or -march= isn't seen, and then
add -march=%(VALUE) if -march= isn't seen.  It is true that cc1 etc.
will be then invoked with -mtune=z13 -march=zEC12, but like if the user
specifies it in that order, it should still use z13 tuning and zEC12
ISA set.

2020-03-03  Jakub Jelinek  <jakub@redhat.com>

PR target/26877
* config/s390/s390.h (OPTION_DEFAULT_SPECS): Reorder.

4 years agoexplow: Fix ICE caused by plus_constant [PR94002]
Jakub Jelinek [Tue, 3 Mar 2020 09:42:34 +0000 (10:42 +0100)]
explow: Fix ICE caused by plus_constant [PR94002]

The following testcase ICEs in cross to riscv64-linux.  The problem is
that we have a DImode integral constant (that doesn't fit into SImode),
which is pushed into a constant pool and later access just the first half of
it using a MEM.  When plus_constant is called on such a MEM, if the constant
has mode, we verify the mode, but if it doesn't, we don't and ICE later on
when we think the CONST_INT is a valid SImode constant.

2020-03-03  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/94002
* explow.c (plus_constant): Punt if cst has VOIDmode and
get_pool_mode is different from mode.

* gcc.dg/pr94002.c: New test.

4 years agoarc: Update legitimate small data address.
Claudiu Zissulescu [Tue, 3 Mar 2020 08:34:50 +0000 (10:34 +0200)]
arc: Update legitimate small data address.

All ARC's small data adressing is using address scaling feature of the
load/store instructions (i.e., the address is made of a general
pointer plus a shifted offset. The shift amount depends on the
addressing mode).  This patch is checking the offset of an address if
it fits the scalled constraint.  If so, a small data access is
generated.  This patch fixes execute' pr93249 failure.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (leigitimate_small_data_address_p): Check if an
address has an offset which fits the scalling constraint for a
load/store operation.
(legitimate_scaled_address_p): Update use
leigitimate_small_data_address_p.
(arc_print_operand): Likewise.
(arc_legitimate_address_p): Likewise.
(legitimate_small_data_address_p): Likewise.

Signed-off-by: Claudiu Zissulescu <claziss@gmail.com>
4 years agoarc: Use accl_operand predicate for fma instructions.
Claudiu Zissulescu [Tue, 3 Mar 2020 08:34:50 +0000 (10:34 +0200)]
arc: Use accl_operand predicate for fma instructions.

With the refurbish of ARC600' accumulator support, the mlo_operand
doesn't reflect the proper low accumulator register for the newer
ARCv2 accumulator register used by the fma instructions.  Hence,
replace it with accl_operand predicate.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.md (fmasf4_fpu): Use accl_operand predicate.
(fnmasf4_fpu): Likewise.

4 years agoarc: Improve code gen for 64bit add/sub operations.
Claudiu Zissulescu [Tue, 3 Mar 2020 08:34:50 +0000 (10:34 +0200)]
arc: Improve code gen for 64bit add/sub operations.

Early expand ADDDI3 and SUBDI3 for better code gen.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.md (adddi3): Early expand the 64bit operation into
32bit ops.
(subdi3): Likewise.
(adddi3_i): Remove pattern.
(subdi3_i): Likewise.

4 years agoarc: Add length attribute to eh_return pattern.
Claudiu Zissulescu [Tue, 3 Mar 2020 08:34:49 +0000 (10:34 +0200)]
arc: Add length attribute to eh_return pattern.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.md (eh_return): Add length info.

4 years agotestsuite: Add testcases for already fixed PR [PR93927]
Jakub Jelinek [Tue, 3 Mar 2020 06:58:12 +0000 (07:58 +0100)]
testsuite: Add testcases for already fixed PR [PR93927]

2020-03-03  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/93927
* gcc.c-torture/compile/pr93927-1.c: New test.
* gcc.c-torture/compile/pr93927-2.c: New test.

4 years agoBuild coroutine expression with unknown_type in processing_template_decl phase.
JunMa [Wed, 5 Feb 2020 05:46:59 +0000 (13:46 +0800)]
Build coroutine expression with unknown_type in processing_template_decl phase.

gcc/cp
        * coroutines.cc (finish_co_await_expr): Build co_await_expr
        with unknown_type_node.
        (finish_co_yield_expr): Ditto.
        *pt.c (type_dependent_expression_p): Set co_await/yield_expr
        with unknown type as dependent.

gcc/testsuite
        * g++.dg/coroutines/torture/co-await-14-template-traits.C: New test.

4 years agoDaily bump.
GCC Administrator [Tue, 3 Mar 2020 00:16:38 +0000 (00:16 +0000)]
Daily bump.

4 years agoanalyzer: don't print the duplicate count by default
David Malcolm [Fri, 28 Feb 2020 15:06:57 +0000 (10:06 -0500)]
analyzer: don't print the duplicate count by default

The note about duplicates attached to analyzer diagnostics feels like an
implementation detail; it's likely just noise from the perspective of an
end-user.

This patch disables it by default, introducing a flag to re-enable it.

gcc/analyzer/ChangeLog:
* analyzer.opt (fanalyzer-show-duplicate-count): New option.
* diagnostic-manager.cc
(diagnostic_manager::emit_saved_diagnostic): Use the above to
guard the printing of the duplicate count.

gcc/ChangeLog:
* doc/invoke.texi (-fanalyzer-show-duplicate-count): New.

gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c: Add
-fanalyzer-show-duplicate-count.

4 years agoinvoke.texi: add missing option to -fanalyzer list
David Malcolm [Fri, 28 Feb 2020 13:55:55 +0000 (08:55 -0500)]
invoke.texi: add missing option to -fanalyzer list

gcc/ChangeLog:
* doc/invoke.texi (Static Analyzer Options): Add
-Wanalyzer-stale-setjmp-buffer to the list of options enabled
by -fanalyzer.

4 years agoanalyzer: detect malloc, free, calloc within "std" [PR93959]
David Malcolm [Thu, 27 Feb 2020 19:19:33 +0000 (14:19 -0500)]
analyzer: detect malloc, free, calloc within "std" [PR93959]

PR analyzer/93959 reported that g++.dg/analyzer/malloc.C was failing
with no output on Solaris.

The issue is that <stdlib.h> there has "using std::free;", converting
all the "free" calls to std::free, which fails the name-matching via
is_named_call_p.

This patch implements an is_std_named_call_p variant of is_named_call_p
to check for the name within "std", and uses it in sm-malloc.c to check
for std::malloc, std::calloc, and std::free.

gcc/analyzer/ChangeLog:
PR analyzer/93959
* analyzer.cc (is_std_function_p): New function.
(is_std_named_call_p): New functions.
* analyzer.h (is_std_named_call_p): New decl.
* sm-malloc.cc (malloc_state_machine::on_stmt): Check for "std::"
variants when checking for malloc, calloc and free.

gcc/testsuite/ChangeLog:
PR analyzer/93959
* g++.dg/analyzer/cstdlib-2.C: New test.
* g++.dg/analyzer/cstdlib.C: New test.

4 years agocoroutines: Update lambda capture handling to n4849.
Iain Sandoe [Mon, 2 Mar 2020 20:29:32 +0000 (20:29 +0000)]
coroutines: Update lambda capture handling to n4849.

In the absence of specific comment on the handling of closures I'd
implemented something more than was intended (extending the lifetime
of lambda capture-by-copy vars to the duration of the coro).

After discussion at WG21 in February and by email, the correct handling
is to treat the closure "this" pointer the same way as for a regular one,
and thus it is the user's responsibility to ensure that the lambda capture
object has suitable lifetime for the coroutine.  It is noted that users
frequently get this wrong, so it would be a good thing to revisit for C++23.

This patch removes the additional copying behaviour for lambda capture-by-
copy vars.

gcc/cp/ChangeLog:

2020-03-02  Iain Sandoe  <iain@sandoe.co.uk>

* coroutines.cc (struct local_var_info): Adjust to remove the
reference to the captured var, and just to note that this is a
lambda capture proxy.
(transform_local_var_uses): Handle lambda captures specially.
(struct param_frame_data): Add a visited set.
(register_param_uses): Also check for param uses in lambda
capture proxies.
(struct local_vars_frame_data): Remove captures list.
(register_local_var_uses): Handle lambda capture proxies by
noting and bypassing them.
(morph_fn_to_coro): Update to remove lifetime extension of
lambda capture-by-copy vars.

gcc/testsuite/ChangeLog:

2020-03-02  Iain Sandoe  <iain@sandoe.co.uk>
    Jun Ma <JunMa@linux.alibaba.com>

* g++.dg/coroutines/torture/class-05-lambda-capture-copy-local.C:
* g++.dg/coroutines/torture/lambda-09-init-captures.C: New test.
* g++.dg/coroutines/torture/lambda-10-mutable.C: New test.

4 years agoi386: Allow only registers with VALID_INT_MODE_P modes in movstrict<mode> [PR93997]
Uros Bizjak [Mon, 2 Mar 2020 20:13:36 +0000 (21:13 +0100)]
i386: Allow only registers with VALID_INT_MODE_P modes in movstrict<mode> [PR93997]

*movstrict<mode>_1 insn pattern allows only general registers,
so we have to reject modes not suitable for general regs in
corresponding movstrict<mode> expander.

PR target/93997
* config/i386/i386.md (movstrict<mode>): Allow only
registers with VALID_INT_MODE_P modes.

testsuite/ChangeLog:

PR target/93997
* gcc.target/i386/pr93997.c: New test.

4 years agoAdd new test for PR tree-optimization/92982.
Martin Sebor [Mon, 2 Mar 2020 18:49:01 +0000 (11:49 -0700)]
Add new test for PR tree-optimization/92982.

gcc/testsuite/ChangeLog:
PR tree-optimization/92982
* gcc.dg/strlenopt-94.c: New test.

4 years agoc++: Add -std=gnu++20 option [PR93958]
Marek Polacek [Sat, 29 Feb 2020 19:50:19 +0000 (14:50 -0500)]
c++: Add -std=gnu++20 option [PR93958]

One missing bit from r10-6656.  The docs and target-supports.exp
already handle -std=gnu++20.

2020-03-02  Marek Polacek  <polacek@redhat.com>

PR c++/93958 - add missing -std=gnu++20.
* c.opt: Add -std=gnu++20.

4 years agoEnsure sufficient size of variables used for module+submodule names.
Andrew Benson [Mon, 2 Mar 2020 17:28:35 +0000 (17:28 +0000)]
Ensure sufficient size of variables used for module+submodule names.

        PR fortran/93486
        * module.c: Increase size of variables used to read module names
        when loading interfaces from module files to permit cases where
        the name is the concatenation of a module and submodule name.
        * gfortran.dg/pr93486.f90: New test.

4 years agolibstdc++: Fix std::lexicographic_compare for unsigned char (PR 93972)
Jonathan Wakely [Mon, 2 Mar 2020 17:03:28 +0000 (17:03 +0000)]
libstdc++: Fix std::lexicographic_compare for unsigned char (PR 93972)

The new 25_algorithms/lexicographical_compare/93972.cc test fails on
targets where char is unsigned, revealing an existing regression with
the std::__memcmp helper that had gone unnoticed in
std::lexicographical_compare. When comparing char and unsigned char, the
memcmp optimisation is enabled, but the new std::__memcmp function fails
to compile for mismatched types.

PR libstdc++/93972
* include/bits/stl_algobase.h (__memcmp): Allow pointer types to
differ.
* testsuite/25_algorithms/lexicographical_compare/uchar.cc: New test.

4 years agolibstdc++: Rename __detail::__maybe_empty_t alias template
Jonathan Wakely [Mon, 2 Mar 2020 17:03:28 +0000 (17:03 +0000)]
libstdc++: Rename __detail::__maybe_empty_t alias template

The key property of this alias is not that it may be an empty type, but
that the type argument may not be used. The fact it's replaced by an
empty type is just an implementation detail.  The name was also
backwards with respect to the bool argument.

This patch changes the name to better reflect its purpose.

* include/std/ranges (__detail::__maybe_empty_t): Rename to
__maybe_present_t.
(__adaptor::_RangeAdaptor, join_view, split_view): Use new name.

4 years agocoroutines: Don't make duplicate frame copies of awaitables.
Iain Sandoe [Mon, 2 Mar 2020 15:35:45 +0000 (15:35 +0000)]
coroutines: Don't make duplicate frame copies of awaitables.

In general, we need to manage the lifetime of compiler-
generated awaitable instances in the coroutine frame, since
these must persist across suspension points.

However, it is quite possible that the user might provide the
awaitable instances, either as function params or as a local
variable.  We will already generate a frame entry for these as
required.

At present, under this circumstance, we are duplicating these,
awaitable, initialising a second frame copy for them (which we
then subsequently destroy manually after the suspension point).
That's not efficient - so an undesirable thinko in the first place.
However, there is also an actual bug; if the compiler elects to
elide the copy (which is perfectly legal), it does not have visibility
of the manual management of the post-suspend destruction
- this subsequently leads to double-free errors.

The solution is not to make the second copy (as noted, params
and local vars already have frame copies with managed lifetimes).

gcc/cp/ChangeLog:

2020-03-02  Iain Sandoe  <iain@sandoe.co.uk>

* coroutines.cc (build_co_await): Do not build frame
proxy vars when the co_await expression is a function
parameter or local var.
(co_await_expander): Do not initialise a frame var with
itself.
(transform_await_expr): Only substitute the awaitable
frame var if it's needed.
(register_awaits): Do not make frame copies for param
or local vars that are awaitables.

gcc/testsuite/ChangeLog:

2020-03-02  Iain Sandoe  <iain@sandoe.co.uk>

* g++.dg/coroutines/torture/func-params-09-awaitable-parms.C: New test.
* g++.dg/coroutines/torture/local-var-5-awaitable.C: New test.

4 years agoamdgcn: Extend reductions to all types
Andrew Stubbs [Fri, 7 Feb 2020 11:14:43 +0000 (11:14 +0000)]
amdgcn: Extend reductions to all types

Add support for V64DFmode addition, and V64DImode min, max.  There's no
direct hardware support for these, so we use regular vector instructions
and separate lane shift instructions.

Also add support for V64QI and V64HI reductions. Some of these require
additional extends and truncates, because AMD GCN has 32-bit vector lanes.

2020-03-02  Andrew Stubbs  <ams@codesourcery.com>

gcc/
* config/gcn/gcn-valu.md (dpp_move<mode>): New.
(reduc_insn): Use 'U' and 'B' operand codes.
(reduc_<reduc_op>_scal_<mode>): Allow all types.
(reduc_<reduc_op>_scal_v64di): Delete.
(*<reduc_op>_dpp_shr_<mode>): Allow all 1reg types.
(*plus_carry_dpp_shr_v64si): Change to ...
(*plus_carry_dpp_shr_<mode>): ... this and allow all 1reg int types.
(mov_from_lane63_v64di): Change to ...
(mov_from_lane63_<mode>): ... this, and allow all 64-bit modes.
* config/gcn/gcn.c (gcn_expand_dpp_shr_insn): Increase buffer size.
Support UNSPEC_MOV_DPP_SHR output formats.
(gcn_expand_reduc_scalar): Add "use_moves" reductions.
Add "use_extends" reductions.
(print_operand_address): Add 'I' and 'U' codes.
* config/gcn/gcn.md (unspec): Add UNSPEC_MOV_DPP_SHR.

4 years agoFix testsuite regression due to recent IRA changes.
Jeff Law [Mon, 2 Mar 2020 15:44:28 +0000 (08:44 -0700)]
Fix testsuite regression due to recent IRA changes.

* gcc.target/arm/fuse-caller-save.c: Update expected output.

4 years agoFix changelog typo
Segher Boessenkool [Mon, 2 Mar 2020 13:24:20 +0000 (13:24 +0000)]
Fix changelog typo

4 years agolibstdc++: Add 'typename' to fix compilation with Clang
Jonathan Wakely [Mon, 2 Mar 2020 12:18:45 +0000 (12:18 +0000)]
libstdc++: Add 'typename' to fix compilation with Clang

* include/bits/ranges_algo.h (shift_right): Add 'typename' to
dependent type.

4 years agoUpdate comment to reflect optimization.
Martin Liska [Mon, 2 Mar 2020 12:11:56 +0000 (13:11 +0100)]
Update comment to reflect optimization.

* gcc.dg/vect/bb-slp-19.c: The comment
does not align with fact that we started
to SLP the testcase.

4 years agoRemove duplicate declaration.
Martin Liska [Mon, 2 Mar 2020 12:08:49 +0000 (13:08 +0100)]
Remove duplicate declaration.

* libgcov-interface.c: Remove duplicate
declaration of __gcov_flush_mx.

4 years agoFix a libiberty testsuite failure
Nick Clifton [Mon, 2 Mar 2020 11:50:34 +0000 (03:50 -0800)]
Fix a libiberty testsuite failure

* testsuite/demangle-expected: Update expected demangling of
enable_if pattern.

4 years agolto: Also copy .note.gnu.property section
H.J. Lu [Mon, 2 Mar 2020 11:08:57 +0000 (03:08 -0800)]
lto: Also copy .note.gnu.property section

When generating the separate file with LTO debug sections, we should
also copy .note.gnu.property section.

PR lto/93966
* simple-object.c (handle_lto_debug_sections): Also copy
.note.gnu.property section.

4 years agoFix typo in C++ standard version.
Martin Liska [Mon, 2 Mar 2020 10:05:02 +0000 (11:05 +0100)]
Fix typo in C++ standard version.

* lto-wrapper.c: Fix typo in comment about
C++ standard version.

4 years ago[testsuites] Update several scev/IVOPTs cases
Kewen Lin [Mon, 2 Mar 2020 09:36:30 +0000 (03:36 -0600)]
[testsuites] Update several scev/IVOPTs cases

Several scev/IVOPTs cases aim to check some array references are sceved and
later marked as REFERENCE ADDRESS IV groups. With IV group type dumping
improving, these check strings can be improved. Otherwise, they become fragile
with dumping changes.

This patch is to keep check strings concise, meanwhile recover the coverage of
case scev-8.c.

gcc/testsuite/ChangeLog

2020-03-02  Kewen Lin  <linkw@gcc.gnu.org>

  * gcc.dg/tree-ssa/scev-8.c: Revise check string.
  * gcc.dg/tree-ssa/scev-9.c: Ditto.
  * gcc.dg/tree-ssa/scev-10.c: Ditto.
  * gcc.dg/tree-ssa/scev-11.c: Ditto.
  * gcc.dg/tree-ssa/scev-12.c: Ditto.

4 years agoPR middle-end/92721 - checking ICE on attribute access redeclaration
Martin Sebor [Mon, 2 Mar 2020 00:58:45 +0000 (17:58 -0700)]
PR middle-end/92721 - checking ICE on attribute access redeclaration

gcc/c-family/ChangeLog:

PR c++/92721
* c-attribs.c (append_access_attrs): Correctly handle attribute.
(handle_access_attribute): Same.

gcc/ChangeLog:

PR c++/92721
* calls.c (init_attr_rdwr_indices): Correctly handle attribute.

gcc/testsuite/ChangeLog:

PR c++/92721
g++.dg/ext/attr-access.C: New test.

4 years agoPR middle-end/93926 - ICE on a built-in redeclaration returning an integer instead...
Martin Sebor [Mon, 2 Mar 2020 00:52:44 +0000 (17:52 -0700)]
PR middle-end/93926 - ICE on a built-in redeclaration returning an integer instead of a pointer

gcc/c/ChangeLog:

PR middle-end/93926
* c-decl.c (types_close_enough_to_match): New function.
(match_builtin_function_types):
(diagnose_mismatched_decls): Add missing inform call to a warning.

gcc/testsuite/ChangeLog:

PR middle-end/93926
* gcc.dg/Wbuiltin-declaration-mismatch-13.c: New test.

4 years agoPR c/93812 - ICE on redeclaration of an attribute format function without protoype
Martin Sebor [Mon, 2 Mar 2020 00:41:45 +0000 (17:41 -0700)]
PR c/93812 - ICE on redeclaration of an attribute format function without protoype

gcc/c/ChangeLog:

PR c/93812
* c-typeck.c (build_functype_attribute_variant): New function.
(composite_type): Call it.

gcc/testsuite/ChangeLog:

PR c/93812
* gcc.dg/format/proto.c: New test.

4 years agoPR middle-end/93829 - bogus -Wstringop-overflow on memcpy of a struct with a pointer...
Martin Sebor [Mon, 2 Mar 2020 00:35:49 +0000 (17:35 -0700)]
PR middle-end/93829 - bogus -Wstringop-overflow on memcpy of a struct with a pointer member from another with a long string

gcc/testsuite/ChangeLog:

PR middle-end/93829
* gcc.dg/Wstringop-overflow-32.c: New test.

gcc/ChangeLog:

PR middle-end/93829
* tree-ssa-strlen.c (count_nonzero_bytes): Set the size to that
  of a pointer in the outermost ADDR_EXPRs.

4 years agoDaily bump.
GCC Administrator [Mon, 2 Mar 2020 00:16:33 +0000 (00:16 +0000)]
Daily bump.

4 years agoFix test for pr68805.
Segher Boessenkool [Sun, 1 Mar 2020 18:17:30 +0000 (11:17 -0700)]
Fix test for pr68805.

PR testsuite/91797
* gcc.target/pwoerpc/pr68805.c: Update expected output.

4 years agoFix test for pr88233.
Segher Boessenkool [Sun, 1 Mar 2020 18:13:18 +0000 (11:13 -0700)]
Fix test for pr88233.

PR testsuite/91799
* gcc.target/powerpc/pr88233.c: Update expected output and
add target selector.

4 years agocoroutines: Test that we correctly use class data members.
Iain Sandoe [Sun, 23 Feb 2020 15:44:20 +0000 (15:44 +0000)]
coroutines: Test that we correctly use class data members.

Improve test coverage, NFC.

gcc/testsuite/ChangeLog:

2020-03-01 Iain Sandoe <iain@sandoe.co.uk>

* g++.dg/coroutines/torture/class-07-data-member.C: New test.

4 years agoPatch and ChangeLogs for PR92976
Paul Thomas [Sun, 1 Mar 2020 16:15:28 +0000 (16:15 +0000)]
Patch and ChangeLogs for PR92976

4 years agoChangeLogs for PR92959
Paul Thomas [Sun, 1 Mar 2020 16:08:32 +0000 (16:08 +0000)]
ChangeLogs for PR92959

4 years agoPatch for PR92959
Paul Thomas [Sun, 1 Mar 2020 16:04:38 +0000 (16:04 +0000)]
Patch for PR92959

4 years agoDarwin, libsanitizer: Adjust minimum supported Darwin version (PR93731).
Iain Sandoe [Sun, 1 Mar 2020 14:40:57 +0000 (14:40 +0000)]
Darwin, libsanitizer: Adjust minimum supported Darwin version (PR93731).

The current imported libsanitizer code produces kernel panics for
Darwin 11 (macOS 10.7) and is unsupported for earlier versions already.

It is not clear if the current sources are even intended to be supported
on Darwin 11, so this patch causes the default to be build without
sanitizers for Darwin <= 11.

2020-03-01  Iain Sandoe  <iain@sandoe.co.uk>

PR sanitizer/93731
* configure.tgt (x86_64-*-darwin*, i?86-*-darwin*): Enable by
default only for Darwin versions greater than 12 (macOS 10.8).

4 years ago[Darwin, libsanitizer] Default to no sanitizer for Darwin <= 10
Iain Sandoe [Fri, 7 Jun 2019 12:20:07 +0000 (13:20 +0100)]
[Darwin, libsanitizer] Default to no sanitizer for Darwin <= 10

Darwin10 is no longer supported upstream and will not build without
additional patches.

4 years agox32: Update baseline_symbols.txt
H.J. Lu [Sun, 1 Mar 2020 14:13:28 +0000 (06:13 -0800)]
x32: Update baseline_symbols.txt

* config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Updated.

4 years agoDaily bump.
GCC Administrator [Sun, 1 Mar 2020 00:16:37 +0000 (00:16 +0000)]
Daily bump.

4 years agocoroutines: Add a test for non-trivial await_resume return type.
Iain Sandoe [Sat, 29 Feb 2020 20:45:31 +0000 (20:45 +0000)]
coroutines: Add a test for non-trivial await_resume return type.

Improve test coverage.

gcc/testsuite/ChangeLog:

2020-02-29  Iain Sandoe  <iain@sandoe.co.uk>

* g++.dg/coroutines/coro1-ret-int-yield-int.h: Add templated
awaitable.
* g++.dg/coroutines/torture/co-await-15-return-non-triv.C: New test.

4 years agoMake STATIC_CHAIN_REGNUM a call used register.
Jeff Law [Sat, 29 Feb 2020 20:45:37 +0000 (13:45 -0700)]
Make STATIC_CHAIN_REGNUM a call used register.

* config/v850/v850.h (STATIC_CHAIN_REGNUM): Change to r19.
* config/v850/v850.c (v850_asm_trampoline_template): Update
accordingly.

4 years agoDisable gnat.dg/socket1.adb on hppa*-*-hpux*.
John David Anglin [Sat, 29 Feb 2020 20:36:49 +0000 (20:36 +0000)]
Disable gnat.dg/socket1.adb on hppa*-*-hpux*.

2020-02-29  John David Anglin  <danglin@gcc.gnu.org>

PR ada/91100
* gnat.dg/socket1.adb: Disable on hppa*-*-hpux*.

4 years agoFix/skip various tests for hppa*-*-hpux*.
John David Anglin [Sat, 29 Feb 2020 20:16:39 +0000 (20:16 +0000)]
Fix/skip various tests for hppa*-*-hpux*.

2020-02-29  John David Anglin  <danglin@gcc.gnu.org>

* g++.dg/pr90981.C: Skip on hppa*-*-hpux*.
* gcc.dg/gnu2x-attrs-1.c: Add dg-require-alias.
* gcc.dg/pr90756.c: Add -fno-common option on hppa*-*-hpux*.
* gcc.dg/torture/20190327-1.c: Likewise.
* gcc.dg/spellcheck-options-21.c: Skip on 32-bit hppa*-*-hpux*.
* gcc.dg/strlenopt-68.c: Skip on hppa*-*-hpux*.
* gcc.dg/torture/pr90020.c: Likewise.
* gcc.dg/ucnid-16-utf8.c: Add dg-require-iconv "latin1".

4 years agoXFAIL IPA tests that are not supported on 32-bit hppa*-*-hpux*.
John David Anglin [Sat, 29 Feb 2020 19:23:02 +0000 (19:23 +0000)]
XFAIL IPA tests that are not supported on 32-bit hppa*-*-hpux*.

2020-02-29  John David Anglin  <danglin@gcc.gnu.org>

PR ipa/92548
* gcc.dg/ipa/ipa-sra-12.c: xfail parameter split test on 32-bit
hppa*-*-hpux*.
* gcc.dg/ipa/ipa-sra-14.c: Likewise.
* gcc.dg/ipa/ipcp-agg-12.c: xfail adding extra caller test.

4 years agoSkip charset.cc tests on *-*-hpux*.
John David Anglin [Sat, 29 Feb 2020 18:28:40 +0000 (18:28 +0000)]
Skip charset.cc tests on *-*-hpux*.

2020-02-29  John David Anglin  <danglin@gcc.gnu.org>

* testsuite/17_intro/headers/c++1998/charset.cc: Skip on *-*-hpux*.
* testsuite/17_intro/headers/c++2011/charset.cc: Likewise.
* testsuite/17_intro/headers/c++2014/charset.cc: Likewise.
* testsuite/17_intro/headers/c++2017/charset.cc: Likewise.
* testsuite/17_intro/headers/c++2020/charset.cc: Likewise.

4 years agoExplicitly link with libatomic when needed.
John David Anglin [Sat, 29 Feb 2020 17:46:12 +0000 (17:46 +0000)]
Explicitly link with libatomic when needed.

2020-02-29  John David Anglin  <danglin@gcc.gnu.org>

* testsuite/30_threads/condition_variable_any/stop_token/wait_on.cc:
Add libatomic option.
* testsuite/30_threads/jthread/jthread.cc: Likewise.

4 years agolibstdc++ Hastable: Move std::is_permutation to limit includes
François Dumont [Thu, 27 Feb 2020 18:08:40 +0000 (19:08 +0100)]
libstdc++ Hastable: Move std::is_permutation to limit includes

Move std::is_permutation algorithm with associated helpers to stl_algobase.h
to remove stl_algo.h include from hashtable_policy.h and so reduce preprocess
size of unordered_map and unordered_set headers.

* include/bits/stl_algo.h
(__find_if, __count_if, __is_permutation, std::is_permutation): Move...
* include/bits/stl_algobase.h: ...here.
* include/bits/hashtable_policy.h: Remove <bits/stl_algo.h> include.

4 years agoExplicitly link with libatomic when needed.
John David Anglin [Sat, 29 Feb 2020 17:32:24 +0000 (17:32 +0000)]
Explicitly link with libatomic when needed.

2020-02-29  John David Anglin  <danglin@gcc.gnu.org>

* testsuite/30_threads/stop_token/stop_callback.cc: Add libatomic
option.
* testsuite/30_threads/stop_token/stop_callback/deadlock-mt.cc:
Likewise.
* testsuite/30_threads/stop_token/stop_callback/deadlock.cc: Likewise.
* testsuite/30_threads/stop_token/stop_callback/destroy.cc: Likewise.
* testsuite/30_threads/stop_token/stop_callback/invoke.cc: Likewise.
* testsuite/30_threads/stop_token/stop_source.cc: Likewise.
* testsuite/30_threads/stop_token/stop_source/assign.cc: Likewise.
* testsuite/30_threads/stop_token/stop_token.cc: Likewise.
* testsuite/30_threads/stop_token/stop_token/stop_possible.cc:
Likewise.

4 years agoFix typo in last entry.
John David Anglin [Sat, 29 Feb 2020 17:05:47 +0000 (17:05 +0000)]
Fix typo in last entry.

4 years agoAdd dg-require-visibility to tests that require visibility support.
John David Anglin [Sat, 29 Feb 2020 16:56:07 +0000 (16:56 +0000)]
Add dg-require-visibility to tests that require visibility support.

2020-02-29  John David Anglin  <danglin@gcc.gnu.org>

* /g++.dg/ext/visibility/ref-temp1.C: Require visibility.
* gfortran.dg/pr90988_4.f: Likewise.
* gfortran.dg/pr91372.f90: Likewise.

4 years agoFix baseline symbols on hppa-linux-gnu
John David Anglin [Sat, 29 Feb 2020 16:13:23 +0000 (16:13 +0000)]
Fix baseline symbols on hppa-linux-gnu

2020-02-29  John David Anglin  <danglin@gcc.gnu.org>

PR libstdc++/92906
* config/abi/post/hppa-linux-gnu/baseline_symbols.txt: Update.

4 years agoFix trivial regression from recent IRA changes
Jeff Law [Sat, 29 Feb 2020 16:01:46 +0000 (09:01 -0700)]
Fix trivial regression from recent IRA changes

* gcc.target/or1k/return-2.c: Update expected output.

4 years agoUpdate cpplib ru.po.
Joseph Myers [Sat, 29 Feb 2020 15:54:49 +0000 (15:54 +0000)]
Update cpplib ru.po.

* ru.po: Update.

4 years agoFix regression reported by tester due to recent IRA changes
Jeff Law [Sat, 29 Feb 2020 15:30:20 +0000 (08:30 -0700)]
Fix regression reported by tester due to recent IRA changes

* gcc.target/xstormy16/sfr/06_sfrw_to_var.c: Update expected output.

4 years agoc++: implement C++20 Disambiguating Nested-Requirements (P2092R0)
Jason Merrill [Fri, 28 Feb 2020 22:39:42 +0000 (17:39 -0500)]
c++: implement C++20 Disambiguating Nested-Requirements (P2092R0)

The rule change in the title matches GCC's current behavior, so no change
was needed.  But the paper also makes 'typename' optional in a
requirement-parameter-list, so this implements that.

gcc/cp/ChangeLog
2020-02-28  Jason Merrill  <jason@redhat.com>

Implement P2092R0, Disambiguating Nested-Requirements
* parser.c (cp_parser_requirement_parameter_list): Pass
CP_PARSER_FLAGS_TYPENAME_OPTIONAL.

4 years agoDaily bump.
GCC Administrator [Sat, 29 Feb 2020 00:16:37 +0000 (00:16 +0000)]
Daily bump.

4 years agolibstdc++: Fix bogus use of memcmp in ranges::lexicographical_compare (PR 93972)
Patrick Palka [Fri, 28 Feb 2020 19:16:06 +0000 (14:16 -0500)]
libstdc++: Fix bogus use of memcmp in ranges::lexicographical_compare (PR 93972)

We were enabling the memcmp optimization in ranges::lexicographical_compare for
signed integral types and for integral types wider than a byte.  But memcmp
gives the wrong answer for arrays of such types.  This patch fixes this issue by
refining the condition that enables the memcmp optimization.  It's now
consistent with the corresponding condition used in
std::lexicographical_compare.

libstdc++-v3/ChangeLog:

PR libstdc++/93972
* include/bits/ranges_algo.h (__lexicographical_compare_fn::operator()):
Fix condition for when to use memcmp, making it consistent with the
corresponding condition used in std::lexicographical_compare.
* testsuite/25_algorithms/lexicographical_compare/93972.cc: New test.

4 years agocoroutines: Update func-params-08.C to suspend three times.
Iain Sandoe [Fri, 28 Feb 2020 13:51:43 +0000 (13:51 +0000)]
coroutines: Update func-params-08.C to suspend three times.

The awaitable initially committed was returning "always ready"
which meant that the suspension code was not used.  Update
the test to suspend at each co_await, since this exercises more
of the infrastructure.

gcc/testsuite/ChangeLog:

2020-02-28  Iain Sandoe  <iain@sandoe.co.uk>

* g++.dg/coroutines/torture/func-params-08.C: Update
to suspend for each co_await operation.

4 years agoruntime: handle linux/arm64 signal register
eric fang [Fri, 21 Feb 2020 09:01:02 +0000 (09:01 +0000)]
runtime: handle linux/arm64 signal register

Set sigpc and implement dumpregs for linux/arm64.
Without this change, cmd/vet tool test will fail randomly.

Updates golang/go#20931

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/220543

4 years agolibstdc++: Update the <numeric> synopsis test to latest standard
Patrick Palka [Fri, 28 Feb 2020 17:43:14 +0000 (12:43 -0500)]
libstdc++: Update the <numeric> synopsis test to latest standard

Tested with

  make check RUNTESTFLAGS="conformance.exp=*numeric*synopsis* --target_board=unix/-std=$std"

for std in {c++98, c++11, c++17, c++2a}.

libstdc++-v3/ChangeLog:

* testsuite/26_numerics/headers/numeric/synopsis.cc: Add signatures for
functions introduced in C++11, C++17 and C++2a.  Add 'constexpr' to
existing signatures for C++2a.

4 years agoc++: Fix constrained conversion op.
Jason Merrill [Fri, 28 Feb 2020 18:43:55 +0000 (13:43 -0500)]
c++: Fix constrained conversion op.

We don't want to promote a conversion from viable == 0 to viable == -1.
Found in ranges-v3.

gcc/cp/ChangeLog
2020-02-28  Jason Merrill  <jason@redhat.com>

* call.c (build_user_type_conversion_1): Don't look at the second
conversion of a non-viable candidate.

4 years agolibstdc++: test for failing assertion should use 'run' not 'compile'
Jonathan Wakely [Fri, 28 Feb 2020 17:05:45 +0000 (17:05 +0000)]
libstdc++: test for failing assertion should use 'run' not 'compile'

And it only needs to define _GLIBCXX_ASSERTIONS not _GLIBCXX_DEBUG.

* testsuite/24_iterators/range_operations/advance_debug_neg.cc: Run
test instead of just compiling it.

4 years agoCommit for PR92785
Paul Thomas [Fri, 28 Feb 2020 18:30:57 +0000 (18:30 +0000)]
Commit for PR92785

4 years agoFix target/93937
Michael Meissner [Fri, 28 Feb 2020 18:28:45 +0000 (13:28 -0500)]
Fix target/93937

2020-02-28  Michael Meissner  <meissner@linux.ibm.com>

PR target/93937
* config/rs6000/vsx.md (vsx_extract_<mode>_<VS_scalar>mode_var):
Delete, the insn will never work.

4 years agolibstdc++: Also disable caching of reverse_view::begin() for common_ranges
Patrick Palka [Fri, 28 Feb 2020 15:47:26 +0000 (10:47 -0500)]
libstdc++: Also disable caching of reverse_view::begin() for common_ranges

When the underlying range models common_range, then reverse_view::begin() is
already O(1) without caching.  So we should disable the cache in this case too.

libstdc++-v3/ChangeLog:

* include/std/ranges (reverse_view::_S_needs_cached_begin): Set to false
whenever the underlying range models common_range.

4 years agoImprove detection of ld_date.
Martin Liska [Fri, 28 Feb 2020 16:52:57 +0000 (17:52 +0100)]
Improve detection of ld_date.

PR other/93965
* configure.ac: Improve detection of ld_date by requiring
either two dashes or none.
* configure: Regenerate.

4 years agoc++: Further tweak for P1937R2 - const{expr,eval} inconsistencies
Jakub Jelinek [Fri, 28 Feb 2020 16:35:32 +0000 (17:35 +0100)]
c++: Further tweak for P1937R2 - const{expr,eval} inconsistencies

Seems I've missed one thing, as the first hunk in
https://github.com/cplusplus/draft/commit/c8e68ed202b4a9260616bcee8a9768b5dca4bbca
changes the wording so that only potentially-evaluated id-expressions that
denote immediate functions must appear only in the specified contexts.
That IMO means that in unevaluated contexts there aren't such restrictions
anymore, so I think in unevaluated contexts one should be able to take the
address of an immediate function.

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

P1937R2 - Fixing inconsistencies between const{expr,eval} functions
* typeck.c (cp_build_addr_expr_1): Allow taking address of immediate
functions in unevaluated contexts.

* g++.dg/cpp2a/consteval3.C: Change dg-error about taking address of
immediate function in unevaluated contexts into dg-bogus.
* g++.dg/cpp2a/consteval16.C: New test.

4 years agoOne more patch for PR93564: Prefer smaller hard regno when we do not honor reg alloc...
Vladimir N. Makarov [Fri, 28 Feb 2020 16:27:30 +0000 (11:27 -0500)]
One more patch for PR93564: Prefer smaller hard regno when we do not honor reg alloc order.

2020-02-28  Vladimir Makarov  <vmakarov@redhat.com>

PR rtl-optimization/93564
* ira-color.c (assign_hard_reg): Prefer smaller hard regno when we
do not honor reg alloc order.

4 years agoFix misleading aarch64 mcpu/march warning string
Joel Hutton [Fri, 28 Feb 2020 14:46:26 +0000 (14:46 +0000)]
Fix misleading aarch64 mcpu/march warning string

The message for conflicting mcpu and march previously printed the
architecture of the CPU instead of the CPU name, as well as omitting the
extensions to the march string. This patch corrects both errors. This
patch fixes PR target/87612.

2020-02-27  Joel Hutton  <Joel.Hutton@arm.com>

        PR target/87612
        * config/aarch64/aarch64.c (aarch64_override_options): Fix
        misleading warning string.

4 years agolibstdc++: Memoize {drop,drop_while,filter,reverse}_view::begin
Patrick Palka [Tue, 11 Feb 2020 22:14:22 +0000 (17:14 -0500)]
libstdc++: Memoize {drop,drop_while,filter,reverse}_view::begin

This patch adds memoization to these four views so that their begin() has the
required amortized constant time complexity.

The cache is enabled only for forward_ranges and above because we need the
underlying iterator to be copyable and multi-pass in order for the cache to be
usable.  In the general case we represent the cached result of begin() as a bare
iterator.  This takes advantage of the fact that value-initialized forward
iterators can be compared to as per N3644, so we can use a value-initialized
iterator to denote the "empty" state of the cache.

As a special case, when the underlying range models random_access_range and when
it's profitable size-wise, then we cache the offset of the iterator from the
beginning of the range instead of caching the iterator itself.

Additionally, in drop_view and reverse_view we disable the cache when the
underlying range models random_access_range, because in these cases recomputing
begin() takes O(1) time anyway.

libstdc++-v3/ChangeLog:

* include/std/ranges (__detail::_CachedPosition): New struct.
(views::filter_view::_S_needs_cached_begin): New member variable.
(views::filter_view::_M_cached_begin): New member variable.
(views::filter_view::begin): Use _M_cached_begin to cache its
result.
(views::drop_view::_S_needs_cached_begin): New static member variable.
(views::drop_view::_M_cached_begin): New member variable.
(views::drop_view::begin): Use _M_cached_begin to cache its result
when _S_needs_cached_begin.
(views::drop_while_view::_M_cached_begin): New member variable.
(views::drop_while_view::begin): Use _M_cached_begin to cache its
result.
(views::reverse_view::_S_needs_cached_begin): New static member
variable.
(views::reverse_view::_M_cached_begin): New member variable.
(views::reverse_view::begin): Use _M_cached_begin to cache its result
when _S_needs_cached_begin.
* testsuite/std/ranges/adaptors/drop.cc: Augment test to check that
drop_view::begin caches its result.
* testsuite/std/ranges/adaptors/drop_while.cc: Augment test to check
that drop_while_view::begin caches its result.
* testsuite/std/ranges/adaptors/filter.cc: Augment test to check that
filter_view::begin caches its result.
* testsuite/std/ranges/adaptors/reverse.cc: Augment test to check that
reverse_view::begin caches its result.

4 years agolibstdc++: Fix FS-dependent filesystem tests
Jonathan Wakely [Thu, 27 Feb 2020 16:38:00 +0000 (16:38 +0000)]
libstdc++: Fix FS-dependent filesystem tests

These tests were failing on XFS because it doesn't support setting file
timestamps past 2038, so the expected overflow when reading back a huge
timestamp into a file_time_type didn't happen.

Additionally, the std::filesystem::file_time_type::clock has an
epoch that is out of range of 32-bit time_t so testing times around that
epoch may also fail.

This fixes the tests to give up gracefully if the filesystem doesn't
support times that can't be represented in 32-bit time_t.

* testsuite/27_io/filesystem/operations/last_write_time.cc: Fixes for
filesystems that silently truncate timestamps.
* testsuite/experimental/filesystem/operations/last_write_time.cc:
Likewise.

4 years agolibstdc++: Fix failing test in debug mode
Jonathan Wakely [Thu, 27 Feb 2020 17:22:50 +0000 (17:22 +0000)]
libstdc++: Fix failing test in debug mode

This fixes a failure due to a (correct) warning seen when testing with
-D_GLIBCXX_USE_CXX11_ABI=0 -D_GLIBCXX_ASSERTIONS:

include/bits/char_traits.h:365: warning: 'void* __builtin_memcpy(void*, const void*, long unsigned int)'
specified bound 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Wstringop-overflow=]

FAIL: 21_strings/basic_string/cons/char/1.cc (test for excess errors)

* testsuite/21_strings/basic_string/cons/char/1.cc: Disable
-Wstringop-overflow warnings.

4 years agoAdd myself to MAINTAINERS
Joel Hutton [Fri, 28 Feb 2020 11:06:05 +0000 (11:06 +0000)]
Add myself to MAINTAINERS

2020-02-28  Joel Hutton  <joel.hutton@arm.com>

* MAINTAINERS (Write After Approval) : Add myself.