gcc.git
4 years agoTest global identifiers against what is specified interfaces.
Thomas Koenig [Sun, 5 Jul 2020 18:11:35 +0000 (20:11 +0200)]
Test global identifiers against what is specified interfaces.

Apart from calling gfc_compare_interfaces to check interfaces against
global identifiers, this also sets and check a few sym->error flags
to avoid duplicate error messages.  I thought about issuing errors
on mismatched interfaces, but when the procedure is not invoked,
a warning should be enough to alert the user.

gcc/fortran/ChangeLog:

PR fortran/27318
* frontend-passes.c (check_against_globals): New function.
(gfc_check_externals): Split; also invoke check_against_globals
via gfc_traverse_ns.
(gfc_check_externals0): Recursive part formerly in
gfc_check_externals.
* resolve.c (resolve_global_procedure): Set sym->error on
interface mismatch.
* symbol.c (ambiguous_symbol): Check for, and set sym->error.

gcc/testsuite/ChangeLog:

PR fortran/27318
* gfortran.dg/error_recovery_1.f90: Adjust test case.
* gfortran.dg/use_15.f90: Likewise.
* gfortran.dg/interface_47.f90: New test.

4 years agoDaily bump.
GCC Administrator [Sun, 5 Jul 2020 00:16:21 +0000 (00:16 +0000)]
Daily bump.

4 years agocoroutines, testsuite: Rename a test, NFC.
Iain Sandoe [Sat, 4 Jul 2020 18:01:03 +0000 (19:01 +0100)]
coroutines, testsuite: Rename a test, NFC.

The test was committed with a placeholder name, this
renames it as described in the PR.

gcc/testsuite/ChangeLog:

* g++.dg/coroutines/pr9xxxx-mismatched-traits-and-promise-prev.C: Moved to...
* g++.dg/coroutines/pr94760-mismatched-traits-and-promise-prev.C: ...here.

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

4 years agoExtend store merging to STRING_CST
Eric Botcazou [Fri, 3 Jul 2020 16:10:25 +0000 (18:10 +0200)]
Extend store merging to STRING_CST

The GIMPLE store merging pass doesn't merge STRING_CSTs in the general
case, although they are accepted by native_encode_expr; the reason is
that the pass only works with integral modes, i.e. with chunks whose
size is a power of two.

There are two possible ways of extending it to handle STRING_CSTs:
1) lift the condition of integral modes and treat STRING_CSTs as
other _CST nodes but with arbitrary size; 2) implement a specific
and separate handling for STRING_CSTs.

The attached patch implements 2) for the following reasons: on the
one hand, even in Ada where character strings are first-class citizens,
cases where merging STRING_CSTs with other *_CST nodes would be possible
are quite rare in practice; on the other hand, string concatenations
happen more naturally and frequently thanks to the "&" operator, giving
rise to merging opportunities.

gcc/ChangeLog:
* gimple-fold.c (gimple_fold_builtin_memory_op): Fold calls that
were initially created for the assignment of a variable-sized
object and whose source is now a string constant.
* gimple-ssa-store-merging.c (struct merged_store_group): Document
STRING_CST for rhs_code field.
Add string_concatenation boolean field.
(merged_store_group::merged_store_group): Initialize it as well as
bit_insertion here.
(merged_store_group::do_merge): Set it upon seeing a STRING_CST.
Also set bit_insertion here upon seeing a BIT_INSERT_EXPR.
(merged_store_group::apply_stores): Clear it for small regions.
Do not create a power-of-2-sized buffer if it is still true.
And do not set bit_insertion here again.
(encode_tree_to_bitpos): Deal with BLKmode for the expression.
(merged_store_group::can_be_merged_into): Deal with STRING_CST.
(imm_store_chain_info::coalesce_immediate_stores): Set bit_insertion
to true after changing MEM_REF stores into BIT_INSERT_EXPR stores.
(count_multiple_uses): Return 0 for STRING_CST.
(split_group): Do not split the group for a string concatenation.
(imm_store_chain_info::output_merged_store): Constify and rename
some local variables.  Build an array type as destination type
for a string concatenation, as well as a zero mask, and call
build_string to build the source.
(lhs_valid_for_store_merging_p): Return true for VIEW_CONVERT_EXPR.
(pass_store_merging::process_store): Accept STRING_CST on the RHS.
* gimple.h (gimple_call_alloca_for_var_p): New accessor function.
* gimplify.c (gimplify_modify_expr_to_memcpy): Set alloca_for_var.
* tree.h (CALL_ALLOCA_FOR_VAR_P): Document it for BUILT_IN_MEMCPY.

gcc/testsuite/ChangeLog:
* gnat.dg/opt87.adb: New test.
* gnat.dg/opt87_pkg.ads: New helper.
* gnat.dg/opt87_pkg.adb: Likewise.

4 years agoipa-sra: Avoid transitive splits with type mismatches (PR 96040)
Martin Jambor [Fri, 3 Jul 2020 15:37:33 +0000 (17:37 +0200)]
ipa-sra: Avoid transitive splits with type mismatches (PR 96040)

PR 96040 revealed IPA-SRA, when checking whether an intended split is
the same as the one in a called function does not also check if the
types match and the transformation code does not handle any resulting
type mismatches.  This patch simply avoids the the split in the case
of mismatches, so that we do not have to be careful about invalid
floating-point values being passed in floating point registers and
related issues.

gcc/ChangeLog:

2020-07-03  Martin Jambor  <mjambor@suse.cz>

PR ipa/96040
* ipa-sra.c (all_callee_accesses_present_p): Do not accept type
mismatched accesses.

gcc/testsuite/ChangeLog:

2020-07-03  Martin Jambor  <mjambor@suse.cz>

PR ipa/96040
* gcc.dg/ipa/pr96040.c: New test.

4 years ago[OpenACC] Revert always-copyfrom behavior for 'GOMP_MAP_FORCE_FROM' in 'libgomp/oacc...
Thomas Schwinge [Thu, 14 May 2020 18:48:10 +0000 (20:48 +0200)]
[OpenACC] Revert always-copyfrom behavior for 'GOMP_MAP_FORCE_FROM' in 'libgomp/oacc-mem.c:goacc_exit_data_internal'

As done for 'GOMP_MAP_FROM', also for 'GOMP_MAP_FORCE_FROM' we should only
'gomp_copy_dev2host' if 'n->refcount == 0'.

This had gotten altered in commit 378da98fcc907d05002bcd3d6ff7951f0cf485e5
(r279621) "OpenACC reference count overhaul".

libgomp/
* oacc-mem.c (goacc_exit_data_internal): Revert always-copyfrom
behavior for 'GOMP_MAP_FORCE_FROM'.
* testsuite/libgomp.oacc-c-c++-common/pr92843-1.c: Adjust XFAIL.

4 years ago[OpenACC] Remove (unused) 'GOMP_MAP_ALWAYS_FROM' handling from 'libgomp/oacc-mem...
Thomas Schwinge [Thu, 14 May 2020 17:17:32 +0000 (19:17 +0200)]
[OpenACC] Remove (unused) 'GOMP_MAP_ALWAYS_FROM' handling from 'libgomp/oacc-mem.c:goacc_exit_data_internal'

This had gotten added in commit 378da98fcc907d05002bcd3d6ff7951f0cf485e5
(r279621) "OpenACC reference count overhaul", but it doesn't have any use in
OpenACC.

libgomp/
* oacc-mem.c (goacc_exit_data_internal): Remove
'GOMP_MAP_ALWAYS_FROM' handling.

4 years ago[PATCH] nvptx: Add support for popcount and widening multiply instructions
Roger Sayle [Fri, 3 Jul 2020 11:56:29 +0000 (12:56 +0100)]
[PATCH] nvptx: Add support for popcount and widening multiply instructions

2020-07-01  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog:
* config/nvptx/nvptx.md (popcount<mode>2): New instructions.
(mulhishi3, mulsidi3, umulhisi3, umulsidi3): New instructions.

gcc/testsuite/ChangeLog:
* gcc.target/nvptx/popc-1.c: New test.
* gcc.target/nvptx/popc-2.c: New test.
* gcc.target/nvptx/popc-3.c: New test.
* gcc.target/nvptx/mul-wide.c: New test.
* gcc.target/nvptx/umul-wide.c: New test.

4 years agogcov-dump: fix build for i386
Martin Liska [Fri, 3 Jul 2020 11:45:45 +0000 (13:45 +0200)]
gcov-dump: fix build for i386

gcc/ChangeLog:

PR bootstrap/96046
* gcov-dump.c (tag_function): Use gcov_position_t
type.

Co-Authored-By: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
4 years agotree-optimization/96037 - fix uninitialized use of slp_op
Richard Biener [Fri, 3 Jul 2020 10:50:37 +0000 (12:50 +0200)]
tree-optimization/96037 - fix uninitialized use of slp_op

The following avoids leaving slp_def as passed to vect_is_simple_use
by reference uninitialized.

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

PR tree-optimization/96037
* tree-vect-stmts.c (vect_is_simple_use): Initialize *slp_def.

4 years agofix scalar BB vectorization costing
Richard Biener [Fri, 3 Jul 2020 09:28:53 +0000 (11:28 +0200)]
fix scalar BB vectorization costing

We were costing the scalar pattern stmts rather than the scalar
original stmt and also not appropriately looking at the pattern
stmt for whether the stmt is vectorized.

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

* tree-vect-slp.c (vect_bb_slp_scalar_cost): Cost the
original non-pattern stmts, look at the pattern stmt
vectorization status.

* gcc.dg/vect/costmodel/x86_64/costmodel-vect-slp-2.c: New
testcase.

4 years agoamdgcn: Add fold_left_plus vector reductions
Andrew Stubbs [Mon, 10 Feb 2020 13:23:29 +0000 (13:23 +0000)]
amdgcn: Add fold_left_plus vector reductions

These aren't real in-order instructions, because the ISA can't do that
quickly, but a means to allow regular out-of-order reductions when that's
good enough, but the middle-end doesn't know so.

gcc/
* config/gcn/gcn-valu.md (fold_left_plus_<mode>): New.

4 years agorefactor SLP constant insertion and provde entry insert helper
Richard Biener [Fri, 3 Jul 2020 08:09:39 +0000 (10:09 +0200)]
refactor SLP constant insertion and provde entry insert helper

This provides helpers to insert stmts on region entry abstracted
from loop/basic-block split out from vec_init_vector and used
from the SLP constant code generation path.  The SLP constant
code generation path is also changed to avoid needless SSA
copying since we can store VECTOR_CSTs directly in the vectorized
defs array, improving the IL from the vectorizer.

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

* tree-vectorizer.h (vec_info::insert_on_entry): New.
(vec_info::insert_seq_on_entry): Likewise.
* tree-vectorizer.c (vec_info::insert_on_entry): Implement.
(vec_info::insert_seq_on_entry): Likewise.
* tree-vect-stmts.c (vect_init_vector_1): Use
vec_info::insert_on_entry.
(vect_finish_stmt_generation): Set modified bit after
adjusting VUSE.
* tree-vect-slp.c (vect_create_constant_vectors): Simplify
by using vec_info::insert_seq_on_entry and bypassing
vec_init_vector.
(vect_schedule_slp_instance): Deal with all-constant
children later.

4 years agonvptx: Fix ICE in nvptx_vector_alignment on gcc.dg/attr-vector_size.c
Roger Sayle [Fri, 3 Jul 2020 08:57:39 +0000 (10:57 +0200)]
nvptx: Fix ICE in nvptx_vector_alignment on gcc.dg/attr-vector_size.c

This patch addresses the ICE in gcc.dg/attr-vector_size.c during
make -k check on nvptx-none.  The actual ICE looks like:

testsuite/gcc.dg/attr-vector_size.c:29:1: internal compiler error: \
  in tree_to_shwi, at tree.c:7321
0xf53bf2 tree_to_shwi(tree_node const*)
../../gcc/gcc/tree.c:7321
0xff1969 nvptx_vector_alignment
../../gcc/gcc/config/nvptx/nvptx.c:5105^M

The problem is that the caller has ensured that TYPE_SIZE(type) is
representable as an unsigned HOST_WIDE_INT, but nvptx_vector_alignment is
accessing it as a signed HOST_WIDE_INT which overflows in pathological
conditions.  Amongst those pathological conditions is that a TYPE_SIZE of
zero can sometimes reach this function, prior to an error being emitted.
Making sure the result is not less than the mode's alignment and not greater
than BIGGEST_ALIGNMENT fixes the ICEs, and generates the expected
compile-time error messages.

Tested on --target=nvptx-none, with a "make" and "make check" which results
in four fewer unexpected failures and three more expected passes.

2020-07-03  Roger Sayle  <roger@nextmovesoftware.com>
    Tom de Vries  <tdevries@suse.de>

gcc/ChangeLog:

PR target/90932
* config/nvptx/nvptx.c (nvptx_vector_alignment): Use tree_to_uhwi
to access TYPE_SIZE (type).  Return at least the mode's alignment.

4 years agotestsuite: Properly quote dejagnu negative line numbers
David Edelsohn [Thu, 2 Jul 2020 19:44:35 +0000 (15:44 -0400)]
testsuite: Properly quote dejagnu negative line numbers

Some testcases specifically test for negative line numbers. Those tests with
bare line numbers may be parsed incorrectly by Tcl/Expect as invalid options.
This patch encloses the negative numbers in braces so that they are
recognized as an optional parameter.

gcc/testsuite/ChangeLog

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

* gcc.dg/fixits-pr84852-1.c: Enclose negative line number in braces.
* gcc.dg/fixits-pr84852-2.c: Same.
* gcc.dg/pr89410-1.c: Same.
* gcc.dg/pr89410-2.c: Same.

4 years agoDaily bump.
GCC Administrator [Fri, 3 Jul 2020 00:16:25 +0000 (00:16 +0000)]
Daily bump.

4 years agotestsuite: Solaris reports warning on line 5.
David Edelsohn [Thu, 2 Jul 2020 21:12:48 +0000 (17:12 -0400)]
testsuite: Solaris reports warning on line 5.

gcc/testsuite/ChangeLog

2020-06-02  David Edelsohn  <dje.gcc@gmail.com>

* gfortran.dg/pr95690.f90: Solaris error appears on line 5.

4 years agolibstdc++: Require c++98_only effective target for a test
Jonathan Wakely [Thu, 2 Jul 2020 20:27:12 +0000 (21:27 +0100)]
libstdc++: Require c++98_only effective target for a test

This test checks a conversion which only exists in C++98 and won't
compile since C++11. It uses { dg-options "-std=gnu++98" } so that it is
explicitly run in C++98 mode. This change also adds a target selector so
that the test will be skipped if the dg-options directive is filtered
out or overridden.

libstdc++-v3/ChangeLog:

* testsuite/27_io/basic_ios/conv/voidptr.cc: Add c++98_only
target selector.

4 years agolibstdc++: Require c++98_only effective target for some tests
Jonathan Wakely [Thu, 2 Jul 2020 20:27:12 +0000 (21:27 +0100)]
libstdc++: Require c++98_only effective target for some tests

These tests verify that including C++11 headers fails to compile in
C++98 mode. They use { dg-options "-std=gnu++98" } so that they are
explicitly run in C++98 mode. This change also adds a target selector so
that the tests will be skipped even if the dg-options directive is
filtered out or overridden. This is in preparation for a desired future
change where tests do not use -std options, so that they can be tested
with e.g. --target_board=unix\"{-std=gnu++17,-std=gnu++20}\"

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

libstdc++-v3/ChangeLog:

* testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc: Add
c++98_only target selector.
* testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc:
Likewise.
* testsuite/18_support/headers/cstdint/std_c++0x_neg.cc:
Likewise.
* testsuite/18_support/headers/new/synopsis_cxx98.cc: Likewise.
* testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc:
Likewise.
* testsuite/20_util/headers/type_traits/std_c++0x_neg.cc:
Likewise.
* testsuite/23_containers/headers/array/std_c++0x_neg.cc:
Likewise.
* testsuite/23_containers/headers/tuple/std_c++0x_neg.cc:
Likewise.
* testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc:
Likewise.
* testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc:
Likewise.
* testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc:
Likewise.
* testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc:
Likewise.
* testsuite/26_numerics/headers/cmath/c99_classification_macros_c++98.cc:
Likewise.
* testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc:
Likewise.
* testsuite/26_numerics/headers/random/std_c++0x_neg.cc:
Likewise.
* testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc: Likewise.
* testsuite/28_regex/headers/regex/std_c++0x_neg.cc: Likewise.
* testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc:
Likewise.
* testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc:
Likewise.
* testsuite/30_threads/headers/future/std_c++0x_neg.cc:
Likewise.
* testsuite/30_threads/headers/mutex/std_c++0x_neg.cc: Likewise.
* testsuite/30_threads/headers/thread/std_c++0x_neg.cc:
Likewise.

4 years agotestsuite: ignore function not inlinable warning.
David Edelsohn [Wed, 1 Jul 2020 22:59:39 +0000 (18:59 -0400)]
testsuite: ignore function not inlinable warning.

gcc/testsuite/ChangeLog

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

* gcc.dg/pr26570.c: dg-prune function not inlinable warning.

4 years agoPR libstdc++/91807
Ville Voutilainen [Thu, 2 Jul 2020 19:16:39 +0000 (22:16 +0300)]
PR libstdc++/91807

PR libstdc++/91807
* include/std/variant
(_Copy_assign_base::operator=(const _Copy_assign_base&):
Do the move-assignment from a temporary so that the temporary
is constructed with an explicit index.
* testsuite/20_util/variant/91807.cc: New.

4 years agoPR fortran/93423 - ICE on invalid with argument list for module procedure
Harald Anlauf [Thu, 2 Jul 2020 18:48:16 +0000 (20:48 +0200)]
PR fortran/93423 - ICE on invalid with argument list for module procedure

When recovering from an error, a NULL pointer dereference could occur.
Check for that situation and punt.

gcc/fortran/
PR fortran/93423
* resolve.c (resolve_symbol): Avoid NULL pointer dereference.

4 years agoPR fortran/93337 - ICE in gfc_dt_upper_string, at fortran/module.c:441
Harald Anlauf [Thu, 2 Jul 2020 18:41:51 +0000 (20:41 +0200)]
PR fortran/93337 - ICE in gfc_dt_upper_string, at fortran/module.c:441

When declaring a polymorphic variable that is not a dummy, allocatable or
pointer, an ICE occurred due to a NULL pointer dereference.  Check for
that situation and punt.

gcc/fortran/
PR fortran/93337
* class.c (gfc_find_derived_vtab): Punt if name is not set.

4 years agolibstdc++: Fix atomic<long double> tests (PR 91153, PR 93224)
Jonathan Wakely [Thu, 2 Jul 2020 17:11:10 +0000 (17:11 +0000)]
libstdc++: Fix atomic<long double> tests (PR 91153, PR 93224)

These tests fail with AIX double double. Use different floating point
values that behave less surprisingly.

libstdc++-v3/ChangeLog:

PR libstdc++/91153
PR target/93224
* testsuite/29_atomics/atomic_float/1.cc: Use different values
for tests.
* testsuite/29_atomics/atomic_ref/float.cc: Likewise.

4 years agoc++: Support C++20 virtual consteval functions. [PR88335]
Jason Merrill [Thu, 25 Jun 2020 00:46:09 +0000 (20:46 -0400)]
c++: Support C++20 virtual consteval functions. [PR88335]

Jakub's partial implementation of consteval virtual had trouble with the
current ABI requirement that we omit the vtable slot for a consteval virtual
function; it's difficult to use the normal code for constant evaluation and
also magically make the slots disappear if the vtables get written out.  I
notice that Clang trunk also doesn't implement that requirement, and it
seems unnecessary to me; I expect consteval virtual functions to be
extremely rare, so it should be fine to just give them a vtable slot as
normal but put zero in it if the vtable gets emitted.  I've commented as
much to the ABI committee.

One of Jakub's testcases points out that we weren't handling thunks in
our constexpr virtual handling; that is fixed here as well.

Incidentally, being able to use C++11 range-for definitely simplified
clear_consteval_vfns.

gcc/c-family/ChangeLog:

* c-cppbuiltin.c (c_cpp_builtins): Define __cpp_consteval.

gcc/cp/ChangeLog:

* decl.c (grokfndecl): Allow consteval virtual.
* search.c (check_final_overrider): Check consteval mismatch.
* constexpr.c (cxx_eval_thunk_call): New.
(cxx_eval_call_expression): Call it.
* cvt.c (cp_get_fndecl_from_callee): Handle FDESC_EXPR.
* decl2.c (mark_vtable_entries): Track vtables with consteval.
(maybe_emit_vtables): Pass consteval_vtables through.
(clear_consteval_vfns): Replace consteval with nullptr.
(c_parse_final_cleanups): Call it.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/consteval-virtual1.C: New test.
* g++.dg/cpp2a/consteval-virtual2.C: New test.
* g++.dg/cpp2a/consteval-virtual3.C: New test.
* g++.dg/cpp2a/consteval-virtual4.C: New test.
* g++.dg/cpp2a/consteval-virtual5.C: New test.

Co-authored-by: Jakub Jelinek <jakub@redhat.com>
4 years agotree-optimization/96028 - fix bogus externalizing of SLP node
Richard Biener [Thu, 2 Jul 2020 09:45:06 +0000 (11:45 +0200)]
tree-optimization/96028 - fix bogus externalizing of SLP node

This guards externalizing a SLP node when it fails to code generate
to actually have scalar defs we can use.  It also makes failure
to do so not fell the whole SLP instance but instead try this again
on the parent.

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

PR tree-optimization/96028
* tree-vect-slp.c (vect_slp_convert_to_external): Make sure
we have scalar stmts to use.
(vect_slp_analyze_node_operations): When analyzing a child
failed try externalizing the parent node.

4 years agoipa-sra: Prevent constructing debug info from wrong argument
Martin Jambor [Thu, 2 Jul 2020 12:30:50 +0000 (14:30 +0200)]
ipa-sra: Prevent constructing debug info from wrong argument

The mechanism generating debug info for removed parameters did not
adjust index of the argument in the call statement to take into
account extra arguments IPA-SRA might have produced when splitting a
strucutre.  This patch addresses that omission and stops gdb from
showing incorrect value for the removed parameter and says "value
optimized out" instead.  The guality testcase will end up as
UNSUPPORTED in the results which is how Richi told me on IRC we deal
with this.

It is possible to generate debug info to actually show the value of
the removed parameter but so far my approaches to do just that seem
toocontroversial
(https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546705.html), so
before I come up with something better I'd like to push this to master
and the gcc-10 branch in time for the GCC 10.2 release.

gcc/ChangeLog:

2020-07-01  Martin Jambor  <mjambor@suse.cz>

PR debug/95343
* ipa-param-manipulation.c (ipa_param_adjustments::modify_call): Adjust
argument index if necessary.

gcc/testsuite/ChangeLog:

2020-07-01  Martin Jambor  <mjambor@suse.cz>

PR debug/95343
* gcc.dg/guality/pr95343.c: New test.

4 years agoVEC_COND_EXPR: do not expand comparisons feeding it
Martin Liska [Tue, 30 Jun 2020 06:57:27 +0000 (08:57 +0200)]
VEC_COND_EXPR: do not expand comparisons feeding it

gcc/ChangeLog:

PR middle-end/95830
* tree-vect-generic.c (expand_vector_condition): Forward declaration.
(expand_vector_comparison): Do not expand a comparison if all
uses are consumed by a VEC_COND_EXPR.
(expand_vector_operation): Change void return type to bool.
(expand_vector_operations_1): Pass dce_ssa_names.

4 years agoRedefine NULL to nullptr
Ilya Leoshkevich [Mon, 29 Jun 2020 18:36:03 +0000 (20:36 +0200)]
Redefine NULL to nullptr

Bootstrap with musl libc fails with numerous "missing sentinel in
function call" errors.  This is because musl defines NULL as 0L for C++,
but gcc requires sentinel value to be a pointer or __null.

Jonathan Wakely says:

    To be really safe during stage 1, GCC should not use NULL as a
    pointer sentinel in C++ code anyway.

    The bootstrap compiler could define it to 0 or 0u, neither of which
    is guaranteed to be OK to pass as a varargs sentinel where a null
    pointer is expected.  Any of (void*)0 or (void*)NULL or nullptr
    would be safe.

While it is possible to fix this by replacing NULL sentinels with
nullptrs, such approach would generate backporting conflicts, therefore
simply redefine NULL to nullptr at the end of system.h, where it would
not confuse system headers.

gcc/ChangeLog:

2020-06-30  Ilya Leoshkevich  <iii@linux.ibm.com>

PR bootstrap/95700
* system.h (NULL): Redefine to nullptr.

4 years agoFortran : portability fix for PR52279
Mark Eggleston [Thu, 2 Jul 2020 07:54:10 +0000 (08:54 +0100)]
Fortran  : portability fix for PR52279

Use of _() to enclose string literals assigned to arrays is not
portable.  Use pointer instead.

2020-07-02  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/fortran/

PR fortran/52279
* check.c (gfc_invalid_boz):  Change array declaration for
hint into a pointer.

4 years agotree-cfg: Fix ICE with switch stmt to unreachable opt and forced labels [PR95857]
Jakub Jelinek [Thu, 2 Jul 2020 09:38:20 +0000 (11:38 +0200)]
tree-cfg: Fix ICE with switch stmt to unreachable opt and forced labels [PR95857]

The following testcase ICEs, because during the cfg cleanup, we see:
  switch (i$e_11) <default: <L12> [33.33%], case -3: <lab2> [33.33%], case 0: <L10> [33.33%], case 2: <lab2> [33.33%]>
...
lab2:
  __builtin_unreachable ();
where lab2 is FORCED_LABEL.  The way it works, we go through the case labels
and when we reach the first one that points to gimple_seq_unreachable*
basic block, we remove the edge (if any) from the switch bb to the bb
containing the label and bbs reachable only through that edge we've just
removed.  Once we do that, we must throw away all other cases that use
the same label (or some other labels from the same bb we've removed the edge
to and the bb).  To avoid quadratic behavior, this is not done by walking
all remaining cases immediately before removing, but only when processing
them later.
For normal labels this works, fine, if the label is in a deleted bb, it will
have NULL label_to_block and we handle that case, or, if the unreachable bb
has some other edge to it, only the edge will be removed and not the bb,
and again, find_edge will not find the edge and we only remove the case.
And if a label would be to some other block, that other block wouldn't have
been removed earlier because there would be still an edge from the switch
block.
Now, FORCED_LABEL (and I think DECL_NONLOCAL too) break this, because
those labels aren't removed, but instead moved to some surrounding basic
block.  So, when we later process those, when their gimple_seq_unreachable*
basic block is removed, label_to_block will return some unrelated block
(in the testcase the switch bb), so we decide to keep the case which doesn't
seem to be unreachable, but we don't really have an edge from the switch
block to the block the label got moved to.

I thought first about punting in gimple_seq_unreachable* on
FORCED_LABEL/DECL_NONLOCAL labels, but that might penalize even code that
doesn't care, so this instead just makes sure that for
FORCED_LABEL/DECL_NONLOCAL labels that are being removed (and thus moved
randomly) we remember in a hash_set the fact that those labels should be
treated as removed for the purpose of the optimization, and later on
handle those labels that way.

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

PR tree-optimization/95857
* tree-cfg.c (group_case_labels_stmt): When removing an unreachable
base_bb, remember all forced and non-local labels on it and later
treat those as if they have NULL label_to_block.  Formatting fix.
Fix a comment typo.

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

4 years agotree-optimization/96022 - fix ICE with vectorized shift
Richard Biener [Thu, 2 Jul 2020 09:12:51 +0000 (11:12 +0200)]
tree-optimization/96022 - fix ICE with vectorized shift

This fixes lane extraction for internal def vectorized shifts
with an effective scalar shift operand by always using lane zero
of the first vector stmt.

It also fixes a SLP build issue noticed on the testcase where
we end up building unary vector ops with the only operand built
form scalars which isn't profitable by itself.  The exception
is for stores.

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

PR tree-optimization/96022
* tree-vect-stmts.c (vectorizable_shift): Only use the
first vector stmt when extracting the scalar shift amount.
* tree-vect-slp.c (vect_build_slp_tree_2): Also build unary
nodes with all-scalar children from scalars but not stores.
(vect_analyze_slp_instance): Mark the node not failed.

* g++.dg/vect/pr96022.cc: New testcase.

4 years agovect: Fix an ICE in exact_div [PR95961]
Fei Yang [Thu, 2 Jul 2020 09:14:33 +0000 (10:14 +0100)]
vect: Fix an ICE in exact_div [PR95961]

In the test case for PR95961, vectorization factor computed
by vect_determine_vectorization_factor is [8,8].  But this is
updated to [1,1] later by vect_update_vf_for_slp.  When we call
vect_get_num_vectors in vect_enhance_data_refs_alignment, the number
of scalars which is based on the vectorization factor is not a multiple
of the the number of elements in the vector type.  This leads to
the ICE.  This isn't a simple stream of contiguous vector accesses.
It's hard to predict from the available information how many vector
accesses we'll actually need per iteration.  As discussed, here we
should use the number of scalars instead of the number of vectors as
an upper bound for the loop saving info about DR in the hash table.

2020-07-02  Felix Yang  <felix.yang@huawei.com>

gcc/
PR tree-optimization/95961
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Use the
number of scalars instead of the number of vectors as an upper bound
for the loop saving info about DR in the hash table.  Remove unused
local variables.

gcc/testsuite/
PR tree-optimization/95961
* gcc.target/aarch64/sve/pr95961.c: New test.

4 years agoopenmp: Diagnose non-rectangular loops with invalid steps
Jakub Jelinek [Thu, 2 Jul 2020 09:03:33 +0000 (11:03 +0200)]
openmp: Diagnose non-rectangular loops with invalid steps

THe OpenMP 5 standard requires that if some loop in OpenMP loop nest refers
to some outer loop's iterator variable, then the subtraction of the multiplication
factors for the outer iterator multiplied by the outer increment modulo the
inner increment is 0.  For loops with non-constants in any of these we can't
diagnose it, it would be a task for something like -fsanitize=openmp,
but if all these are constant, we can diagnose it.

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

* omp-expand.c (expand_omp_for): Diagnose non-rectangular loops with
invalid steps - ((m2 - m1) * incr_outer) % incr must be 0 in valid
OpenMP non-rectangular loops.  Use XALLOCAVEC.

* c-c++-common/gomp/loop-7.c: New test.

4 years agoReject components in extensions overlapping with the parent
Eric Botcazou [Thu, 2 Jul 2020 08:26:49 +0000 (10:26 +0200)]
Reject components in extensions overlapping with the parent

Such problematic components can be specified by means of a component
clause but they cannot be fully supported by the type system.  They
had initially been forbidden, then we decided to accept them by working
around the type system, but this is very fragile and, for example, any
static aggregate is guaranteed to trigger an ICE with the current
implementation.

We now reject them again, except if the -gnatd.K switch is passed.

gcc/ada/ChangeLog:
* debug.adb (d.K): Document new usage.
* fe.h (Debug_Flag_Dot_KK): Declare.
* gcc-interface/decl.c (gnat_to_gnu_field): Give an error when the
component overlaps with the parent subtype, except with -gnatd.K.

4 years agoDo not stream all zeros for gcda files.
Martin Liska [Tue, 2 Jun 2020 08:11:07 +0000 (10:11 +0200)]
Do not stream all zeros for gcda files.

gcc/ChangeLog:

PR gcov-profile/95348
* coverage.c (read_counts_file): Read only COUNTERS that are
not all-zero.
* gcov-dump.c (tag_function): Change signature from unsigned to
signed integer.
(tag_blocks): Likewise.
(tag_arcs): Likewise.
(tag_lines): Likewise.
(tag_counters): Likewise.
(tag_summary): Likewise.
* gcov.c (read_count_file): Read all non-zero counters
sensitively.

libgcc/ChangeLog:

PR gcov-profile/95348
* libgcov-driver.c (merge_one_data): Merge only profiles
that are not of non-zero type.
(write_one_data): Write counters only if there's one non-zero
value.
* libgcov-util.c (tag_function): Change signature from unsigned
to int.
(tag_blocks): Likewise.
(tag_arcs): Likewise.
(tag_counters): Likewise.
(tag_summary): Likewise.
(tag_lines): Read only if COUNTERS is non-zero.
(read_gcda_file): Handle negative length for COUNTERS type.

4 years agoFortran : ICE in generic_correspondence PR95584
Mark Eggleston [Thu, 25 Jun 2020 04:16:50 +0000 (05:16 +0100)]
Fortran  : ICE in generic_correspondence PR95584

Output an error for ambiguous interfaces in generic interface
instead of ICE.

2020-07-02  Steven G. Kargl  <kargl@gcc.gnu.org>

gcc/fortran/

PR fortran/95584
* interface.c (generic_correspondence): Only use the pointer
to a symbol if exists.

2020-07-02  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

PR fortran/95584
* gfortran.dg/pr95584.f90: New test.

4 years agotestsuite: Ignore line no. for BB vectorization message
Kewen Lin [Thu, 2 Jul 2020 05:55:53 +0000 (00:55 -0500)]
testsuite: Ignore line no. for BB vectorization message

The case g++.dg/vect/slp-pr56812.cc need to be fixed a bit with
line number neglection since the message for basic block vectorization
looks like:

  slp-pr56812.cc:19:1: optimized: basic block part vectorized using
  16 byte vectors

while for loop vectorization, it looks like:

  slp-pr56812.cc:17:18: optimized: loop vectorized using 16 byte
  vectors

gcc/testsuite/ChangeLog:

* g++.dg/vect/slp-pr56812.cc: Ignore line number for basic block
vectorization messages.

4 years agoRISC-V: Handle multi-letter extension for multilib-generator
Kito Cheng [Thu, 18 Jun 2020 03:37:01 +0000 (11:37 +0800)]
RISC-V: Handle multi-letter extension for multilib-generator

 - The order of multi-lib config could be wrong if multi-ltter are
   used, e.g. `./multilib-generator rv32izfh-ilp32--c`, would expect
   rv32ic_zfh/ilp32 reuse rv32i_zfh/ilp32, however the multi-ltter is not
   handled correctly, it will generate reuse rule for rv32izfhc/ilp32
   which is invalid arch configuration.

 - Remove re-use rule gen for g/imafd, because we canonicalize the -march at
   gcc driver too, so we don't need handle 'g' for multilib now.

gcc/ChangeLog:

* config/riscv/multilib-generator (arch_canonicalize): Handle
multi-letter extension.
Using underline as separator between different extensions.

4 years agoDaily bump.
GCC Administrator [Thu, 2 Jul 2020 00:16:26 +0000 (00:16 +0000)]
Daily bump.

4 years agoThe variant of editing distance we use doesn't satisfy the triangle inequality.
Pip Cet [Wed, 1 Jul 2020 20:58:52 +0000 (14:58 -0600)]
The variant of editing distance we use doesn't satisfy the triangle inequality.

gcc

* spellcheck.c (test_data): Add problematic strings.
(test_metric_conditions): Don't test the triangle inequality
condition, which our distance function does not satisfy.

4 years agoaarch64: Fix missing BTI instruction in trampolines
Omar Tahir [Wed, 1 Jul 2020 20:56:16 +0000 (21:56 +0100)]
aarch64: Fix missing BTI instruction in trampolines

If two functions require trampolines, and the first has BTI enabled
while the second doesn't, the generated template will be lacking
a BTI instruction.  This patch fixes this by always adding a BTI
instruction, which is safe as BTI instructions are ignored on
unsupported architecture versions.

2020-07-01  Omar Tahir  <omar.tahir@arm.com>

gcc/
* config/aarch64/aarch64.c (aarch64_asm_trampoline_template): Always
generate a BTI instruction.

gcc/testsuite/
* gcc.target/aarch64/bti-4.c: New test.

4 years agomatch.pd: (x & y) - (x | y) - 1 -> ~(x ^ y) simplification [PR94882]
Jeff Law [Wed, 1 Jul 2020 20:44:07 +0000 (14:44 -0600)]
match.pd: (x & y) - (x | y) - 1 -> ~(x ^ y) simplification [PR94882]

gcc/
PR tree-optimization/94882
* match.pd (x & y) - (x | y) - 1 -> ~(x ^ y): New simplification.

gcc/testsuite/
PR tree-optimization/94882
* gcc.dg/tree-ssa/pr94882.c: New test.
* gcc.dg/tree-ssa/pr94882-1.c: New test.
* gcc.dg/tree-ssa/pr94882-2.c: New test.
* gcc.dg/tree-ssa/pr94882-3.c: New test.

4 years agolibstdc++: Remove noexcept from match_results comparisons (PR 94627)
Jonathan Wakely [Wed, 1 Jul 2020 20:01:15 +0000 (21:01 +0100)]
libstdc++: Remove noexcept from match_results comparisons (PR 94627)

These functions can't be noexcept because the iterators stored in the
sub_match objects can throw on any operation.

libstdc++-v3/ChangeLog:

PR libstdc++/94627
* include/bits/regex.h (operator==, operator!=): Remove noexcept
equality comparisons for match_results.
* testsuite/28_regex/match_results/94627.cc: New test.

4 years agoanalyzer: Fix -Wanalyzer-possible-null-argument warning (PR 96014)
Jonathan Wakely [Tue, 30 Jun 2020 16:40:08 +0000 (17:40 +0100)]
analyzer: Fix -Wanalyzer-possible-null-argument warning (PR 96014)

gcc/testsuite/ChangeLog:

PR testsuite/96014
* g++.dg/analyzer/pr94028.C: Make operator new non-throwing so
that the compiler doesn't implicitly mark it as returning
non-null.

4 years agobootstrap: Don't translate assignment to hint[].
David Edelsohn [Wed, 1 Jul 2020 19:11:54 +0000 (15:11 -0400)]
bootstrap: Don't translate assignment to hint[].

error array must be initialized with a brace-enclosed initializer

gcc/fortran/ChangeLog

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

* check.c (gfc_invalid_boz): Fix bootstrap. Revert
Mark hint for translation using _().

4 years agotestsuite: Adjust gfortran.dg/pr95690.f90 line number.
David Edelsohn [Wed, 1 Jul 2020 18:05:26 +0000 (14:05 -0400)]
testsuite: Adjust gfortran.dg/pr95690.f90 line number.

gfortran produces associates a different line number for the same error
message depending on x86 versus other architectures.  This patch adjusts
the dg-error line number depending on the target.

gcc/testsuite/ChangeLog

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

* gfortran.dg/pr95690.f90: Adjust dg-error line number.

4 years agotestsuite: Restore lp64 for some gcc.target/powerpc testcases.
David Edelsohn [Wed, 1 Jul 2020 16:39:49 +0000 (12:39 -0400)]
testsuite: Restore lp64 for some gcc.target/powerpc testcases.

gcc/testsuite/ChangeLog

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

* gcc.target/powerpc/direct-move-double1.c: Require lp64.
* gcc.target/powerpc/direct-move-float1.c: Same.
* gcc.target/powerpc/direct-move-float3.c: Same.
* gcc.target/powerpc/direct-move-vint1.c: Same.
* gcc.target/powerpc/vsx-vector-5.c: Same.
* gcc.target/powerpc/vsx-vector-6.p7.c: Same.
* gcc.target/powerpc/vsx-vector-6.p8.c: Same.
* gcc.target/powerpc/vsx-vector-6.p9.c: Same.

4 years agoFix bootstrap for m68k.
Jeff Law [Wed, 1 Jul 2020 16:09:48 +0000 (10:09 -0600)]
Fix bootstrap for m68k.

gcc/
* config/m68k/m68k.c (m68k_output_btst): Drop "register" keyword.
(emit_move_sequence, output_iorsi3, output_xorsi3): Likewise.

4 years agoFortran : Fortran translation issues PR52279
Mark Eggleston [Tue, 2 Jun 2020 07:38:01 +0000 (08:38 +0100)]
Fortran  : Fortran translation issues PR52279

Mark strings for translation by enclosing in G_() and _().

2020-06-24  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/fortran/

PR fortran/52279
* arith.c (reduce_binary_aa): Mark for translation the string
parameter to gfc_check_conformance with G_().
* check.c (gfc_invalid_boz): Mark hint for translation using
_().  (gfc_check_achar): Mark for translation the message
parameter to gfc_invalid_boz using G_().  (gfc_check_char):
Mark for translation the message parameter to gfc_invalid_boz
using G_().  (gfc_check_complex): Mark for translation the
message parameter to gfc_invalid_boz using G_().
(gfc_check_float): Mark for translation the message
parameter to gfc_invalid_boz using G_().  (check_rest): Mark
for translation the string parameter to gfc_check_conformance
with _().  (gfc_check_minloc_maxloc): Mark for translation
the string parameter to gfc_check_conformance with _().
(gfc_check_findloc): Mark for translation the string parameter
to gfc_check_conformance with _().  (check_reduction): Mark
for translation the string parameter to gfc_check_conformance
with _().  (gfc_check_pack): Mark for translation the string
parameter to gfc_check_conformance with _().
* decl.c (match_old_style_init): Mark for translation the
message parameter to gfc_invalid_boz using G_().
* expr.c (gfc_check_assign): Mark for translation the string
parameter to gfc_check_conformance with _().
* intrinsic.c (check_specific): Mark for translation the string
parameter to gfc_check_conformance with _().
(gfc_check_intrinsic_standard): Mark symstd_msg strings for
translation using G_(). No need to mark symstd_msg for
translation in call to gfc_warning or when setting symstd.
* io.c (check_open_constraints):  Mark strings for translation
using G_() in all calls to warn_or_error.  (match_io_element):
Mark for translation the message parameter to gfc_invalid_boz
using G_().
* primary.c (match_boz_constant): Mark for translation the
message parameter to gfc_invalid_boz using G_().
* resolve.c (resolve_elemental_actual):  Mark for translation
the string parameter to gfc_check_conformance with _().
(resolve_operator):  Mark for translation the string parameter
to gfc_check_conformance with _().  Mark translation strings
assigned to msg using G_() for use in a call to cfg_warning.

4 years agoc++: Expose cloning form predicates
Nathan Sidwell [Wed, 1 Jul 2020 15:56:32 +0000 (08:56 -0700)]
c++: Expose cloning form predicates

A further adjustment of the function cloning.  Rather than have
copy_fndecl_with_name deduce whether a particular cdtor needs a
vtt_parm and/or has inherited parms to drop, pass that information in
from the caller.  In particular build_cdtor_clones knows when its
building the particular cdtors that might need these.  On the modules
branch I need to clone cdtors before the underlying class information
is necessarily complete.  There build_cdtor_clones is externally
callable to facilitate that.

gcc/cp/
* class.c (copy_fndecl_with_name): Add additional predicate args, do
not deduce them locally.
(copy_operator_fn): Adjust copy_fndecl_with_name call.
(build_clone): Add vtt and inherited predicate args.  Pass through
to copy_fndecl_with_name call.
(build_cdtor_clones): Likewise, pass through to build_clone as
needed.
(build_cdtor): Determine vtt and inherited here.
* cp-tree.h (DECL_NEEDS_CTT_PARM_P): Delete.

4 years agoaarch64: Add 64 bit setter getter fpsr fpcr
Andrea Corallo [Thu, 28 May 2020 07:49:42 +0000 (08:49 +0100)]
aarch64: Add 64 bit setter getter fpsr fpcr

gcc/ChangeLog

* config/aarch64/aarch64-builtins.c (aarch64_builtins): Add enums
for 64bits fpsr/fpcr getter setters builtin variants.
(aarch64_init_fpsr_fpcr_builtins): New function.
(aarch64_general_init_builtins): Modify to make use of the later.
(aarch64_expand_fpsr_fpcr_setter): New function.
(aarch64_general_expand_builtin): Modify to make use of the later.
* config/aarch64/aarch64.md (@aarch64_set_<fpscr_name><GPI:mode>)
(@aarch64_get_<fpscr_name><GPI:mode>): New patterns replacing and
generalizing 'get_fpcr', 'set_fpsr'.
* config/aarch64/iterators.md (GET_FPSCR, SET_FPSCR): New int
iterators.
(fpscr_name): New int attribute.
* doc/extend.texi (__builtin_aarch64_get_fpcr64)
(__builtin_aarch64_set_fpcr64, __builtin_aarch64_get_fpsr64)
(__builtin_aarch64_set_fpsr64): Add into AArch64 Built-in
Functions.

gcc/testsuite/ChangeLog

* gcc.target/aarch64/get_fpcr64_1.c: New test.
* gcc.target/aarch64/set_fpcr64_1.c: New test.
* gcc.target/aarch64/get_fpsr64_1.c: New test.
* gcc.target/aarch64/set_fpsr64_1.c: New test.

4 years agoFortran : False positive for optional arguments PR95446
Mark Eggleston [Mon, 1 Jun 2020 13:56:00 +0000 (14:56 +0100)]
Fortran  : False positive for optional arguments PR95446

Check that there is non-optional argument of the same rank in the
list of actual arguments.  If there is the warning is not required.

2020-07-01  Steven G. Kargl  <kargl@gcc.gnu.org>

gcc/fortran/

PR fortran/95446
* resolve.c (resolve_elemental_actual): Add code to check for
non-optional argument of the same rank.  Revise warning message
to refer to the Fortran 2018 standard.

2020-07-01  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

PR fortran/95446
* gfortran.dg/elemental_optional_args_6.f90: Remove check
for warnings that were erroneously output.
* gfortran.dg/pr95446.f90: New test.

4 years agoAdjust text of expected warnings changed in PR c++/86568.
Martin Sebor [Wed, 1 Jul 2020 14:30:52 +0000 (08:30 -0600)]
Adjust text of expected warnings changed in PR c++/86568.

libstdc++-v3/ChangeLog:

* testsuite/21_strings/basic_string_view/cons/char/nonnull.cc: Adjust
text of expected warning.
* testsuite/21_strings/basic_string_view/cons/wchar_t/nonnull.cc: Same.
* testsuite/21_strings/basic_string_view/operations/compare/char/nonnull.cc: Same.
* testsuite/21_strings/basic_string_view/operations/find/char/nonnull.cc: Same.
* testsuite/21_strings/basic_string_view/operations/rfind/char/nonnull.cc: Same.

4 years agoarm: Fix handler-align.c testcase [PR target/94743]
Christophe Lyon [Wed, 1 Jul 2020 12:23:51 +0000 (12:23 +0000)]
arm: Fix handler-align.c testcase [PR target/94743]

This testcase triggers the new warning, so compile it with
-mgeneral-regs-only.

2020-07-01  Christophe Lyon  <christophe.lyon@linaro.org>

PR target/94743

gcc/testsuite/
* gcc.target/arm/handler-align.c: Add -mgeneral-regs-only.

4 years agogcov: avoid trailing space.
Martin Liska [Wed, 1 Jul 2020 11:51:37 +0000 (13:51 +0200)]
gcov: avoid trailing space.

gcc/ChangeLog:

* gcov.c (print_usage): Avoid trailing space for -j option.

4 years agotree-optimization/95839 - teach SLP vectorization about vector inputs
Richard Biener [Fri, 26 Jun 2020 09:18:19 +0000 (11:18 +0200)]
tree-optimization/95839 - teach SLP vectorization about vector inputs

This teaches SLP analysis about vector typed externals that are
fed into the SLP operations via lane extracting BIT_FIELD_REFs.
It shows that there's currently no good representation for
vector code on the SLP side so I went a half way and represent
such vector externals uses always using a SLP permutation node
with a single external SLP child which has a non-standard
representation of no scalar defs but only a vector def.  That
works best for shielding the rest of the vectorizer from it.

2020-06-26  Richard Biener  <rguenther@suse.de>

PR tree-optimization/95839
* tree-vect-slp.c (vect_slp_tree_uniform_p): Pre-existing
vectors are not uniform.
(vect_build_slp_tree_1): Handle BIT_FIELD_REFs of
vector registers.
(vect_build_slp_tree_2): For groups of lane extracts
from a vector register generate a permute node
with a special child representing the pre-existing vector.
(vect_prologue_cost_for_slp): Pre-existing vectors cost nothing.
(vect_slp_analyze_node_operations): Use SLP_TREE_LANES.
(vectorizable_slp_permutation): Do not generate or cost identity
permutes.
(vect_schedule_slp_instance): Handle pre-existing vector
that are function arguments.

* gcc.dg/vect/bb-slp-pr95839-2.c: New testcase.

4 years agomove ILS include to system.h
Richard Biener [Fri, 13 Mar 2020 07:15:06 +0000 (08:15 +0100)]
move ILS include to system.h

This moves ISL system header includes to system.h.

* system.h (INCLUDE_ISL): New guarded include.
* graphite-dependences.c: Use it.
* graphite-isl-ast-to-gimple.c: Likewise.
* graphite-optimize-isl.c: Likewise.
* graphite-poly.c: Likewise.
* graphite-scop-detection.c: Likewise.
* graphite-sese-to-poly.c: Likewise.
* graphite.c: Likewise.
* graphite.h: Drop the includes here.

4 years agogcov: shorted one option help message
Martin Liska [Wed, 1 Jul 2020 11:02:07 +0000 (13:02 +0200)]
gcov: shorted one option help message

gcc/ChangeLog:

* gcov.c (print_usage): Shorted option description for -j
option.

4 years agogcov: rename 2 options.
Martin Liska [Tue, 30 Jun 2020 13:48:03 +0000 (15:48 +0200)]
gcov: rename 2 options.

gcc/ChangeLog:

* doc/gcov.texi: Rename 2 options.
* gcov.c (print_usage): Rename -i,--json-format to
-j,--json-format and -j,--human-readable to -H,--human-readable.
(process_args): Fix up parsing.  Document obsolete options and
how are they changed.

gcc/testsuite/ChangeLog:

* g++.dg/gcov/loop.C: Use -H option instead of -j option.

4 years agoFortran : Bogus error with additional blanks in type(*) PR95829
Mark Eggleston [Tue, 23 Jun 2020 10:01:28 +0000 (11:01 +0100)]
Fortran  : Bogus error with additional blanks in type(*) PR95829

Checking for "* ) " instead of "*)" clears the bogus error.

2020-07-01  Steven G. Kargl  <kargl@gcc.gnu.org>

gcc/fortran/

PR fortran/95829
* decl.c (gfc_match_decl_type_spec): Compare with "* ) " instead
of "*)".

2020-07-01  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

PR fortran/95829
* gfortran.dg/pr95829.f90: New test.

4 years agoarm: Fix typos in testcases [PR target/94743]
Christophe Lyon [Wed, 1 Jul 2020 06:48:17 +0000 (06:48 +0000)]
arm: Fix typos in testcases [PR target/94743]

In my commit r11-1732, I updated the warning message to include
quotes, but I forgot to update the testcases.

2020-01-07  Christophe Lyon  <christophe.lyon@linaro.org>

PR target/94743

gcc/testsuite/
* gcc.target/arm/pr94743-1-hard.c: Add missing quotes in expected
warning.
* gcc.target/arm/pr94743-1-softfp.c: Likewise.

4 years agoFix bootstrap failure on PA
Jeff Law [Wed, 1 Jul 2020 05:03:33 +0000 (23:03 -0600)]
Fix bootstrap failure on PA

gcc/
* config/pa/pa.c (pa_emit_move_sequence): Drop register keyword.
(pa_output_ascii): Likewise.

4 years agoRISC-V: Preserve arch version info during normalizing arch string
Kito Cheng [Mon, 29 Jun 2020 09:52:42 +0000 (17:52 +0800)]
RISC-V: Preserve arch version info during normalizing arch string

- Arch version should preserved if user explicitly specified the version.
  e.g.
    After normalize, -march=rv32if3d should be -march=rv32i_f3p0d
    instead of-march=rv32ifd.

gcc/ChangeLog:

* common/config/riscv/riscv-common.c (riscv_subset_t): New field
added.
(riscv_subset_list::parsing_subset_version): Add parameter for
indicate explicitly version, and handle explicitly version.
(riscv_subset_list::handle_implied_ext): Ditto.
(riscv_subset_list::add): Ditto.
(riscv_subset_t::riscv_subset_t): Init new field.
(riscv_subset_list::to_string): Always output version info if version
explicitly specified.
(riscv_subset_list::parsing_subset_version): Handle explicitly
arch version.
(riscv_subset_list::parse_std_ext): Ditto.
(riscv_subset_list::parse_multiletter_ext): Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/attribute-13.c: New.

4 years agotestsuite: enable gcc.target/powerpc direct move tests.
David Edelsohn [Wed, 1 Jul 2020 02:04:07 +0000 (22:04 -0400)]
testsuite: enable gcc.target/powerpc direct move tests.

Remove unnecessary requirements for direct-move-* tests.

gcc/testsuite/ChangeLog

2020-06-30  David Edelsohn  <dje.gcc@gmail.com>

* gcc.target/powerpc/direct-move-double1.c: Remove lp64 requirement.
* gcc.target/powerpc/direct-move-double2.c: Same.
* gcc.target/powerpc/direct-move-float1.c: Same.
* gcc.target/powerpc/direct-move-float2.c: Same.
* gcc.target/powerpc/direct-move-float3.c: Same.
* gcc.target/powerpc/direct-move-vint1.c: Same.
* gcc.target/powerpc/direct-move-vint2.c: Same.
* gcc.target/powerpc/direct-move-long1.c: Remove linux requirement..
* gcc.target/powerpc/direct-move-long2.c: Same.

4 years agotestsuite: Remove dg-skip SPE.
David Edelsohn [Wed, 1 Jul 2020 01:49:57 +0000 (21:49 -0400)]
testsuite: Remove dg-skip SPE.

Remove testsuite directives to skip SPE and SPE specific tests.

gcc/testsuite/ChangeLog

2020-06-30  David Edelsohn  <dje.gcc@gmail.com>

* gcc.target/powerpc/20030218-1.c: Delete.
* gcc.target/powerpc/20030505.c: Delete.
* gcc.target/powerpc/20081204-1.c: Delete.
* gcc.target/powerpc/bcd-1.c: Remove dg-skip-if SPE.
* gcc.target/powerpc/bcd-2.c: Same.
* gcc.target/powerpc/bcd-3.c: Same.
* gcc.target/powerpc/direct-move-double1.c: Same.
* gcc.target/powerpc/direct-move-double2.c: Same.
* gcc.target/powerpc/direct-move-float1.c: Same.
* gcc.target/powerpc/direct-move-float2.c: Same.
* gcc.target/powerpc/direct-move-float3.c: Same.
* gcc.target/powerpc/direct-move-long1.c: Same.
* gcc.target/powerpc/direct-move-long2.c: Same.
* gcc.target/powerpc/direct-move-vint1.c: Same.
* gcc.target/powerpc/direct-move-vint2.c: Same.
* gcc.target/powerpc/extend-divide-1.c: Same.
* gcc.target/powerpc/extend-divide-2.c: Same.
* gcc.target/powerpc/pack01.c: Same.
* gcc.target/powerpc/pack02.c: Same.
* gcc.target/powerpc/pack03.c: Same.
* gcc.target/powerpc/pr52457.c: Same.
* gcc.target/powerpc/pr88845.c: Same.
* gcc.target/powerpc/quad-atomic.c: Same.
* gcc.target/powerpc/recip-6.c: Same.
* gcc.target/powerpc/recip-7.c: Same.

4 years agotestsuite: p8vector-int128 require int128 not lp64.
David Edelsohn [Wed, 1 Jul 2020 00:37:50 +0000 (20:37 -0400)]
testsuite: p8vector-int128 require int128 not lp64.

Change testsuite requirements from lp64 to int128 support.

gcc/testsuite/ChangeLog

2020-06-30  David Edelsohn  <dje.gcc@gmail.com>

* gcc.target/powerpc/p8vector-int128-1.c: Require int128 not lp64.
* gcc.target/powerpc/p8vector-int128-2.c: Same.

4 years agotestsuite: Remove restrictions on VSX tests.
David Edelsohn [Tue, 30 Jun 2020 23:57:53 +0000 (19:57 -0400)]
testsuite: Remove restrictions on VSX tests.

Some of the testcases in gcc.target/powerpc have unnecessarily strict
requirements and run correctly on more powerpc targets.  This patch
removes the restrictions and adds appropriate HW requirements.

gcc/testsuite/ChangeLog

2020-06-30  David Edelsohn  <dje.gcc@gmail.com>

* gcc.target/powerpc/pr90763.c: Adjust requirements.
* gcc.target/powerpc/vsx-vector-1.c: Same.
* gcc.target/powerpc/vsx-vector-2.c: Same.
* gcc.target/powerpc/vsx-vector-3.c: Same.
* gcc.target/powerpc/vsx-vector-4.c: Same.
* gcc.target/powerpc/vsx-vector-5.c: Same.
* gcc.target/powerpc/vsx-vector-6.p7.c: Same.
* gcc.target/powerpc/vsx-vector-6.p8.c: Same.
* gcc.target/powerpc/vsx-vector-6.p9.c: Same.
* gcc.target/powerpc/vsx-vector-abss.c: Same.
* gcc.target/powerpc/vsx-vectorize-1.c: Same.
* gcc.target/powerpc/vsx-vectorize-2.c: Same.
* gcc.target/powerpc/vsx-vectorize-3.c: Same.
* gcc.target/powerpc/vsx-vectorize-4.c: Same.
* gcc.target/powerpc/vsx-vectorize-5.c: Same.
* gcc.target/powerpc/vsx-vectorize-6.c: Same.
* gcc.target/powerpc/vsx-vectorize-7.c: Same.
* gcc.target/powerpc/vsx-vectorize-8.c: Same.

4 years agotestsuite: remove SPE tests.
David Edelsohn [Wed, 1 Jul 2020 00:11:52 +0000 (20:11 -0400)]
testsuite: remove SPE tests.

SPE support was removed from the "rs6000" port.  This patch removes some
left-over SPE-specific testcases from the gcc.target/powerpc directory.

gcc/testsuite/ChangeLog

2020-06-30  David Edelsohn  <dje.gcc@gmail.com>

* gcc.target/powerpc/ppc-spe.c: Delete.
* gcc.target/powerpc/ppc-spe64-1.c: Delete.
* gcc.target/powerpc/pr60102.c: Delete.
* gcc.target/powerpc/pr60158.c: Delete.
* gcc.target/powerpc/pr60735.c: Delete.
* gcc.target/powerpc/pr78458.c: Delete.
* gcc.target/powerpc/pr80343.c: Delete.
* gcc.target/powerpc/spe-evmerge.c: Delete.
* gcc.target/powerpc/spe-small-data-1.c: Delete.
* gcc.target/powerpc/spe-small-data-2.c: Delete.
* gcc.target/powerpc/spe-unwind-1.c: Delete.
* gcc.target/powerpc/spe-vector-memcpy.c: Delete.
* gcc.target/powerpc/spe-vector-memset.c: Delete.
* gcc.target/powerpc/spe1.c: Delete.

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

4 years agotestsuite: change gcc.target/powerpc builtins lp64 to int128 requirement.
David Edelsohn [Tue, 30 Jun 2020 21:45:52 +0000 (17:45 -0400)]
testsuite: change gcc.target/powerpc builtins lp64 to int128 requirement.

Some of the builtins* tests check for lp64 as a proxy for int128 support.
This patch changes the requirements to int128.  It also removes
some redundant requirements from revb.

gcc/testsuite/ChangeLog

2020-06-30  David Edelsohn  <dje.gcc@gmail.com>

* gcc.target/powerpc/builtins-2-p9-runnable.c: lp64 to int128.
* gcc.target/powerpc/builtins-6-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-6-runnable.c: Same.
* gcc.target/powerpc/builtins-revb-runnable.c: Same.

4 years agoPR fortran/88379 - ICE with allocatable coarray, class and associate
Harald Anlauf [Tue, 30 Jun 2020 21:36:56 +0000 (23:36 +0200)]
PR fortran/88379 - ICE with allocatable coarray, class and associate

Catch NULL pointer dereference for ASSOCIATE on allocatable coarray variable.

gcc/fortran/
PR fortran/88379
* resolve.c (resolve_assoc_var): Avoid NULL pointer dereference.

4 years agoaarch64: Treat GNU and Advanced SIMD vectors as distinct [PR92789, PR95726]
Richard Sandiford [Tue, 30 Jun 2020 20:40:30 +0000 (21:40 +0100)]
aarch64: Treat GNU and Advanced SIMD vectors as distinct [PR92789, PR95726]

PR95726 is about template look-up for things like:

    foo<float vecf __attribute__((vector_size(16)))>
    foo<float32x4_t>

The immediate cause of the problem is that the hash function usually
returns different hashes for these types, yet the equality function
thinks they are equal.  This then raises the question of how the types
are supposed to be treated.

I think the answer is that the GNU vector type should be treated as
distinct from float32x4_t, not least because the two types mangle
differently.  However, each type should implicitly convert to the other.

This would mean that, as far as the PR is concerned, the hashing
function is right to (sometimes) treat the types differently and
the equality function is wrong to treat them as the same.

The most obvious way to enforce the type difference is to use a
target-specific type attribute.  That on its own is enough to fix
the PR.  The difficulty is deciding whether the knock-on effects
are acceptable.

One obvious effect is that GCC then rejects:

    typedef float vecf __attribute__((vector_size(16)));
    vecf x;
    float32x4_t &z = x;

on the basis that the types are no longer reference-compatible.
I think that's again the correct behaviour, and consistent with
current Clang.

A trickier question is whether:

    vecf x;
    float32x4_t y;
    … c ? x : y …

should be valid, and if so, what its type should be [PR92789].
As explained in the comment in the testcase, GCC and Clang both
accepted this, but GCC chose the “then” type while Clang chose
the “else” type.  This can lead to different mangling for (probably
artificial) corner cases, as seen for “sel1” and “sel2” in the
testcase.

Adding the attribute makes GCC reject the conditional expression
as ambiguous.  I think that too is the correct behaviour, for the
reasons described in the testcase.  However, it does seem to have
the potential to break existing code.

It looks like aarch64_comp_type_attributes is missing cases for
the SVE attributes, but I'll handle that in a separate patch.

2020-06-30  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR target/92789
PR target/95726
* config/aarch64/aarch64.c (aarch64_attribute_table): Add
"Advanced SIMD type".
(aarch64_comp_type_attributes): Check that the "Advanced SIMD type"
attributes are equal.
* config/aarch64/aarch64-builtins.c: Include stringpool.h and
attribs.h.
(aarch64_mangle_builtin_vector_type): Use the mangling recorded
in the "Advanced SIMD type" attribute.
(aarch64_init_simd_builtin_types): Add an "Advanced SIMD type"
attribute to each Advanced SIMD type, using the mangled type
as the attribute's single argument.

gcc/testsuite/
PR target/92789
PR target/95726
* g++.target/aarch64/pr95726.C: New test.

4 years agors6000: Fix gcc.target/powerpc testsuite target requirements.
David Edelsohn [Sun, 28 Jun 2020 00:44:24 +0000 (20:44 -0400)]
rs6000: Fix gcc.target/powerpc testsuite target requirements.

gcc/testsuite/ChangeLog

2020-06-30  David Edelsohn  <dje.gcc@gmail.com>

* gcc.target/powerpc/builtins-1-p9-runnable.c: Fix target requirements.
* gcc.target/powerpc/builtins-1.c: Same.
* gcc.target/powerpc/builtins-2-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-2.c: Same.
* gcc.target/powerpc/builtins-3-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-3-p9.c: Same.
* gcc.target/powerpc/builtins-3-runnable-p8.c: Same.
* gcc.target/powerpc/builtins-3.c: Same.
* gcc.target/powerpc/builtins-4-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-4.c: Same.
* gcc.target/powerpc/builtins-5-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-5.c: Same.
* gcc.target/powerpc/builtins-6-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-6-runnable.c: Same.
* gcc.target/powerpc/builtins-7-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-7-runnable.c: Same.
* gcc.target/powerpc/builtins-8-p9-runnable.c: Same.
* gcc.target/powerpc/builtins-8-runnable.c: Same.
* gcc.target/powerpc/cpu-builtin-1.c: Same.
* gcc.target/powerpc/float128-fma1.c: Same.
* gcc.target/powerpc/float128-hw.c: Same.
* gcc.target/powerpc/float128-hw10.c: Same.
* gcc.target/powerpc/float128-hw11.c: Same.
* gcc.target/powerpc/float128-hw2.c: Same.
* gcc.target/powerpc/float128-hw3.c: Same.
* gcc.target/powerpc/float128-hw4.c: Same.
* gcc.target/powerpc/float128-hw5.c: Same.
* gcc.target/powerpc/float128-hw6.c: Same.
* gcc.target/powerpc/float128-hw7.c: Same.
* gcc.target/powerpc/float128-hw8.c: Same.
* gcc.target/powerpc/float128-hw9.c: Same.
* gcc.target/powerpc/float128-minmax.c: Same.
* gcc.target/powerpc/float128-odd.c: Same.
* gcc.target/powerpc/float128-sqrt1.c: Same.

4 years agoc++: Tweak function cloning names
Nathan Sidwell [Tue, 30 Jun 2020 17:43:08 +0000 (10:43 -0700)]
c++: Tweak function cloning names

On the modules branch I need to expose an intermediate step of the
function cloning, but before that it'd be nice to rationalize the
names somewhat, now that we also use that API for copying the equality
operator.  Jason's recent patch caused me some pain by altering the
same code.  I can only blame myself for not pushing some bits sooner.
Anyway, this patch makes the newly renamed copy_fndecl_with_name
static, and adds a wrapper copy_operator_fn, that takes an operator
code.  The cdtor cloning functions are renamed to explicitly note they
expect cdtors.  A followup patch will move some of the logic from
copy_fndecl_with_name to build_cdtor_clones.

gcc/cp/
* cp-tree.h (copy_fndecl_with_name): Rename to ...
(copy_operatorn_fn): ... this.  Change arg type.
(clone_function_decl): Rename to ...
(clone_cdtor): ... this.
* class.c (copy_fndecl_with_name): Make static.
(copy_operator_fn): New wrapper.
(build_clones): Rename to ...
(build_cdtor_clones): ... this.
(clone_function_decl): Rename to ...
(clone_cdtor): ... this.  Adjust build_clones calls.
(clone_constructors_and_destructors): Adjust clone_function_decl
calls.
* method.c (implicitly_declare_fn): Adjust copy_fndecl_with_name
call.
(lazily_declare_fn): Adjust clone_function_decl call.
* pt.c (tsubst_function_decl): Likewise.
(instantiate_template_1): Likewise.

libcc1/
* libcp1plugin.cc (plugin_build_decl): Adjust clone_function_decl
call.

4 years agotestsuite: expect additional warning in analyzer/pr93993.f90
David Edelsohn [Tue, 30 Jun 2020 17:42:53 +0000 (13:42 -0400)]
testsuite: expect additional warning in analyzer/pr93993.f90

The recent changes to warnings elicit an additional warning in
analyzer/pr93993.f90.  This patch updates the testcase to expect the warning.

gcc/testsuite/ChangeLog

2020-06-30  David Edelsohn  <dje.gcc@gmail.com>

* gfortran.dg/analyzer/pr93993.f90: Expect leak tm warning.

4 years ago[testsuite] Adjust 'scoff' for HSA offloading
Thomas Schwinge [Tue, 30 Jun 2020 05:23:03 +0000 (07:23 +0200)]
[testsuite] Adjust 'scoff' for HSA offloading

Fix-up for commit efc16503ca10bc0e934e0bace5777500e4dc757a "handle dumpbase in
offloading, adjust testsuite".

gcc/testsuite/
* lib/scanoffload.exp (scoff) <offload_targets>: Skip HSA.

4 years ago[testsuite] Replace fragile 'scan-assembler' with 'scan-offload-rtl' in 'libgomp...
Thomas Schwinge [Tue, 30 Jun 2020 03:24:17 +0000 (05:24 +0200)]
[testsuite] Replace fragile 'scan-assembler' with 'scan-offload-rtl' in 'libgomp.oacc-c-c++-common/pr85381*.c'

These test cases use directives similar to:

    /* { dg-additional-options "-save-temps" } */

    /* { dg-final { scan-assembler-times "bar.sync" 2 } } */

This expects to scan the PTX offloading compilation assembler code (not host
code!), expecting that nvptx offloading code assembly is produced after the
host code, and thus overwrites the latter file.  (Yes, that's certainly
ugly/fragile...)

..., and this broke with recent commit 1dedc12d186a110854537e1279b4e6c29f2df35a
"revamp dump and aux output names" plus fix-up commit commit
efc16503ca10bc0e934e0bace5777500e4dc757a "handle dumpbase in offloading, adjust
testsuite" (short summary: file names changed), so let's finally make that
robust.

libgomp/
* testsuite/libgomp.oacc-c-c++-common/pr85381-2.c: Replace fragile
'scan-assembler' with 'scan-offload-rtl'.
* testsuite/libgomp.oacc-c-c++-common/pr85381-3.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/pr85381-4.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/pr85381-5.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/pr85381.c: Likewise.

4 years agoMark up unreachable OpenACC 'attach' code path
Thomas Schwinge [Fri, 26 Jun 2020 08:19:14 +0000 (10:19 +0200)]
Mark up unreachable OpenACC 'attach' code path

... introduced in commit 8e7e71ff247fb116dc381c5ef0c09acc0d2b374f (r279625)
"OpenACC 2.6 deep copy: libgomp parts".

libgomp/
* target.c (gomp_map_vars_existing): Assert 'kind !=
GOMP_MAP_ATTACH'.
(gomp_map_vars_internal): Clean up.

4 years agogcc-changelog: support older GitPython releases.
Martin Liska [Tue, 30 Jun 2020 15:44:45 +0000 (17:44 +0200)]
gcc-changelog: support older GitPython releases.

contrib/ChangeLog:

* gcc-changelog/git_repository.py: Support older releases of
GitPython when renamed_file was named renamed.

4 years agocoroutines: Fix a diagnostic trailing space warning.
Iain Sandoe [Tue, 30 Jun 2020 13:59:43 +0000 (14:59 +0100)]
coroutines: Fix a diagnostic trailing space warning.

A recently add diagnostic has a trailing space.
Fixed thus.

gcc/cp/ChangeLog:

* coroutines.cc (morph_fn_to_coro): Remove trailing
space in a diagnostic.

4 years agoarm: Warn if IRQ handler is not compiled with -mgeneral-regs-only [PR target/94743]
Christophe Lyon [Tue, 30 Jun 2020 13:51:20 +0000 (13:51 +0000)]
arm: Warn if IRQ handler is not compiled with -mgeneral-regs-only [PR target/94743]

The interrupt attribute does not guarantee that the FP registers are
saved, which can result in problems difficult to debug.

Saving the FP registers and status registers can be a large penalty,
so it's probably not desirable to do that all the time.

If the handler calls other functions, we'd likely need to save all of
them, for lack of knowledge of which registers they actually clobber.

This is even more obscure for the end-user when the compiler inserts
calls to helper functions such as memcpy (some multilibs do use FP
registers to speed it up).

In the PR, we discussed adding routines in libgcc to save the FP
context and saving only locally-clobbered FP registers, but this seems
to be too much work for the purpose, given that in general such
handlers try to avoid this kind of penalty.
I suspect we would also want new attributes to instruct the compiler
that saving the FP context is not needed.

In the mean time, emit a warning to suggest re-compiling with
-mgeneral-regs-only. Note that this can lead to errors if the code
uses floating-point and -mfloat-abi=hard, eg:
argument of type 'double' not permitted with -mgeneral-regs-only

This can be troublesome for the user, but at least this would make
him aware of the latent issue.

The patch adds several testcases:

- pr94734-1-hard.c checks that a warning is emitted when using
  -mfloat-abi=hard. Function IRQ_HDLR_Test can make implicit calls to
  runtime floating-point routines (or direct use of FP instructions),
  IRQ_HDLR_Test2 doesn't. We emit a warning in both cases, though.

- pr94734-1-softfp.c: same as above wih -mfloat-abi=softfp.

- pr94734-1-soft.c checks that no warning is emitted when using
  -mfloat-abi=soft when the same code as above.

- pr94734-2.c checks that no warning is emitted when using
  -mgeneral-regs-only.

- pr94734-3.c checks that no warning is emitted when using
  -mgeneral-regs-only even using float-point data.

2020-06-30  Christophe Lyon  <christophe.lyon@linaro.org>

PR target/94743
gcc/
* config/arm/arm.c (arm_handle_isr_attribute): Warn if
-mgeneral-regs-only is not used.

gcc/testsuite/
* gcc.misc-tests/arm-isr.c: Add -mgeneral-regs-only.
* gcc.target/arm/empty_fiq_handler.c: Add -mgeneral-regs-only.
* gcc.target/arm/interrupt-1.c: Add -mgeneral-regs-only.
* gcc.target/arm/interrupt-2.c: Add -mgeneral-regs-only.
* gcc.target/arm/pr70830.c: Add -mgeneral-regs-only.
* gcc.target/arm/pr94743-1-hard.c: New test.
* gcc.target/arm/pr94743-1-soft.c: New test.
* gcc.target/arm/pr94743-1-softfp.c: New test.
* gcc.target/arm/pr94743-2.c: New test.
* gcc.target/arm/pr94743-3.c: New test.

4 years agotree-optimization/95855 - Add checks to avoid spoiling if-conversion if
Yang Yang [Tue, 30 Jun 2020 10:04:31 +0000 (18:04 +0800)]
tree-optimization/95855 - Add checks to avoid spoiling if-conversion if

Add some checks in pass_splits_paths, so that pass_split_paths can
recognize the missed if-conversion opportunity and do not duplicate the
corresponding block.

2020-06-30 Yang Yang <yangyang305@huawei.com>

gcc/ChangeLog:

PR tree-optimization/95855
* gimple-ssa-split-paths.c (is_feasible_trace): Add extra
checks to recognize a missed if-conversion opportunity when
judging whether to duplicate a block.

gcc/testsuite/ChangeLog

PR tree-optimization/95855
* gcc.dg/tree-ssa/split-path-12.c: New testcase.

4 years agotestsuite: fix constexpr-is_literal.C deprecated c++17 and above.
David Edelsohn [Tue, 30 Jun 2020 00:41:55 +0000 (20:41 -0400)]
testsuite: fix constexpr-is_literal.C deprecated c++17 and above.

std::is_literal_type is deprecated in C++17 and above.

This was introduced in c++11, but the testsuite list of standards now only
includes c++98 and c++14.  This patch limits the test to c++14_only to
prevent deprecation warnings.

gcc/testsuite/ChangeLog

2020-06-30  David Edelsohn  <dje.gcc@gmail.com>

* g++.dg/cpp0x/constexpr-is_literal.C: Limit test to -std=c++14.

4 years agoUse CHARACTER(kind) string for calculating the type hash.
Thomas Koenig [Tue, 30 Jun 2020 11:01:36 +0000 (13:01 +0200)]
Use CHARACTER(kind) string for calculating the type hash.

This regression came about because of a change in the way
types are displayed in error messages.  The character
representation is also used to calculate the hashes for
our types, so this patch restores the old behavior if
we are indeed calculating a hash.

The test case also checks for the specific hash value because
changing that would be an ABI change, which we should not
be doing unintentionally.

gcc/fortran/ChangeLog:

2020-06-30  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/95355
* gfortran.h (gfc_typename): Add optional argument for_hash.
* misc.c (gfc_typename): When for_hash is true, just retur
  CHARACTER(kind).
* class.c (gfc_intrinsic_hash_value): Call gfc_typename with
  for_hash = true.

4 years agoc-family: Avoid ICEs on calls to internal functions [PR95963]
Jakub Jelinek [Tue, 30 Jun 2020 09:42:54 +0000 (11:42 +0200)]
c-family: Avoid ICEs on calls to internal functions [PR95963]

The following testcase ICEs since recent Martin's -Wnonnull changes,
we see a CALL_EXPR and ICE because CALL_EXPR_FN is NULL, which is
valid for internal function calls.  Internal function calls don't have a
function type, and will never have format_arg attribute on them nor will
serve as the i18n routines -Wformat cares about.

2020-06-30  Jakub Jelinek  <jakub@redhat.com>

PR c++/95963
* c-common.c (check_function_arguments_recurse): Don't crash on
calls to internal functions.

* g++.dg/cpp1z/launder9.C: New test.

4 years agoDaily bump.
GCC Administrator [Tue, 30 Jun 2020 09:02:21 +0000 (09:02 +0000)]
Daily bump.

4 years agogcc-changelog: support 'This revert commit' prefix.
Martin Liska [Tue, 30 Jun 2020 08:32:34 +0000 (10:32 +0200)]
gcc-changelog: support 'This revert commit' prefix.

contrib/ChangeLog:

* gcc-changelog/git_check_commit.py: Print revision
of original_info.
* gcc-changelog/git_commit.py: Support Revert commits.

4 years agogcc-changelog: come up with GitInfo wrapper.
Martin Liska [Tue, 30 Jun 2020 08:12:45 +0000 (10:12 +0200)]
gcc-changelog: come up with GitInfo wrapper.

contrib/ChangeLog:

* gcc-changelog/git_check_commit.py: Use GitInfo
* gcc-changelog/git_commit.py: Add GitInfo class.
* gcc-changelog/git_email.py: Use GitInfo class.
* gcc-changelog/git_repository.py: Likewise.

4 years agocoroutines: Collect the function body rewrite code.
Iain Sandoe [Tue, 30 Jun 2020 06:26:51 +0000 (07:26 +0100)]
coroutines: Collect the function body rewrite code.

The standard describes a rewrite of the body of the user-authored
function (which wraps it in a try-catch block and provides the
initial and final suspend expressions).  The exact arrangement of
this was still in flux right up until the DIS and as a consequence
was a bit of a moving target.

The net result was a fragmented implementation of the parts of
the rewrite which is now impeding progress in fixing other issues.

This patch collates the rewrite action into a single function and
carries this out earlier.

gcc/cp/ChangeLog:

* coroutines.cc (expand_one_await_expression): Remove
code dealing with initial suspend.
(build_actor_fn): Remove code special-casing initial
and final suspend. Handle the final suspend and marking
of the coroutine as done.
(coro_rewrite_function_body): New.
(bind_expr_find_in_subtree): Remove.
(coro_body_contains_bind_expr_p): Remove.
(morph_fn_to_coro): Split the rewrite of the original
function into coro_rewrite_function_body and call it.

4 years agoUpdate gcc sv.po.
Joseph Myers [Mon, 29 Jun 2020 23:57:16 +0000 (23:57 +0000)]
Update gcc sv.po.

* sv.po: Update.

4 years agoRevert "Add a __nonnnull__ attribute to std::string's _CharT* constructor"
Ville Voutilainen [Mon, 29 Jun 2020 22:59:34 +0000 (01:59 +0300)]
Revert "Add a __nonnnull__ attribute to std::string's _CharT* constructor"

This reverts commit b26fd416fb0a734d3f3e56629b6dff2e3c25dd40.

4 years agocompiler: remove some erroneous code that was never run
Ian Lance Taylor [Mon, 29 Jun 2020 18:30:43 +0000 (11:30 -0700)]
compiler: remove some erroneous code that was never run

The code accidentally called Type::type_descriptor rather than the
do_type_descriptor method.  Calling Type::type_descriptor with a second
argument of NULL would always crash.  Since that never happened,
it revealed that this code was never actually executed.

Fixes PR go/95970

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

4 years agoPR fortran/95978 - ICE in gfc_match_data, at fortran/decl.c:731
Harald Anlauf [Mon, 29 Jun 2020 21:20:16 +0000 (23:20 +0200)]
PR fortran/95978 - ICE in gfc_match_data, at fortran/decl.c:731

Catch NULL pointer dereference on invalid DATA statement.

gcc/fortran/
PR fortran/95978
* decl.c (gfc_match_data): Avoid NULL pointer dereference.

4 years agoDo not generate recursion check for compiler-generated procedures.
Thomas Koenig [Mon, 29 Jun 2020 21:11:06 +0000 (23:11 +0200)]
Do not generate recursion check for compiler-generated procedures.

This one-line fix removes a check for recursion for procedures
which are compiler-generated, such as finalizers or deallocation.
These need to be recursive, even if the user code should not be.

gcc/fortran/ChangeLog:

PR fortran/95743
* trans-decl.c (gfc_generate_function_code): Do not generate
recursion check for compiler-generated procedures.

4 years agors6000: Documentation updates for "future" rename
Segher Boessenkool [Mon, 29 Jun 2020 17:19:06 +0000 (17:19 +0000)]
rs6000: Documentation updates for "future" rename

2020-06-29  Segher Boessenkool  <segher@kernel.crashing.org>

* doc/extend.texi: Change references to "future architecture" to
"ISA 3.1", "-mcpu=future" to "-mcpu=power10", and remove vaguer
references to "future" (because the future is now).

4 years agotestsuite: Make char4-subscript.f90 regex endian neutral.
David Edelsohn [Mon, 29 Jun 2020 18:42:13 +0000 (14:42 -0400)]
testsuite: Make char4-subscript.f90 regex endian neutral.

The testcase tests for little endian results.  This patch updates the
regex to accept either endianness.

gcc/testsuite/ChangeLog

2020-06-29  David Edelsohn  <dje.gcc@gmail.com>

* gfortran.dg/char4-subscript.f90: Simplify regex.
Accept big endian or little endian output.

4 years agors6000: Rename isa attribute "fut" to "p10"
Segher Boessenkool [Mon, 29 Jun 2020 17:17:51 +0000 (17:17 +0000)]
rs6000: Rename isa attribute "fut" to "p10"

I missed this when grepping for "future".

2020-06-29  Segher Boessenkool  <segher@kernel.crashing.org>

* config/rs6000/rs6000.md (isa): Rename "fut" to "p10".

4 years agomiddle-end: Optimize (A&C)^(B&C) to (A^B)&C in simplify_rtx (take 3).
Roger Sayle [Mon, 29 Jun 2020 16:33:23 +0000 (17:33 +0100)]
middle-end: Optimize (A&C)^(B&C) to (A^B)&C in simplify_rtx (take 3).

2020-06-29  Roger Sayle  <roger@nextmovesoftware.com>
gcc/ChangeLog:
* simplify-rtx.c (simplify_distributive_operation): New function
to un-distribute a binary operation of two binary operations.
(X & C) ^ (Y & C) to (X ^ Y) & C, when C is simple (i.e. a constant).
(simplify_binary_operation_1) <IOR, XOR, AND>: Call it from here
when appropriate.
(test_scalar_int_ops): New function for unit self-testing
scalar integer transformations in simplify-rtx.c.
(test_scalar_ops): Call test_scalar_int_ops for each integer mode.
(simplify_rtx_c_tests): Call test_scalar_ops.