platform/upstream/gcc.git
4 years agoanalyzer: avoid ICE with missing arguments (PR 93375)
David Malcolm [Wed, 22 Jan 2020 21:26:38 +0000 (16:26 -0500)]
analyzer: avoid ICE with missing arguments (PR 93375)

PR analyzer/93375 reports an ICE under certain circumstances
involving a call where the number of arguments at the callsite
is less than the parameter count of the callee,

Specifically, the ICE occurs when pruning a checker_path for a
diagnostic, when attempting to maintain which expression is of
interest through such a call.

The root cause is an assumption that there were enough arguments at
the callsite, within callgraph_superedge's methods for mapping
expressions between callee and caller.

This patch adds checks for this to the relevant methods, fixing the ICE.

gcc/analyzer/ChangeLog:
PR analyzer/93375
* supergraph.cc (callgraph_superedge::get_arg_for_parm): Fail
gracefully is the number of parameters at the callee exceeds the
number of arguments at the call stmt.
(callgraph_superedge::get_parm_for_arg): Likewise.

gcc/testsuite/ChangeLog:
PR analyzer/93375
* gcc.dg/analyzer/pr93375.c: New test.

4 years agoc-family: One more 40752 tweak for unsigned char.
Jason Merrill [Thu, 23 Jan 2020 15:37:18 +0000 (10:37 -0500)]
c-family: One more 40752 tweak for unsigned char.

My last patch didn't fix all the failures on unsignd char targets.  We were
missing one warning because by suppressing -Wsign-conversion for the second
operand of + we missed an overflow that we want to warn about, and we
properly don't warn about unsigned / or %.

PR testsuite/93391 - PR 40752 test fails with unsigned plain char.
* c-warn.c (conversion_warning): Change -Wsign-conversion handling.
* lib/target-supports.exp (check_effective_target_unsigned_char):
New.

4 years agoEmit .note.GNU-stack for hard-float linux targets.
Dragan Mladjenovic [Thu, 23 Jan 2020 15:37:20 +0000 (16:37 +0100)]
Emit .note.GNU-stack for hard-float linux targets.

libgcc/ChangeLog:

2020-01-23  Dragan Mladjenovic  <dmladjenovic@wavecomp.com>

* config/mips/gnustack.h: Check for TARGET_LIBC_GNUSTACK also.

gcc/ChangeLog:

2020-01-23  Dragan Mladjenovic  <dmladjenovic@wavecomp.com>

* config.in: Regenerated.
* config/mips/linux.h (NEED_INDICATE_EXEC_STACK): Define to 1
for TARGET_LIBC_GNUSTACK.
* configure: Regenerated.
* configure.ac: Define TARGET_LIBC_GNUSTACK if glibc version is
found to be 2.31 or greater.

4 years agoEmit .note.GNU-stack for soft-float linux targets.
Dragan Mladjenovic [Thu, 23 Jan 2020 15:38:14 +0000 (16:38 +0100)]
Emit .note.GNU-stack for soft-float linux targets.

gcc/ChangeLog:

2020-01-23  Dragan Mladjenovic  <dmladjenovic@wavecomp.com>

* config/mips/linux.h (NEED_INDICATE_EXEC_STACK): Define to
TARGET_SOFT_FLOAT.
* config/mips/mips.c (TARGET_ASM_FILE_END): Define to ...
(mips_asm_file_end): New function. Delegate to
file_end_indicate_exec_stack if NEED_INDICATE_EXEC_STACK is true.
* config/mips/mips.h (NEED_INDICATE_EXEC_STACK): Define to 0.

libgcc/ChangeLog:

2020-01-23  Dragan Mladjenovic  <dmladjenovic@wavecomp.com>

* config/mips/gnustack.h: New file.
* config/mips/crti.S: Include gnustack.h.
* config/mips/crtn.S: Likewise.
* config/mips/mips16.S: Likewise.
* config/mips/vr4120-div.S: Likewise.

4 years agoi386: Fix ICEs on TImode signed overflow add/sub patterns [PR93376]
Jakub Jelinek [Thu, 23 Jan 2020 15:17:56 +0000 (16:17 +0100)]
i386: Fix ICEs on TImode signed overflow add/sub patterns [PR93376]

The following testcase ICEs, because during try_combine of i3:
(insn 18 17 19 2 (parallel [
            (set (reg:CCO 17 flags)
                (eq:CCO (plus:OI (sign_extend:OI (reg:TI 96))
                        (const_int 1 [0x1]))
                    (sign_extend:OI (plus:TI (reg:TI 96)
                            (const_int 1 [0x1])))))
            (set (reg:TI 98)
                (plus:TI (reg:TI 96)
                    (const_int 1 [0x1])))
        ]) "pr93376.c":8:10 223 {*addvti4_doubleword_1}
     (expr_list:REG_UNUSED (reg:TI 98)
        (expr_list:REG_DEAD (reg:TI 96)
            (nil))))
and i2:
(insn 17 37 18 2 (set (reg:TI 96)
        (const_wide_int 0x7fffffffffffffffffffffffffffffff)) "pr93376.c":8:10 65 {*movti_internal}
     (nil))
the eq in there gets simplified into:
(eq:CCO (const_wide_int 0x080000000000000000000000000000000)
    (const_wide_int 0x80000000000000000000000000000000))
and simplify-rtx.c tries to simplify it by simplifying MINUS
of the two operands.
Now, i386 defines MAX_BITSIZE_MODE_ANY_INT to 128, because OImode
and XImode are used mainly as a placeholder for the vector modes;
these new signed overflow patterns are an exception to that,
but what they really need is just TImode precision + 1 (maybe 2 worst case)
bits at any time.

wide-int.h defines WIDE_INT_MAX_ELTS in a way that it contains one more
HWI above number of HWIs to cover WIDE_INT_MAX_ELTS, so on i386 that is
3 HWIs, meaning that TImode precision + 1/2 bits is still representable in
there.  Unfortunately, the way wi::sub_large is implemented, it needs
not just those 3 HWIs, but one HWI above the maximum of the lengths of
both operands, which means it buffer overflows, overwrites the following
precision in wide_int_storage and ICEs later on.  The need for 4 HWIs is
only temporary, because canonize immediately after it canonicalizes it
back to 3 HWIs only.

The patch is something suggested by Richard S., avoid using OImode
for this and instead use a partial int mode that is smaller.

2020-01-23  Jakub Jelinek  <jakub@redhat.com>

PR target/93376
* config/i386/i386-modes.def (POImode): New mode.
(MAX_BITSIZE_MODE_ANY_INT): Change from 128 to 160.
* config/i386/i386.md (DPWI): New mode attribute.
(addv<mode>4, subv<mode>4): Use <DPWI> instead of <DWI>.
(QWI): Rename to...
(QPWI): ... this.  Use POI instead of OI for TImode.
(*addv<dwi>4_doubleword, *addv<dwi>4_doubleword_1,
*subv<dwi>4_doubleword, *subv<dwi>4_doubleword_1): Use <QPWI>
instead of <QWI>.

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

4 years agolibstdc++: Simplify makefile rule for largefile-config.h (PR91947)
Jonathan Wakely [Thu, 23 Jan 2020 14:02:32 +0000 (14:02 +0000)]
libstdc++: Simplify makefile rule for largefile-config.h (PR91947)

The previous rule could leave an incomplete file if the build was
interrupted, which would then not be remade if make was run again.

This makes the rule more robust by writing to a temporary file and only
moving it into place as the final step. It also simplifies the rule so
that only the essential macro definitions are written to the file, not
the explanatory comments and commented out #undef lines.

Also, the macro for enabling LFS on Mac OS X 10.5 is now set
unconditionally, which is a bug fix from upstream autoconf.

PR libstdc++/91947
* include/Makefile.am (${host_builddir}/largefile-config.h): Simplify
rule.
* include/Makefile.in: Regenerate.

4 years agoaarch64: Fix -mtrack-speculation for irreversible conditions [PR93341]
Richard Sandiford [Tue, 21 Jan 2020 10:31:13 +0000 (10:31 +0000)]
aarch64: Fix -mtrack-speculation for irreversible conditions [PR93341]

We can't yet represent the inverse of all conditions in rtl
(see g:865257c447cc50f5819e), triggering an ICE in the pass
that handles -mtrack-speculation.  Since we don't expect these
insns to be optimised in any way, the easiest fix seemed to be
to add an insn that reverses the condition internally.

2020-01-23  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR target/93341
* config/aarch64/aarch64.md (UNSPEC_SPECULATION_TRACKER_REV): New
unspec.
(speculation_tracker_rev): New pattern.
* config/aarch64/aarch64-speculation.cc (aarch64_do_track_speculation):
Use speculation_tracker_rev to track the inverse condition.

gcc/testsuite/
PR target/93341
* gcc.target/aarch64/pr93341.c: New test.

4 years agoanalyzer: introduce analyzer-torture.exp
David Malcolm [Tue, 19 Nov 2019 19:11:21 +0000 (14:11 -0500)]
analyzer: introduce analyzer-torture.exp

gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/data-model-3.c: Remove hardcoded "-O2" and move
to torture/conftest-1.c.
* gcc.dg/analyzer/torture/analyzer-torture.exp: New.
* gcc.dg/analyzer/torture/conftest-1.c: Move here from
analyzer/data-model-3.c.
* gcc.dg/analyzer/torture/poc.c: New test.

4 years agoRemove wrong bail out in prune_topn_counter.
Martin Liska [Thu, 23 Jan 2020 13:34:59 +0000 (14:34 +0100)]
Remove wrong bail out in prune_topn_counter.

* libgcov-driver.c (prune_topn_counter): Remove
check for -1 as we only prune run-time counters
that do not generate an invalid state.

4 years agoFix libgomp plugin-gcn bug
Andrew Stubbs [Wed, 22 Jan 2020 17:56:54 +0000 (17:56 +0000)]
Fix libgomp plugin-gcn bug

2020-01-23  Andrew Stubbs  <ams@codesourcery.com>

libgomp/
* plugin/plugin-gcn.c (parse_target_attributes): Use correct mask for
the device id.

4 years agotree-optimization/93354 FRE redundant store removal validity fix
Richard Biener [Thu, 23 Jan 2020 11:43:26 +0000 (12:43 +0100)]
tree-optimization/93354 FRE redundant store removal validity fix

This fixes tracking of the alias-set of partial defs for use by
redundant store removal.

2020-01-23  Richard Biener  <rguenther@suse.de>

PR tree-optimization/93381
* tree-ssa-sccvn.c (vn_walk_cb_data::push_partial_def): Take
alias-set of the def as argument and record the first one.
(vn_walk_cb_data::first_set): New member.
(vn_reference_lookup_3): Pass the alias-set of the current def
to push_partial_def.  Fix alias-set used in the aggregate copy
case.
(vn_reference_lookup): Consistently set *last_vuse_ptr.
* real.c (clear_significand_below): Fix out-of-bound access.

* gcc.dg/torture/pr93354.c: New testcase.

4 years agoi386: Use bzhi for x & ((1 << y) - 1) or x & ((1U << y) - 1) [PR93346]
Jakub Jelinek [Thu, 23 Jan 2020 11:39:13 +0000 (12:39 +0100)]
i386: Use bzhi for x & ((1 << y) - 1) or x & ((1U << y) - 1) [PR93346]

The bzhi patterns are quite complicated because they need to accurately
describe the behavior of the instruction for all input values.
The following patterns are simple and make bzhi recognizable even for
cases where not all input values are valid, because the user used
a shift, in which case the low 8 bit of the last operand need to be in
between 0 and precision-1.

2020-01-23  Jakub Jelinek  <jakub@redhat.com>

PR target/93346
* config/i386/i386.md (*bmi2_bzhi_<mode>3_2, *bmi2_bzhi_<mode>3_3):
New define_insn patterns.

* gcc.target/i386/pr93346.c: New test.

4 years agoPR c/84919 - bogus -Wrestrict on sprintf %p with destination as argument
Martin Sebor [Thu, 23 Jan 2020 10:37:02 +0000 (11:37 +0100)]
PR c/84919 - bogus -Wrestrict on sprintf %p with destination as argument

gcc/c-family/ChangeLog:

PR c/84919
* c-common.c (check_function_arguments): Avoid overlap checking
of sprintf functions.

gcc/testsuite/ChangeLog:

PR c/84919
* gcc.dg/Wrestrict-20.c: New test.

4 years agoaarch64: Skip whilele_1.C test for ILP32
Richard Sandiford [Tue, 21 Jan 2020 10:41:04 +0000 (10:41 +0000)]
aarch64: Skip whilele_1.C test for ILP32

The definitions of the integer types for ILP32 newlib make the
resolution of some of the bool-related tests ambiguous.

2020-01-23  Richard Sandiford  <richard.sandiford@arm.com>

gcc/testsuite/
* g++.target/aarch64/sve/acle/general-c++/whilele_1.C: Skip for ILP32.

4 years agoaarch64: Skip some SVE ACLE function-body tests for ILP32
Richard Sandiford [Mon, 20 Jan 2020 19:43:51 +0000 (19:43 +0000)]
aarch64: Skip some SVE ACLE function-body tests for ILP32

The load, store, prefetch and alias-check test functions require
extra zero extends for ILP32, so they don't match the expected function
bodies.  This patch therefore skips those parts of the tests for ILP32,
but keeps the compile/assemble parts.

2020-01-23  Richard Sandiford  <richard.sandiford@arm.com>

gcc/testsuite/
* gcc.target/aarch64/sve/acle/asm/ld1_f16.c: Skip check-function-bodies
test for ILP32.
* gcc.target/aarch64/sve/acle/asm/ld1_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_gather_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_gather_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_gather_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_gather_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1rq_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sb_gather_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sb_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sb_gather_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sb_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sb_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sb_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sb_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sb_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sb_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sb_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sh_gather_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sh_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sh_gather_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sh_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sh_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sh_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sh_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sh_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sw_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sw_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sw_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1sw_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ub_gather_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ub_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ub_gather_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ub_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ub_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ub_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ub_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ub_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ub_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ub_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uh_gather_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uh_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uh_gather_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uh_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uh_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uh_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uh_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uh_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uw_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uw_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uw_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1uw_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld2_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld2_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld2_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld2_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld2_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld2_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld2_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld2_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld2_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld2_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld2_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld3_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld3_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld3_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld3_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld3_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld3_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld3_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld3_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld3_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld3_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld3_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld4_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld4_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld4_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld4_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld4_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld4_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld4_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld4_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld4_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld4_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld4_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_gather_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_gather_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_gather_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_gather_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sb_gather_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sb_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sb_gather_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sb_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sb_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sb_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sb_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sb_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sb_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sb_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sh_gather_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sh_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sh_gather_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sh_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sh_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sh_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sh_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sh_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sw_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sw_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sw_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1sw_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1ub_gather_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1ub_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1ub_gather_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1ub_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1ub_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1ub_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1ub_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1ub_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1ub_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1ub_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uh_gather_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uh_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uh_gather_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uh_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uh_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uh_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uh_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uh_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uw_gather_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uw_gather_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uw_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldff1uw_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sb_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sb_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sb_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sb_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sb_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sb_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sh_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sh_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sh_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sh_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sw_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1sw_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1ub_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1ub_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1ub_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1ub_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1ub_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1ub_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1uh_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1uh_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1uh_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1uh_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1uw_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnf1uw_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnt1_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnt1_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnt1_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnt1_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnt1_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnt1_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnt1_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnt1_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnt1_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnt1_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ldnt1_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/prfb.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/prfb_gather.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/prfd.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/prfd_gather.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/prfh.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/prfh_gather.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/prfw.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/prfw_gather.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_scatter_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_scatter_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_scatter_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_scatter_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_scatter_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_scatter_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1b_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1b_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1b_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1b_scatter_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1b_scatter_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1b_scatter_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1b_scatter_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1b_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1b_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1b_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1h_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1h_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1h_scatter_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1h_scatter_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1h_scatter_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1h_scatter_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1h_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1h_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1w_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1w_scatter_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1w_scatter_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st1w_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st2_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st2_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st2_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st2_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st2_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st2_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st2_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st2_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st2_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st2_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st2_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st3_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st3_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st3_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st3_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st3_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st3_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st3_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st3_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st3_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st3_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st3_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st4_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st4_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st4_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st4_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st4_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st4_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st4_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st4_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st4_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st4_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/st4_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/stnt1_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/stnt1_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/stnt1_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/stnt1_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/stnt1_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/stnt1_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/stnt1_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/stnt1_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/stnt1_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/stnt1_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/stnt1_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/general/temporaries_1.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_f32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_f64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_s32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_s32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_u32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sw_gather_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sw_gather_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_s32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_u32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1uw_gather_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1uw_gather_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_f32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_f64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_s32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_u32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_s32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_u32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1w_scatter_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1w_scatter_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilerw_f16.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilerw_f32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilerw_f64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilerw_s16.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilerw_s32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilerw_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilerw_s8.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilerw_u16.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilerw_u32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilerw_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilerw_u8.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilewr_f16.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilewr_f32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilewr_f64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilewr_s16.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilewr_s32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilewr_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilewr_s8.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilewr_u16.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilewr_u32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilewr_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/whilewr_u8.c: Likewise.

4 years agotestsuite: Add target/xfail argument to check-function-bodies
Richard Sandiford [Mon, 20 Jan 2020 19:38:12 +0000 (19:38 +0000)]
testsuite: Add target/xfail argument to check-function-bodies

check-function-bodies allows individual function tests to be
annotated with target/xfail selectors, but sometimes it's
useful to have the same selector for all functions.

2020-01-23  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* doc/sourcebuild.texi (check-function-bodies): Add an
optional target/xfail selector.

gcc/testsuite/
* lib/scanasm.exp (check-function-bodies): Add an optional
target/xfail selector.

4 years agoauto-inc-dec: Don't add incs/decs to bare CLOBBERs [PR93124]
Richard Sandiford [Mon, 20 Jan 2020 18:28:38 +0000 (18:28 +0000)]
auto-inc-dec: Don't add incs/decs to bare CLOBBERs [PR93124]

In this PR, auto-inc-dec was trying to turn:

    (set (reg X) (plus (reg X) (const_int N)))
    (clobber (mem (reg X)))

into:

    (clobber (mem (pre_modify (reg X) ...)))

But bare clobber insns are just there to describe dataflow.  They're
not supposed to generate any code.

2020-01-23  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR rtl-optimization/93124
* auto-inc-dec.c (merge_in_block): Don't add auto inc/decs to
bare USE and CLOBBER insns.

gcc/testsuite/
* gcc.dg/torture/pr93124.c: New test.

4 years agogotest: explicitly skip type descriptors
Ian Lance Taylor [Wed, 22 Jan 2020 23:52:23 +0000 (15:52 -0800)]
gotest: explicitly skip type descriptors

Type descriptors are normally weak and nm will report them as V,
so we will skip them when collecting the list of symbols.
But when not using GNU nm, they may be reported as D,
so also skip them in symstogo.

This fixes go/doc/check on Solaris.

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

4 years agoanalyzer: fix ICE due to sm-state origin being purged (PR 93382)
David Malcolm [Wed, 22 Jan 2020 14:37:18 +0000 (09:37 -0500)]
analyzer: fix ICE due to sm-state origin being purged (PR 93382)

The ICE in PR analyzer/93382 is a validation error.

The global variable "idx" acquires a "tainted" state from local array
n1[0].  When the frame is popped, the svalue for n1[0] is purged, but
the "taint" sm_state_map's entry for "idx" has a svalue_id referencing
the now-purged svalue.  This is caught by program_state::validate as an
assertion failure.

This patch fixes the issue by resetting the origin id within
sm_state_map entries for the case where the origin id has been purged.

gcc/analyzer/ChangeLog:
PR analyzer/93382
* program-state.cc (sm_state_map::on_svalue_purge): If the
entry survives, but the origin is being purged, then reset the
origin to null.

gcc/testsuite/ChangeLog:
PR analyzer/93382
* gcc.dg/analyzer/pr93382.c: New test.

4 years agoanalyzer: fix build with --enable-checking=release
David Malcolm [Wed, 22 Jan 2020 20:43:08 +0000 (15:43 -0500)]
analyzer: fix build with --enable-checking=release

When adding namespaces to the analyzer in
r10-6151-g75038aa6aa5b562e6358108619d66ef2ccab9a53
I messed up the nesting of the #endif for #if CHECKING_P
and the closing of namespace ana.

This patch fixes it.

gcc/analyzer/ChangeLog:
* sm-signal.cc: Fix nesting of CHECKING_P and namespace ana.

4 years agoFix patchable-function-entry on arc
Andrew Pinski [Wed, 22 Jan 2020 23:34:34 +0000 (23:34 +0000)]
Fix patchable-function-entry on arc

The problem here is arc looks at current_output_insn unconditional
but sometimes current_output_insn is NULL.  With patchable-function-entry,
it will be. This is similar to how the nios2, handles "%.".

Committed as obvious after a simple test with -fpatchable-function-entry=1.

ChangeLog:
* config/arc/arc.c (output_short_suffix): Check insn for nullness.

4 years agoRevert "Allow tree-ssa.exp to be run by itself" and move some testcases
Andrew Pinski [Thu, 23 Jan 2020 00:40:19 +0000 (00:40 +0000)]
Revert "Allow tree-ssa.exp to be run by itself" and move some testcases

This reverts commit 9085381f1931cc3667412c8fff91878184835901 as it was
causing default dg-do to be set incorrectly on most targets.
Instead move testcases that are vect related testcase that
use "dg-require-effective-target vect_*" to the vect test area.

ChangeLog:
* gcc.dg/tree-ssa/pr88497-1.c: Move to ...
* gcc.dg/vect/pr88497-1.c: This.
* gcc.dg/tree-ssa/pr88497-2.c: Move to ...
* gcc.dg/vect/pr88497-2.c: This.
* gcc.dg/tree-ssa/pr88497-3.c: Move to ...
* gcc.dg/vect/pr88497-3.c: This.
* gcc.dg/tree-ssa/pr88497-4.c: Move to ...
* gcc.dg/vect/pr88497-4.c: This.
* gcc.dg/tree-ssa/pr88497-5.c: Move to ...
* gcc.dg/vect/pr88497-5.c: This.
* gcc.dg/tree-ssa/pr88497-6.c: Move to ...
* gcc.dg/vect/pr88497-6.c: This.
* gcc.dg/tree-ssa/pr88497-7.c: Move to ...
* gcc.dg/vect/pr88497-7.c: This.

Revert:
* tree-ssa.exp: Set DEFAULT_VECTCFLAGS and DEFAULT_VECTCFLAGS.
Call check_vect_support_and_set_flags also.

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

4 years agoruntime: for Solaris, add osinit, and drop duplicate getncpu
Ian Lance Taylor [Wed, 22 Jan 2020 19:06:03 +0000 (11:06 -0800)]
runtime: for Solaris, add osinit, and drop duplicate getncpu

Fixes a build breakage introduced in the 1.14beta1 upgrade.

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

4 years agointernal/syscall/unix: use getrandom_linux_generic.go on arm64be
Andrew Pinski [Sat, 18 Jan 2020 01:43:01 +0000 (01:43 +0000)]
internal/syscall/unix: use getrandom_linux_generic.go on arm64be

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

4 years agoc-family: Fix problems with blender and PPC from PR 40752 patch.
Jason Merrill [Wed, 22 Jan 2020 19:21:06 +0000 (14:21 -0500)]
c-family: Fix problems with blender and PPC from PR 40752 patch.

blender in SPEC is built with -funsigned-char, which is also the default on
PPC, and exposed -Wsign-conversion issues that weren't seen by the x86_64
testsuite.  In blender we were complaining about operands to an expression
that we didn't't previously complain about as a whole.  So only check
operands after we check the whole expression.  Also, to fix the PR 40752
testcases on -funsigned-char targets, don't consider -Wsign-conversion for
the second operand of PLUS_EXPR, especially since fold changes
"x - 5" to "x + (-5)".  And don't use SCHAR_MAX with plain char.

PR testsuite/93391 - PR 40752 test fails with unsigned plain char.
PR c++/40752
* c-warn.c (conversion_warning): Check operands only after checking
the whole expression.  Don't check second operand of + for sign.

4 years agoc-family: Remove location parm from unsafe_conversion_p.
Jason Merrill [Wed, 22 Jan 2020 19:12:55 +0000 (14:12 -0500)]
c-family: Remove location parm from unsafe_conversion_p.

My earlier change removed the warning calls from this function, so the
location is no longer useful.

* c-common.c (unsafe_conversion_p): Remove location parm.

4 years agoAllow tree-ssa.exp to be run by itself
Andrew Pinski [Mon, 20 Jan 2020 22:10:32 +0000 (22:10 +0000)]
Allow tree-ssa.exp to be run by itself

tree-ssa testcases sometimes check autovect effective target
but does not set it up.  On MIPS, those testcases fail with
some TCL error messages.  This fixes the issue by calling
check_vect_support_and_set_flags inside tree-ssa.exp.
There might be other .exp files which need to be done this
way too but I have not checked all of them.

Tested on x86_64-linux-gnu and a cross to mips64-octeon-linux-gnu.
Both full run of the testsuite and running tree-ssa.exp by itself.

testsuite/ChangeLog:
* tree-ssa.exp: Set DEFAULT_VECTCFLAGS and DEFAULT_VECTCFLAGS.
Call check_vect_support_and_set_flags also.

4 years agoanalyzer: fix usage of "_setjmp" in test for PR 93378
David Malcolm [Wed, 22 Jan 2020 20:00:59 +0000 (15:00 -0500)]
analyzer: fix usage of "_setjmp" in test for PR 93378

gcc/testsuite/ChangeLog:
PR analyzer/93378
* gcc.dg/analyzer/setjmp-pr93378.c: Use setjmp rather than
_setjmp.

4 years agoanalyzer: fix setjmp handling with -g (PR 93378)
David Malcolm [Wed, 22 Jan 2020 16:45:58 +0000 (11:45 -0500)]
analyzer: fix setjmp handling with -g (PR 93378)

PR analyzer/93378 reports an ICE at -O1 -g when analyzing a rewind via
longjmp to a setjmp call with.

The root cause is that the rewind_info_t::get_setjmp_call attempts to
locate the setjmp GIMPLE_CALL via within the exploded_node containing
it, but the exploded_node has two stmts: a GIMPLE_DEBUG, then the
GIMPLE_CALL, and so erroneously picks the GIMPLE_DEBUG, leading to
a failed as_a <const gcall *>.

This patch reworks how the analyzer stores information about a setjmp
so that instead of storing an exploded_node *, it instead introduces
a "setjmp_record" struct, for use by both setjmp_svalue and
rewind_info_t.  Hence we store the information directly, rather than
attempting to reconstruct it, fixing the bug.

gcc/analyzer/ChangeLog:
PR analyzer/93378
* engine.cc (setjmp_svalue::compare_fields): Update for
replacement of m_enode with m_setjmp_record.
(setjmp_svalue::add_to_hash): Likewise.
(setjmp_svalue::get_index): Rename...
(setjmp_svalue::get_enode_index): ...to this.
(setjmp_svalue::print_details): Update for replacement of m_enode
with m_setjmp_record.
(exploded_node::on_longjmp): Likewise.
* exploded-graph.h (rewind_info_t::m_enode_origin): Replace...
(rewind_info_t::m_setjmp_record): ...with this.
(rewind_info_t::rewind_info_t): Update for replacement of m_enode
with m_setjmp_record.
(rewind_info_t::get_setjmp_point): Likewise.
(rewind_info_t::get_setjmp_call): Likewise.
* region-model.cc (region_model::dump_summary_of_map): Likewise.
(region_model::on_setjmp): Likewise.
* region-model.h (struct setjmp_record): New struct.
(setjmp_svalue::m_enode): Replace...
(setjmp_svalue::m_setjmp_record): ...with this.
(setjmp_svalue::setjmp_svalue): Update for replacement of m_enode
with m_setjmp_record.
(setjmp_svalue::clone): Likewise.
(setjmp_svalue::get_index): Rename...
(setjmp_svalue::get_enode_index): ...to this.
(setjmp_svalue::get_exploded_node): Replace...
(setjmp_svalue::get_setjmp_record): ...with this.

gcc/testsuite/ChangeLog:
PR analyzer/93378
* gcc.dg/analyzer/setjmp-pr93378.c: New test.

4 years agoanalyzer: testsuite fixes for alloca, getpass, and setjmp (PR 93316)
David Malcolm [Wed, 22 Jan 2020 01:45:48 +0000 (02:45 +0100)]
analyzer: testsuite fixes for alloca, getpass, and setjmp (PR 93316)

PR analyzer/93316 reports various testsuite failures where I
accidentally relied on properties of x86_64-pc-linux-gnu.

The following patch fixes them on sparc-sun-solaris2.11 (gcc211 in the
GCC compile farm), and, I hope, the other configurations showing
failures.

There may still be other failures for pattern-test-2.c, which I'm
tracking separately as PR analyzer/93291.

gcc/analyzer/ChangeLog:
PR analyzer/93316
* analyzer.cc (is_setjmp_call_p): Check for "setjmp" as well as
"_setjmp".

gcc/testsuite/ChangeLog:
PR analyzer/93316
* gcc.dg/analyzer/data-model-1.c: Include <alloca.h>.
* gcc.dg/analyzer/malloc-1.c: Likewise.
* gcc.dg/analyzer/malloc-callbacks.c (get_alloca): Return
__builtin_alloca rather than alloca.
* gcc.dg/analyzer/malloc-paths-8.c: Include <alloca.h>.
* gcc.dg/analyzer/sensitive-1.c: Define __EXTENSIONS__ before
including unistd.h.
* gcc.dg/analyzer/setjmp-2.c: Replace include of <setjmp.h>
with "test-setjmp.h" and usage of setjmp with new SETJMP macro.
* gcc.dg/analyzer/setjmp-3.c: Likewise.
* gcc.dg/analyzer/setjmp-4.c: Likewise.
* gcc.dg/analyzer/setjmp-5.c: Likewise.
* gcc.dg/analyzer/setjmp-6.c: Likewise.
* gcc.dg/analyzer/setjmp-7.c: Likewise.
* gcc.dg/analyzer/setjmp-7a.c: Likewise.
* gcc.dg/analyzer/setjmp-8.c: Likewise.
* gcc.dg/analyzer/setjmp-9.c: Likewise.
* gcc.dg/analyzer/test-setjmp.h: New header.

4 years agoanalyzer: introduce namespace to avoid ODR clashes (PR 93307)
David Malcolm [Fri, 17 Jan 2020 14:50:33 +0000 (09:50 -0500)]
analyzer: introduce namespace to avoid ODR clashes (PR 93307)

PR analyzer/93307 reports that in an LTO bootstrap, there are ODR
violations between:
- the "region" type:
    gcc/analyzer/region-model.h:792
  vs:
    gcc/sched-int.h:1443
- the "constraint" type:
    gcc/analyzer/constraint-manager.h:121
  vs:
    gcc/tree-ssa-structalias.c:533

This patches solves this clash by putting all of the analyzer names
within a namespace.  I chose "ana" as it is short (to save typing).
The analyzer selftests are moved from namespace "selftest" to
"ana::selftest".

There are various places where the namespace has to be closed
and reopened, to allow e.g. for specializations of templates
in the global namespace.

gcc/analyzer/ChangeLog:
PR analyzer/93307
* analysis-plan.h: Wrap everything namespace "ana".
* analyzer-logging.cc: Likewise.
* analyzer-logging.h: Likewise.
* analyzer-pass.cc (pass_analyzer::execute): Update for "ana"
namespace.
* analyzer-selftests.cc: Wrap everything namespace "ana".
* analyzer-selftests.h: Likewise.
* analyzer.h: Likewise for forward decls of types.
* call-string.h: Likewise.
* checker-path.cc: Likewise.
* checker-path.h: Likewise.
* constraint-manager.cc: Likewise.
* constraint-manager.h: Likewise.
* diagnostic-manager.cc: Likewise.
* diagnostic-manager.h: Likewise.
* engine.cc: Likewise.
* engine.h: Likewise.
* exploded-graph.h: Likewise.
* function-set.cc: Likewise.
* function-set.h: Likewise.
* pending-diagnostic.cc: Likewise.
* pending-diagnostic.h: Likewise.
* program-point.cc: Likewise.
* program-point.h: Likewise.
* program-state.cc: Likewise.
* program-state.h: Likewise.
* region-model.cc: Likewise.
* region-model.h: Likewise.
* sm-file.cc: Likewise.
* sm-malloc.cc: Likewise.
* sm-pattern-test.cc: Likewise.
* sm-sensitive.cc: Likewise.
* sm-signal.cc: Likewise.
* sm-taint.cc: Likewise.
* sm.cc: Likewise.
* sm.h: Likewise.
* state-purge.h: Likewise.
* supergraph.cc: Likewise.
* supergraph.h: Likewise.

gcc/ChangeLog:
PR analyzer/93307
* gdbinit.in (break-on-saved-diagnostic): Update for move of
diagnostic_manager into "ana" namespace.
* selftest-run-tests.c (selftest::run_tests): Update for move of
selftest::run_analyzer_selftests to
ana::selftest::run_analyzer_selftests.

4 years agoruntime: call runtime_nanotime1, not runtime_nanotime
Ian Lance Taylor [Wed, 22 Jan 2020 14:30:43 +0000 (06:30 -0800)]
runtime: call runtime_nanotime1, not runtime_nanotime

The function name was changed in 1.14beta1. Fix the non-x86, non-s390 code.

Fixes golang/go#36694

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

4 years agoPR c++/92907 - noexcept does not consider "const" in member functions.
Marek Polacek [Tue, 21 Jan 2020 22:38:54 +0000 (17:38 -0500)]
PR c++/92907 - noexcept does not consider "const" in member functions.

Here the problem is that if the noexcept specifier is used in the context
of a const member function, const is not considered for the member variables,
leading to a bogus error.  g's const makes its 'this' const, so the first
overload of f should be selected.

In cp_parser_noexcept_specification_opt we inject 'this', but always
unqualified:
25737           if (current_class_type)
25738             inject_this_parameter (current_class_type, TYPE_UNQUALIFIED);
so we need to pass the function's qualifiers down here.  In
cp_parser_direct_declarator it's easy: use the just parsed cv_quals, in
cp_parser_late_noexcept_specifier look at the 'this' parameter to figure it
out.

2020-01-22  Marek Polacek  <polacek@redhat.com>

PR c++/92907 - noexcept does not consider "const" in member functions.
* parser.c (cp_parser_lambda_declarator_opt): Pass the proper
qualifiers to cp_parser_exception_specification_opt.
(cp_parser_direct_declarator): Pass the function qualifiers to
cp_parser_exception_specification_opt.
(cp_parser_class_specifier_1): Pass the function declaration to
cp_parser_late_noexcept_specifier.
(cp_parser_late_noexcept_specifier): Add a tree parameter.  Use it to
pass the qualifiers of the function to
cp_parser_noexcept_specification_opt.
(cp_parser_noexcept_specification_opt): New cp_cv_quals parameter.
Use it in inject_this_parameter.
(cp_parser_exception_specification_opt): New cp_cv_quals parameter.
Use it.
(cp_parser_transaction): Pass TYPE_UNQUALIFIED to
cp_parser_noexcept_specification_opt.
(cp_parser_transaction_expression): Likewise.

* g++.dg/cpp0x/noexcept56.C: New test.

4 years agoPR c++/93324 - ICE with -Wall on constexpr if.
Marek Polacek [Wed, 22 Jan 2020 16:44:13 +0000 (11:44 -0500)]
PR c++/93324 - ICE with -Wall on constexpr if.

This is a crash with constexpr if, when trying to see if the call in
the if-statement is std::is_constant_evaluated.

cp_get_callee_fndecl_nofold can return NULL_TREE and fndecl_built_in_p
doesn't expect to get a null tree, so check FNDECL first.

4 years agoFix a couple of memory leaks in the C++ frontend
Patrick Palka [Thu, 16 Jan 2020 21:46:40 +0000 (16:46 -0500)]
Fix a couple of memory leaks in the C++ frontend

The leak in get_mapped_args is due to auto_vec not properly supporting
destructible elements in that auto_vec's destructor doesn't call the
destructors of its elements.

gcc/cp/ChangeLog:

* constraint.cc (get_mapped_args): Avoid using auto_vec
as a vector element.  Release the vectors inside the lists
vector.
* parser.c (cp_literal_operator_id): Free the buffer.

4 years agocfgexpand: Update partition size when merging variables
Richard Sandiford [Tue, 21 Jan 2020 18:22:38 +0000 (18:22 +0000)]
cfgexpand: Update partition size when merging variables

cfgexpand sorts variables by decreasing size, so when merging a later
variable into an earlier one, there's usually no need to update the
merged size.

But for poly_int sizes, the sort function just uses a lexicographical
comparison of the coefficients, so e.g. 2X+2 comes before 0X+32.
Which is bigger depends on the runtime value of X.

This patch therefore takes the upper bound of the two sizes, which
is conservatively correct for variable-length vectors and a no-op
on other targets.

It's probably a bad idea to merge fixed-length and variable-length
variables in practice, but that's really an optimisation decision.
I think we should have this patch as a correctness fix either way.

This is easiest to test using the ACLE, but in principle it could happen
for autovectorised code too, e.g. when using OpenMP vector variables.
It's therefore a regression from GCC 8.

2020-01-22  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* cfgexpand.c (union_stack_vars): Update the size.

gcc/testsuite/
* gcc.target/aarch64/sve/acle/general/stack_vars_1.c: New test.

4 years agoFix TOP N counter update.
Martin Liska [Wed, 22 Jan 2020 12:40:12 +0000 (13:40 +0100)]
Fix TOP N counter update.

PR tree-optimization/92924
* libgcov-profiler.c (__gcov_topn_values_profiler_body): First
try to find an existing value, then find an empty slot
if not found.

4 years agoSkip gcc.target/aarch64/sve/tls_preserve* for emultls targets
Richard Sandiford [Tue, 21 Jan 2020 16:52:49 +0000 (16:52 +0000)]
Skip gcc.target/aarch64/sve/tls_preserve* for emultls targets

These tests are supposed to be testing the tlsdesc handling and
so don't apply to emultls targets.

2020-01-22  Richard Sandiford  <richard.sandiford@arm.com>

gcc/testsuite/
* gcc.target/aarch64/sve/tls_preserve_1.c: Require tls_native.
* gcc.target/aarch64/sve/tls_preserve_2.c: Likewise.
* gcc.target/aarch64/sve/tls_preserve_3.c: Likewise.

4 years agoFix gcc.target/aarch64/sve/sel_3.c for big-endian targets
Richard Sandiford [Tue, 21 Jan 2020 16:45:55 +0000 (16:45 +0000)]
Fix gcc.target/aarch64/sve/sel_3.c for big-endian targets

A pasto in this test meant that we needed extra reverse instructions
for big-endian targets.

2020-01-22  Richard Sandiford  <richard.sandiford@arm.com>

gcc/testsuite/
* gcc.target/aarch64/sve/sel_3.c (permute_vnx4sf): Take __SVFloat32_t
rather than __SVFloat16_t

4 years agoExtend r279588 to g++.dg/ext/sve-sizeless-1.C
Richard Sandiford [Tue, 21 Jan 2020 16:42:27 +0000 (16:42 +0000)]
Extend r279588 to g++.dg/ext/sve-sizeless-1.C

In r279588 I'd for some reason only patched g++.dg/ext/sve-sizeless-2.C,
even though g++.dg/ext/sve-sizeless-1.C has the same problem.

2020-01-22  Richard Sandiford  <richard.sandiford@arm.com>

gcc/testsuite/
* g++.dg/ext/sve-sizeless-1.C: Don't expect an error for alias
templates.

4 years agotree-optimization/93381 fix integer offsetting in points-to analysis
Richard Biener [Wed, 22 Jan 2020 11:38:12 +0000 (12:38 +0100)]
tree-optimization/93381 fix integer offsetting in points-to analysis

We were incorrectly assuming a merge operation is conservative enough
for not explicitely handled operations but we also need to consider
offsetting within fields when field-sensitive analysis applies.

2020-01-22  Richard Biener  <rguenther@suse.de>

PR tree-optimization/93381
* tree-ssa-structalias.c (find_func_aliases): Assume offsetting
throughout, handle all conversions the same.

* gcc.dg/torture/pr93381.c: New testcase.

4 years agoaarch64: Fix aarch64_expand_subvti constant handling [PR93335]
Jakub Jelinek [Wed, 22 Jan 2020 11:28:16 +0000 (12:28 +0100)]
aarch64: Fix aarch64_expand_subvti constant handling [PR93335]

The two patterns that call aarch64_expand_subvti ensure that {low,high}_in1
is a register, while {low,high}_in2 can be a register or immediate.
subdi3_compare1_imm uses the aarch64_plus_immediate predicate for its last
two operands (the value and negated value), but aarch64_expand_subvti calls
it whenever low_in2 is a CONST_INT, which leads to ICEs during vregs pass,
as the emitted insn is not recognized as valid subdi3_compare1_imm.
The following patch fixes that by only using subdi3_compare1_imm if it is ok
to do so, and otherwise force the constant into register and use the
non-immediate version - subdi3_compare1.
Furthermore, previously the code was calling force_reg on high_in2 only if
low_in2 is CONST_INT, on the (reasonable) assumption is that only if low_in2
is a CONST_INT, high_in2 can be non-REG, but with the above changes even in
the else we might have CONST_INT and force_reg doesn't do anything if the
operand is already a REG, so this patch calls it unconditionally.

2020-01-22  Jakub Jelinek  <jakub@redhat.com>

PR target/93335
* config/aarch64/aarch64.c (aarch64_expand_subvti): Only use
gen_subdi3_compare1_imm if low_in2 satisfies aarch64_plus_immediate
predicate, not whenever it is CONST_INT.  Otherwise, force_reg it.
Call force_reg on high_in2 unconditionally.

* gcc.c-torture/compile/pr93335.c: New test.

4 years agoSmart relaxation of TOP N counter.
Martin Liska [Wed, 22 Jan 2020 11:08:11 +0000 (12:08 +0100)]
Smart relaxation of TOP N counter.

PR tree-optimization/92924
* profile.c (compute_value_histograms): Divide
all counter values.
PR tree-optimization/92924
* libgcov-driver.c (prune_topn_counter): New.
(prune_counters): Likewise.
(dump_one_gcov): Prune a run-time counter.
* libgcov-profiler.c (__gcov_topn_values_profiler_body):
For a known value, add GCOV_TOPN_VALUES to value.
Otherwise, decrement all counters by one.

4 years agocontrib: script to create a new vendor branch
Richard Earnshaw [Wed, 22 Jan 2020 10:06:50 +0000 (10:06 +0000)]
contrib: script to create a new vendor branch

This script is intended to create a new vendor branch.  Doing so is
not completely obvious if you are not familiar with the upstream
structure, so this takes the pain out of getting it right.

It doesn't check out the branch locally, but does set everything up so
that, if you have push enabled for your vendor branches, then

  git push vendors/<vendor> <branch>

will work as expected.

Run the script as

  contrib/git-add-vendor-branch.sh <vendor>/<branch> <start-point>

the <vendor> space must have previously been set up in the way
git-fetch-vendor.sh expects.

    * git-add-vendor-branch.sh: New file.

4 years agoi386: Fix up -fdollars-in-identifiers with identifiers starting with $ in -masm=att...
Jakub Jelinek [Wed, 22 Jan 2020 09:22:16 +0000 (10:22 +0100)]
i386: Fix up -fdollars-in-identifiers with identifiers starting with $ in -masm=att [PR91298]

In AT&T syntax leading $ is special, so if we have identifiers that start
with dollar, we usually fail to assemble it (or assemble incorrectly).
As mentioned in the PR, what works is wrapping the identifiers inside of
parens, like:
movl $($a), %eax
leaq ($a)(,%rdi,4), %rax
movl ($a)(%rip), %eax
movl ($a)+16(%rip), %eax
.globl $a
.type $a, @object
.size $a, 72
$a:
.string "$a"
.quad ($a)
(this is x86_64 -fno-pic -O2).  In some places ($a) is not accepted,
like as .globl operand, in .type, .size, so the patch overrides
ASM_OUTPUT_SYMBOL_REF rather than e.g. ASM_OUTPUT_LABELREF.
I didn't want to duplicate what assemble_name is doing (following
transparent aliases), so split assemble_name into two parts; just
mere looking at the first character of a name before calling assemble_name
wouldn't be good enough, a transparent alias could lead from a name
not starting with $ to one starting with it and vice versa.

2020-01-22  Jakub Jelinek  <jakub@redhat.com>

PR target/91298
* output.h (assemble_name_resolve): Declare.
* varasm.c (assemble_name_resolve): New function.
(assemble_name): Use it.
* config/i386/i386.h (ASM_OUTPUT_SYMBOL_REF): Define.

* gcc.target/i386/pr91298-1.c: New test.
* gcc.target/i386/pr91298-2.c: New test.

4 years agoopenmp: Fix up !$omp target parallel handling
Jakub Jelinek [Wed, 22 Jan 2020 08:54:59 +0000 (09:54 +0100)]
openmp: Fix up !$omp target parallel handling

The PR93329 fix revealed we ICE on !$omp target parallel, this change fixes
that.

2020-01-22  Jakub Jelinek  <jakub@redhat.com>

* parse.c (parse_omp_structured_block): Handle ST_OMP_TARGET_PARALLEL.
* trans-openmp.c (gfc_trans_omp_target)
<case EXEC_OMP_TARGET_PARALLEL>: Call pushlevel first.

* gfortran.dg/gomp/target-parallel1.f90: New test.
* gfortran.dg/goacc/pr93329.f90: Enable commented out target parallel
test.

4 years agoopenmp: Teach omp_code_to_statement about rest of OpenMP statements
Jakub Jelinek [Wed, 22 Jan 2020 08:50:53 +0000 (09:50 +0100)]
openmp: Teach omp_code_to_statement about rest of OpenMP statements

The omp_code_to_statement function added with the initial OpenACC support
only handled small subset of the OpenMP statements, leading to ICE if
any other OpenMP directive appeared inside of OpenACC directive.

2020-01-22  Jakub Jelinek  <jakub@redhat.com>

PR fortran/93329
* openmp.c (omp_code_to_statement): Handle remaining EXEC_OMP_*
cases.

* gfortran.dg/goacc/pr93329.f90: New test.

4 years agolibgo: update to Go1.14beta1
Ian Lance Taylor [Thu, 2 Jan 2020 23:05:27 +0000 (15:05 -0800)]
libgo: update to Go1.14beta1

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

4 years agoAdd error check on return value of build_co_await
JunMa [Tue, 21 Jan 2020 02:29:34 +0000 (10:29 +0800)]
Add error check on return value of build_co_await

gcc/cp/ChangeLog
* coroutines.cc (finish_co_await_expr): Add error check on return
value of build_co_await.
(finish_co_yield_expr): Ditto.

4 years agoAdd error messages for missing methods of awaitable class
JunMa [Thu, 21 Nov 2019 00:51:22 +0000 (08:51 +0800)]
Add error messages for missing methods of awaitable class

gcc/cp/ChangeLog
         * coroutines.cc (lookup_awaitable_member): Lookup an awaitable member.
         (lookup_promise_method): Emit diagnostic when get NULL_TREE back only.
         (build_co_await): Use lookup_awaitable_member instead of lookup_member.

gcc/testsuite/ChangeLog
         * g++.dg/coroutines/coro1-missing-await-method.C: New test.

4 years agoUpdate update_web_docs_svn references in sourcebuild.texi.
Joseph Myers [Wed, 22 Jan 2020 01:36:00 +0000 (01:36 +0000)]
Update update_web_docs_svn references in sourcebuild.texi.

These needed updating after the replacement of update_web_docs_svn by
update_web_docs_git.

* doc/sourcebuild.texi (Texinfo Manuals, Front End): Refer to
update_web_docs_git instead of update_web_docs_svn.

4 years agoFix target/93119 (aarch64): ICE with traditional TLS support on ILP32
Andrew Pinski [Fri, 17 Jan 2020 06:54:53 +0000 (06:54 +0000)]
Fix target/93119 (aarch64): ICE with traditional TLS support on ILP32

The problem here was g:23b88fda665d2f995c was not a complete fix
for supporting tranditional TLS on ILP32.

So the problem here is a couple of things, first __tls_get_addr
call will return a C pointer value so we need to use ptr_mode
when we are creating the call.  Then we need to convert
back that register to the correct mode, either zero extending
it or just creating a move instruction.
Also symbol_ref can either be in SImode or DImode.  So we need to
allow both modes.

Built and tested on aarch64-linux-gnu with no regressions.
Also built a full toolchain (including glibc) defaulting to traditional
TLS that targets ilp32 and lp64.

ChangeLog:
PR target/93119
* config/aarch64/aarch64.md (tlsgd_small_<mode>): Have operand 0
as PTR mode. Have operand 1 as being modeless, it can be P mode.
(*tlsgd_small_<mode>): Likewise.
* config/aarch64/aarch64.c (aarch64_load_symref_appropriately)
<case SYMBOL_SMALL_TLSGD>: Call gen_tlsgd_small_* with a ptr_mode
register.  Convert that register back to dest using convert_mode.

4 years agoFix ICE with cast of division by zero (PR c/93348).
Joseph Myers [Wed, 22 Jan 2020 01:23:42 +0000 (01:23 +0000)]
Fix ICE with cast of division by zero (PR c/93348).

Bug 93348 reports an ICE on certain cases of casts of expressions that
may appear only in unevaluated parts of integer constant expressions,
arising from the generation of nested C_MAYBE_CONST_EXPRs.  This patch
fixes it by adding a call to remove_c_maybe_const_expr in the
integer-operands case, as is done in other similar cases.

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

PR c/93348
gcc/c:
* c-typeck.c (build_c_cast): Call remove_c_maybe_const_expr on
argument with integer operands.

gcc/testsuite:
* gcc.c-torture/compile/pr93348-1.c: New test.

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

4 years agoanalyzer: fix qsort issue with array_region keys (PR 93352)
David Malcolm [Tue, 21 Jan 2020 17:42:36 +0000 (12:42 -0500)]
analyzer: fix qsort issue with array_region keys (PR 93352)

PR analyzer/93352 reports a qsort failure
  "comparator not anti-symmetric: -2147483648, -2147483648)"
within the analyzer on code involving an array access of [0x7fffffff + 1].

The issue is that array_region (which uses int for keys into known
values in the array) uses subtraction to implement int_cmp for sorting
the keys, which isn't going to work for boundary values.

Potentially a wider type should be used, but for now this patch fixes
the ICE by using explicit comparisons rather than subtraction to
implement the qsort callback.

gcc/analyzer/ChangeLog:
PR analyzer/93352
* region-model.cc (int_cmp): Rename to...
(array_region::key_cmp): ...this, using key_t rather than int.
Rewrite in terms of comparisons rather than subtraction to
ensure qsort is anti-symmetric when handling extreme values.
(array_region::walk_for_canonicalization): Update for above
renaming.
* region-model.h (array_region::key_cmp): New decl.

gcc/testsuite/ChangeLog:
PR analyzer/93352
* gcc.dg/analyzer/pr93352.c: New test.

4 years agoPR c++/40752 - useless -Wconversion with short +=.
Jason Merrill [Tue, 7 Jan 2020 17:20:26 +0000 (12:20 -0500)]
PR c++/40752 - useless -Wconversion with short +=.

This is a longstanding issue with lots of duplicates; people are not
interested in a -Wconversion warning about mychar += 1.  So now that warning
depends on -Warith-conversion; otherwise we only warn if operands of the
arithmetic have conversion issues.

* c.opt (-Warith-conversion): New.
* c-warn.c (conversion_warning): Recurse for operands of
operators.  Only warn about the whole expression with
-Warith-conversion.

4 years agoHandle -Wsign-conversion in conversion_warning.
Jason Merrill [Fri, 10 Jan 2020 17:49:03 +0000 (12:49 -0500)]
Handle -Wsign-conversion in conversion_warning.

It seemed strange to me to warn about sign conversion in
unsafe_conversion_p, when other warnings are in conversion_warning, and the
latter function is the only place that asks the former function to warn.
This change is also necessary for my -Warith-conversion patch.

* c-common.c (unsafe_conversion_p): Don't warn, return UNSAFE_SIGN.
* c-warn.c (conversion_warning): Warn about UNSAFE_SIGN.

4 years agoRISC-V: Fix rtl checking enabled failure with -msave-restore.
Jim Wilson [Tue, 21 Jan 2020 23:20:19 +0000 (15:20 -0800)]
RISC-V: Fix rtl checking enabled failure with -msave-restore.

Found with an rtl checking enabled build and check.  This triggered failures
in the gcc.target/riscv/save-restore* tests.  We are using XINT to access an
XWINT value; INTVAL is the preferred solution.

gcc/
* config/riscv/riscv-sr.c (riscv_sr_match_prologue): Use INTVAL
instead of XINT.

4 years agoMore uses of effective-target march_option for cris
Hans-Peter Nilsson [Tue, 21 Jan 2020 23:09:14 +0000 (00:09 +0100)]
More uses of effective-target march_option for cris

* gcc.target/cris/asm-v8.S, gcc.target/cris/inasm-v8.c,
gcc.target/cris/sync-1.c: Apply effective_target_march_option.

Oops.  A few stragglers, same as recent update: differing
-march=... options is an error, noticed with e.g.
"make check RUNTESTFLAGS=--target_board=cris-sim/arch=v10"

4 years agoi386: Do GNU2 TLS address computation in ptr_mode
H.J. Lu [Tue, 21 Jan 2020 22:09:53 +0000 (14:09 -0800)]
i386: Do GNU2 TLS address computation in ptr_mode

Since GNU2 TLS address from glibc run-time is in ptr_mode, we should do
GNU2 TLS address computation in ptr_mode and zero-extend result to Pmode.

gcc/

PR target/93319
* config/i386/i386.c (ix86_tls_module_base): Replace Pmode
with ptr_mode.
(legitimize_tls_address): Do GNU2 TLS address computation in
ptr_mode and zero-extend result to Pmode.
*  config/i386/i386.md (@tls_dynamic_gnu2_64_<mode>): Replace
:P with :PTR and Pmode with ptr_mode.
(*tls_dynamic_gnu2_lea_64_<mode>): Likewise.
(*tls_dynamic_gnu2_call_64_<mode>): Likewise.
(*tls_dynamic_gnu2_combine_64_<mode>): Likewise.

gcc/testsuite/

PR target/93319
* gcc.target/i386/pr93319-1a.c: Don't include <stdio.h>.
(test1): Replace printf with __builtin_printf.

4 years agoPR c++/60855 - ICE with sizeof VLA capture.
Jason Merrill [Tue, 21 Jan 2020 19:21:49 +0000 (14:21 -0500)]
PR c++/60855 - ICE with sizeof VLA capture.

For normal captures we usually look through them within unevaluated context,
but that doesn't work here; trying to take the sizeof of the array in the
enclosing scope tries and fails to evaluate a SAVE_EXPR from the enclosing
scope.

* lambda.c (is_lambda_ignored_entity): Don't look past VLA capture.

4 years agoPR c++/90732 - ICE with VLA capture and generic lambda.
Jason Merrill [Tue, 21 Jan 2020 18:22:35 +0000 (13:22 -0500)]
PR c++/90732 - ICE with VLA capture and generic lambda.

We were failing to handle VLA capture in tsubst_lambda_expr; initially
building a DECLTYPE_TYPE for the capture and then tsubsting it doesn't give
the special VLA handling.  So with this patch we call add_capture again for
VLAs.

* pt.c (tsubst_lambda_expr): Repeat add_capture for VLAs.

4 years ago[coro] Fix co_await of void type.
Iain Sandoe [Tue, 21 Jan 2020 20:42:17 +0000 (20:42 +0000)]
[coro] Fix co_await of void type.

gcc/cp
2020-01-21  Iain Sandoe  <iain@sandoe.co.uk>
    Bin Cheng  <bin.cheng@linux.alibaba.com>

* coroutines.cc (coro_promise_type_found_p): Check for NULL return
from complete_type_or_else.
(register_param_uses): Likewise.
(build_co_await): Do not try to use complete_type_or_else for void
types, otherwise for incomplete types, check for NULL return from
complete_type_or_else.

gcc/testsuite
2020-01-21  Bin Cheng  <bin.linux@linux.alibaba.com>

* g++.dg/coroutines/co-await-void_type.C: New test.

4 years agoriscv: Fix up riscv_rtx_costs for RTL checking (PR target/93333)
Jakub Jelinek [Tue, 21 Jan 2020 20:43:03 +0000 (21:43 +0100)]
riscv: Fix up riscv_rtx_costs for RTL checking (PR target/93333)

As mentioned in the PR, during combine rtx_costs can be called sometimes
even on RTL that has not been validated yet and so can contain even operands
that aren't valid in any instruction.

2020-01-21  Jakub Jelinek  <jakub@redhat.com>

PR target/93333
* config/riscv/riscv.c (riscv_rtx_costs) <case ZERO_EXTRACT>: Verify
the last two operands are CONST_INT_P before using them as such.

* gcc.c-torture/compile/pr93333.c: New test.

4 years agoFix line terminator pattern in testcase.
Sandra Loosemore [Tue, 21 Jan 2020 19:20:45 +0000 (11:20 -0800)]
Fix line terminator pattern in testcase.

I observed this testcase was failing on nios2-elf.  The more general
regexp was copied from other tests using dg-output.

2020-01-21  Sandra Loosemore  <sandra@codesourcery.com>

gcc/testsuite/
* g++.dg/coroutines/torture/mid-suspend-destruction-0.C: Generalize
line terminators in patterns.

4 years agoaarch64: Use stdint types for SVE ACLE elements
Richard Sandiford [Sun, 10 Nov 2019 22:38:42 +0000 (22:38 +0000)]
aarch64: Use stdint types for SVE ACLE elements

I'd used mode-based element types in the SVE ACLE implementation, but
it turns out that they don't correspond to the <stdint.h> types used by
ILP32 newlib.  GCC already knows what the correct <stdint.h> types are,
I just wasn't using the right interface to find them.

A consequence of this is that ILP32 newlib code needs to cast "int *"
pointers to "int32_t *" before passing them to s32 loads and stores,
since int32_t is defined as "long int" rather than "int".  That matches
the normal C++ overloading behaviour for this target, where passing
"int *" to:

    void f(int32_t *);
    void f(int64_t *);

would be ambiguous.  It also matches the corresponding <arm_neon.h>
behaviour.

2020-01-21  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* config/aarch64/aarch64-sve-builtins.def: Use get_typenode_from_name
to get the integer element types.

gcc/testsuite/
* gcc.target/aarch64/sve/acle/general-c/load_1.c (f1): Cast to
int32_t * rather than int *.
* gcc.target/aarch64/sve/acle/general-c/load_2.c (f1): Likewise.
* gcc.target/aarch64/sve/acle/general-c/load_gather_sv_1.c
(f1): Likewise.
* gcc.target/aarch64/sve/acle/general-c/load_gather_sv_2.c
(f1): Likewise.
* gcc.target/aarch64/sve/acle/general-c/load_gather_sv_restricted_1.c
(f1): Likewise.
* gcc.target/aarch64/sve/acle/general-c/load_replicate_1.c
(f1): Likewise.
* gcc.target/aarch64/sve/acle/general-c/store_1.c (f1): Likewise.
* gcc.target/aarch64/sve/acle/general-c/store_2.c (f1): Likewise.
* gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c
(f1): Likewise.
* gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c
(f1): Likewise.
* gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c
(f1): Likewise.

4 years agoaarch64: Fix SVE ACLE handling of SImode pointers
Richard Sandiford [Mon, 20 Jan 2020 19:29:25 +0000 (19:29 +0000)]
aarch64: Fix SVE ACLE handling of SImode pointers

This long-overdue patch promotes SImode pointers to DImode addresses,
avoiding various ICEs in the existing tests.

2020-01-21  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* config/aarch64/aarch64-sve-builtins.h
(function_expander::convert_to_pmode): Declare.
* config/aarch64/aarch64-sve-builtins.cc
(function_expander::convert_to_pmode): New function.
(function_expander::get_contiguous_base): Use it.
(function_expander::prepare_gather_address_operands): Likewise.
* config/aarch64/aarch64-sve-builtins-sve2.cc
(svwhilerw_svwhilewr_impl::expand): Likewise.

4 years ago[AArch64] PR92424: Fix -fpatchable-function-entry=N,M with BTI
Szabolcs Nagy [Wed, 15 Jan 2020 12:23:40 +0000 (12:23 +0000)]
[AArch64] PR92424: Fix -fpatchable-function-entry=N,M with BTI

This is a workaround that emits a BTI after the function label if that
is followed by a patch area. We try to remove the BTI that follows the
patch area (this may fail e.g. if the first instruction is a PACIASP).

So before this commit -fpatchable-function-entry=3,1 with bti generates

    .section __patchable_function_entries
    .8byte .LPFE
    .text
  .LPFE:
    nop
  foo:
    nop
    nop
    bti c // or paciasp
    ...

and after this commit

    .section __patchable_function_entries
    .8byte .LPFE
    .text
  .LPFE:
    nop
  foo:
    bti c
    nop
    nop
    // may be paciasp
    ...

and with -fpatchable-function-entry=1 (M=0) the code now is

  foo:
    bti c
    .section __patchable_function_entries
    .8byte .LPFE
    .text
  .LPFE:
    nop
    // may be paciasp
    ...

There is a new bti insn in the middle of the patchable area users need
to be aware of unless M=0 (patch area is after the new bti) or M=N
(patch area is before the label, no new bti). Note: bti is not added to
all functions consistently (it can be turned off per function using a
target attribute or the compiler may detect that the function is never
called indirectly), so if bti is inserted in the middle of a patch area
then user code needs to deal with detecting it.

Tested on aarch64-none-linux-gnu.

gcc/ChangeLog:

PR target/92424
* config/aarch64/aarch64.c (aarch64_declare_function_name): Set
cfun->machine->label_is_assembled.
(aarch64_print_patchable_function_entry): New.
(TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY): Define.
* config/aarch64/aarch64.h (struct machine_function): New field,
label_is_assembled.

gcc/testsuite/ChangeLog:

PR target/92424
* gcc.target/aarch64/pr92424-1.c: New test.
* gcc.target/aarch64/pr92424-2.c: New test.
* gcc.target/aarch64/pr92424-3.c: New test.

4 years agoipa-profile.c: reset call_sums state within ipa-profile.c (v2; PR 93315)
David Malcolm [Tue, 14 Jan 2020 16:32:13 +0000 (11:32 -0500)]
ipa-profile.c: reset call_sums state within ipa-profile.c (v2; PR 93315)

gcc/ChangeLog:
PR ipa/93315
* ipa-profile.c (ipa_profile): Delete call_sums and set it to
NULL on exit.

4 years ago[AArch64] effective_target for aarch64 f64mm asm
Matthew Malcomson [Tue, 21 Jan 2020 15:44:03 +0000 (15:44 +0000)]
[AArch64] effective_target for aarch64 f64mm asm

Commit 9ceec73 introduced intrinsics for the AArch64 FP64 matrix
multiply instructions.  These require binutils support for the same
instructions.

This patch adds a DejaGNU test to ensure this binutils support is there
and uses it in the files that need this test.

Testing Done:
Checked on a cross-compiler that:
Tests running for binutils commit e264b5b7a are listed as UNSUPPORTED.
Tests running for binutils commit 26916852e all pass.

gcc/testsuite/ChangeLog:

2020-01-21  Matthew Malcomson  <matthew.malcomson@arm.com>

* gcc.target/aarch64/sve/acle/asm/ld1ro_f16.c: Use require
directive.
* gcc.target/aarch64/sve/acle/asm/ld1ro_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/ld1ro_u8.c: Likewise.
* lib/target-supports.exp: Add assembly requirement directive.

4 years agoFix updating of call_stmt_site_hash
Jan Hubicka [Tue, 21 Jan 2020 15:33:43 +0000 (16:33 +0100)]
Fix updating of call_stmt_site_hash

This patch fixes ICE causes by call stmt site hash going out of sync.  For
speculative edges it is assumed to contain a direct call so if we are
removing it hashtable needs to be updated.  I realize that the code is ugly
but I will leave cleanup for next stage1.

Bootstrapped/regtested x86_64-linux. This patch makes it possible to build
Firefox again.

PR lto/93318
* cgraph.c (cgraph_edge::resolve_speculation,
cgraph_edge::redirect_call_stmt_to_callee): Fix update of
call_stmt_site_hash.

4 years agoPR c++/91476 - anon-namespace reference temp clash between TUs.
Jason Merrill [Mon, 20 Jan 2020 18:27:10 +0000 (13:27 -0500)]
PR c++/91476 - anon-namespace reference temp clash between TUs.

The problem in the PR was that make_temporary_var_for_ref_to_temp ran before
determine_visibility, so when we copied the linkage of the reference
variable it had not yet been restricted by its anonymous namespace context,
so the temporary wrongly ended up with TREE_PUBLIC set.  The natural
solution is to run determine_visibility earlier.  But that needs to happen
after maybe_commonize_var increases the linkage of some local variables, and
on targets without weak symbol support, that function does different things
based on the results of check_initializer, which is what calls
make_temporary_var_for_ref_to_temp.  To break this circular dependency I'm
calling maybe_commonize_var early, and then again later if the target
doesn't support weak symbols.

It also occurred to me that make_temporary_var_for_ref_to_temp wasn't
handling DECL_VISIBILITY at all, and verified that we were doing the wrong
thing.  So I've combined the linkage-copying code from there and two other
places.

* decl2.c (copy_linkage): Factor out of get_guard.
* call.c (make_temporary_var_for_ref_to_temp): Use it.
* decl.c (cp_finish_decomp): Use it.
(cp_finish_decl): determine_visibility sooner.

4 years agoRemove dead variable.
Martin Liska [Tue, 21 Jan 2020 14:53:34 +0000 (15:53 +0100)]
Remove dead variable.

* config/rs6000/rs6000.c (common_mode_defined): Remove
unused variable.

4 years agoFortran] PR93309 – permit repeated 'implicit none(external)'
Tobias Burnus [Tue, 21 Jan 2020 12:42:11 +0000 (13:42 +0100)]
Fortran] PR93309 – permit repeated 'implicit none(external)'

        PR fortran/93309
        * interface.c (gfc_procedure_use): Also check parent namespace for
        'implict none (external)'.
        * symbol.c (gfc_get_namespace): Don't set has_implicit_none_export
        to parent namespace's setting.

        PR fortran/93309
        * gfortran.dg/external_implicit_none_2.f90: New.

4 years agotree-optimization/92328 fix value-number with bogus type
Richard Biener [Tue, 21 Jan 2020 09:37:18 +0000 (10:37 +0100)]
tree-optimization/92328 fix value-number with bogus type

We were actually value-numbering two entities with different type
the same rather than just having the same representation in the
hashtable.  The following fixes that by wrapping the value in a
to be inserted VIEW_CONVERT_EXPR.

2020-01-21  Richard Biener  <rguenther@suse.de>

PR tree-optimization/92328
* tree-ssa-sccvn.c (vn_reference_lookup_3): Preserve
type when value-numbering same-sized store by inserting a
VIEW_CONVERT_EXPR.
(eliminate_dom_walker::eliminate_stmt): When eliminating
a redundant store handle bit-reinterpretation of the same value.

* gcc.dg/torture/pr92328.c: New testcase.

4 years agoChange recursive prepare_block_for_update to use a worklist
Andrew Pinski [Tue, 21 Jan 2020 08:34:42 +0000 (08:34 +0000)]
Change recursive prepare_block_for_update to use a worklist

Reported as PR 93321, prepare_block_for_update with some huge
recusive inlining can go past the stack limit. Transforming this
recursive into worklist improves the stack usage here and we no
longer seg fault for the testcase.  Note the order we walk the siblings
change.

ChangeLog:
PR tree-opt/93321
* tree-into-ssa.c (prepare_block_for_update_1): Split out from ...
(prepare_block_for_update): This.  Use a worklist instead of recursing.

4 years ago[PATCH, GCC/ARM] Fix clear_operation_p uninitialised variable
Mihail Ionescu [Tue, 21 Jan 2020 10:11:35 +0000 (10:11 +0000)]
[PATCH, GCC/ARM] Fix clear_operation_p uninitialised variable

2020-01-21  Mihail-Calin Ionescu  <mihail.ionescu@arm.com>

* gcc/config/arm/arm.c (clear_operation_p):
Initialise last_regno, skip first iteration
based on the first_set value and use ints instead
of the unnecessary HOST_WIDE_INTs.

4 years agopowerpc: Fix ICE with fp conditional move (PR target/93073)
Jakub Jelinek [Tue, 21 Jan 2020 08:17:27 +0000 (09:17 +0100)]
powerpc: Fix ICE with fp conditional move (PR target/93073)

The following testcase ICEs, because for TFmode the particular subtraction
pattern (*subtf3) is not enabled with the given options.  Using
expand_simple_binop instead of emitting the subtraction by hand just moves
the ICE one insn later, NEG of ABS is not then recognized, etc., but
ultimately the problem is that when rs6000_emit_cmove is called for floating
point operand mode (and earlier condition ensures that in that case
compare_mode is also floating point), the expander makes sure the
operand mode is SFDF, but for the comparison mode nothing checks it, yet
there is just one *fsel* pattern with 2 separate SFDF iterators.

The following patch fixes it by giving up if compare_mode is not SFmode or
DFmode.

2020-01-21  Jakub Jelinek  <jakub@redhat.com>

PR target/93073
* config/rs6000/rs6000.c (rs6000_emit_cmove): If using fsel, punt for
compare_mode other than SFmode or DFmode.

* gcc.target/powerpc/pr93073.c: New test.

4 years agoAdd runtime ISA check for amdgcn offloading
Frederik Harwath [Mon, 20 Jan 2020 06:45:43 +0000 (07:45 +0100)]
Add runtime ISA check for amdgcn offloading

The HSA/ROCm runtime rejects binaries not built for the exact GPU device
present. So far, the libgomp amdgcn plugin does not verify that the GPU ISA
and the ISA specified at compile time match before handing over the binary to
the runtime.  In case of a mismatch, the user is confronted with an unhelpful
runtime error.

This commit implements a runtime ISA check. In case of an ISA mismatch, the
execution is aborted with a clear error message and a hint at the correct
compilation parameters for the GPU on which the execution has been attempted.

libgomp/
* plugin/plugin-gcn.c (EF_AMDGPU_MACH): New enum.
* (EF_AMDGPU_MACH_MASK): New constant.
* (gcn_isa): New typedef.
* (gcn_gfx801_s): New constant.
* (gcn_gfx803_s): New constant.
* (gcn_gfx900_s): New constant.
* (gcn_gfx906_s): New constant.
* (gcn_isa_name_len): New constant.
* (elf_gcn_isa_field): New function.
* (isa_hsa_name): New function.
* (isa_gcc_name): New function.
* (isa_code): New function.
* (struct agent_info): Add field "device_isa" and remove field
"gfx900_p".
* (GOMP_OFFLOAD_init_device): Adapt agent init to "agent_info"
field changes, fail if device has unknown ISA.
* (parse_target_attributes): Replace "gfx900_p" by "device_isa".
* (isa_matches_agent): New function ...
* (create_and_finalize_hsa_program): ... used from here to check
that the GPU ISA and the code-object ISA match.

4 years agoFix false warning messages about missing return in coroutine.
Bin Cheng [Tue, 21 Jan 2020 04:16:16 +0000 (12:16 +0800)]
Fix false warning messages about missing return in coroutine.

The patch sets current_function_returns_value flag in templates for
all co_return/co_yield/co_await cases, as well as for ramp function.

gcc/cp/ChangeLog
    * coroutines.cc (finish_co_await_expr): Set return value flag.
    (finish_co_yield_expr, morph_fn_to_coro): Ditto.

gcc/testsuite/ChangeLog
    * g++.dg/coroutines/co-return-warning-1.C: New test.

4 years agoRISC-V: Disallow regrenme if the TO register never used before for interrupt functions
Kito Cheng [Fri, 17 Jan 2020 11:49:15 +0000 (19:49 +0800)]
RISC-V: Disallow regrenme if the TO register never used before for interrupt functions

gcc/ChangeLog

PR target/93304
* config/riscv/riscv-protos.h (riscv_hard_regno_rename_ok): New.
* config/riscv/riscv.c (riscv_hard_regno_rename_ok): New.
* config/riscv/riscv.h (HARD_REGNO_RENAME_OK): Defined.

gcc/testsuite/ChangeLog

PR target/93304
* gcc.target/riscv/pr93304.c: New test.

4 years agoDaily bump.
GCC Administrator [Tue, 21 Jan 2020 00:16:31 +0000 (00:16 +0000)]
Daily bump.

4 years agolibstdc++: Fix recent documentation changes
Jonathan Wakely [Mon, 20 Jan 2020 20:37:52 +0000 (20:37 +0000)]
libstdc++: Fix recent documentation changes

* doc/xml/faq.xml: Fix grammar.
* doc/xml/manual/appendix_contributing.xml: Improve instructions.
* doc/xml/manual/spine.xml: Update copyright years.
* doc/html/*: Regenerate.

4 years agoUpdate GCC zh_TW.po.
Joseph Myers [Mon, 20 Jan 2020 18:56:48 +0000 (18:56 +0000)]
Update GCC zh_TW.po.

* zh_TW.po: Update.

4 years agoUpdate OpenACC tests for amdgcn
Andrew Stubbs [Thu, 14 Nov 2019 16:16:04 +0000 (16:16 +0000)]
Update OpenACC tests for amdgcn

2020-01-20  Andrew Stubbs  <ams@codesourcery.com>

libgomp/
* testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c: Skip test on gcn.
* testsuite/libgomp.oacc-c-c++-common/loop-dim-default.c (main):
Adjust test dimensions for amdgcn.
* testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c (main): Adjust
gang/worker/vector expectations dynamically.
* testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c
(main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c (main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c (main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c (main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c (main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c (main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-v-1.c (main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-w-1.c (main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c (main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/parallel-dims.c
(acc_gang): Recognise acc_device_radeon.
(acc_worker): Likewise.
(acc_vector): Likewise.
(main): Set expectations for amdgcn.
* testsuite/libgomp.oacc-c-c++-common/routine-gwv-1.c
(main): Adjust gang/worker/vector expectations dynamically.
* testsuite/libgomp.oacc-c-c++-common/routine-v-1.c (main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/routine-w-1.c (main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/routine-wv-1.c (main): Likewise.
* testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c: Set expectations
for amdgcn.

4 years ago[AArch64] Set jump-align=4 for neoversen1
Wilco Dijkstra [Mon, 20 Jan 2020 14:29:40 +0000 (14:29 +0000)]
[AArch64] Set jump-align=4 for neoversen1

Testing shows the setting of 32:16 for jump alignment has a significant
codesize cost, however it doesn't make a difference in performance.
So set jump-align to 4 to get 1.6% codesize improvement.

gcc/
* config/aarch64/aarch64.c (neoversen1_tunings): Set jump_align to 4.

4 years agoFix PR 93242: patchable-function-entry broken on MIPS
Andrew Pinski [Sat, 18 Jan 2020 00:41:06 +0000 (00:41 +0000)]
Fix PR 93242: patchable-function-entry broken on MIPS

On MIPS, .set noreorder/reorder needs to emitted around
the nop.  The template for the nop instruction uses %(/%) to
do that.  But default_print_patchable_function_entry uses
fprintf rather than output_asm_insn to output the instruction.

This fixes the problem by using output_asm_insn to emit the nop
instruction.

ChangeLog:

PR middle-end/93242
* targhooks.c (default_print_patchable_function_entry): Use
output_asm_insn to emit the nop instruction.

4 years agoPR testsuite/92829 - several -Wstringop-overflow test case failures on powerpc64
Martin Sebor [Mon, 20 Jan 2020 13:53:33 +0000 (14:53 +0100)]
PR testsuite/92829 - several -Wstringop-overflow test case failures on powerpc64

* g++.dg/warn/Wstringop-overflow-4.C: Adjust test to avoid failures
due to an aparrent VRP limtation.
* gcc.dg/Wstringop-overflow-25.c: Same.

4 years agoAlign __patchable_function_entries to POINTER_SIZE [PR93194]
Fangrui Song [Wed, 8 Jan 2020 04:46:26 +0000 (20:46 -0800)]
Align __patchable_function_entries to POINTER_SIZE [PR93194]

2020-01-20  Fangrui Song  <maskray@google.com>

gcc/
PR middle-end/93194
* targhooks.c (default_print_patchable_function_entry): Align to
POINTER_SIZE.

4 years ago[PR 80005] Fix __has_include
Nathan Sidwell [Mon, 20 Jan 2020 13:39:59 +0000 (05:39 -0800)]
[PR 80005]  Fix __has_include

__has_include is funky in that it is macro-like from the POV of #ifdef and
friends, but lexes its parenthesize argument #include-like.  We were
failing the second part of that, because we used a forwarding macro to an
internal name, and hence always lexed the argument in macro-parameter
context.  We componded that by not setting the right flag when lexing, so
it didn't even know.  Mostly users got lucky.

This reimplements the handline.
1) Remove the forwarding, but declare object-like macros that
expand to themselves.  This satisfies the #ifdef requirement

2) Correctly set angled_brackets when lexing the parameter.  This tells
the lexer (a) <...> is a header name and (b) "..." is too (not a string).

3) Remove the in__has_include lexer state, just tell find_file that that's
what's happenning, so it doesn't emit an error.

We lose the (undocumented) ability to #undef __has_include.  That may well
have been an accident of implementation.  There are no tests for it.

We gain __has_include behaviour for all users of the preprocessors -- not
just the C-family ones that defined a forwarding macro.

libcpp/
PR preprocessor/80005
* include/cpplib.h (BT_HAS_ATTRIBUTE): Fix comment.
* internal.h (struct lexer_state): Delete in__has_include field.
(struct spec_nodes): Rename n__has_include{,_next}__ fields.
(_cpp_defined_macro_p): New.
(_cpp_find_file): Add has_include parm.
* directives.c (lex_macro_node): Combine defined,
__has_inline{,_next} checking.
(do_ifdef, do_ifndef): Use _cpp_defined_macro_p.
(_cpp_init_directives): Refactor.
* expr.c (parse_defined): Use _cpp_defined_macro_p.
(eval_token): Adjust parse_has_include calls.
(parse_has_include): Add OP parameter.  Reimplement.
* files.c (_cpp_find_file): Add HAS_INCLUDE parm.  Use it to
inhibit error message.
(_cpp_stack_include): Adjust _cpp_find_file call.
(_cpp_fake_include, _cpp_compare_file_date): Likewise.
(open_file_failed): Remove in__has_include check.
(_cpp_has_header): Adjust _cpp_find_file call.
* identifiers.c (_cpp_init_hashtable): Don't init
__has_include{,_next} here ...
* init.c (cpp_init_builtins): ... init them here.  Define as
macros.
(cpp_read_main_file): Adjust _cpp_find_file call.
* pch.c (cpp_read_state): Adjust __has_include{,_next} access.
* traditional.c (_cpp_scan_out_locgical_line): Likewise.

gcc/c-family/
PR preprocessor/80005
* c-cppbuiltins.c (c_cpp_builtins): Don't define __has_include{,_next}.

gcc/testsuite/
PR preprocessor/80005
* g++.dg/cpp1y/feat-cxx14.C: Adjust.
* g++.dg/cpp1z/feat-cxx17.C: Adjust.
* g++.dg/cpp2a/feat-cxx2a.C: Adjust.
* g++.dg/cpp/pr80005.C: New.

4 years ago[PATCH] PR Fortran/93263 Correct test case
Mark Eggleston [Mon, 20 Jan 2020 13:23:07 +0000 (13:23 +0000)]
[PATCH] PR Fortran/93263 Correct test case

Should've have checked for the existance of a non static integer
using scan-tree-dump instead of scan-tree-dump-not. A cut and paste
error.

4 years agox32: Add x32 support to -mtls-dialect=gnu2
H.J. Lu [Mon, 20 Jan 2020 13:02:14 +0000 (05:02 -0800)]
x32: Add x32 support to -mtls-dialect=gnu2

To add x32 support to -mtls-dialect=gnu2, we need to replace DI with
P in GNU2 TLS patterns.  Since DEST set by tls_dynamic_gnu2_64 is in
ptr_mode, PLUS in GNU2 TLS address computation must be done in ptr_mode
to support -maddress-mode=long.  Also replace the "{q}" suffix on lea
with "%z0" to support both 32-bit and 64-bit destination register.

Tested on Linux/x86-64.

gcc/

PR target/93319
* config/i386/i386.c (legitimize_tls_address): Pass Pmode to
gen_tls_dynamic_gnu2_64.  Compute GNU2 TLS address in ptr_mode.
* config/i386/i386.md (tls_dynamic_gnu2_64): Renamed to ...
(@tls_dynamic_gnu2_64_<mode>): This.  Replace DI with P.
(*tls_dynamic_gnu2_lea_64): Renamed to ...
(*tls_dynamic_gnu2_lea_64_<mode>): This.  Replace DI with P.
Remove the {q} suffix from lea.
(*tls_dynamic_gnu2_call_64): Renamed to ...
(*tls_dynamic_gnu2_call_64_<mode>): This.  Replace DI with P.
(*tls_dynamic_gnu2_combine_64): Renamed to ...
(*tls_dynamic_gnu2_combine_64_<mode>): This.  Replace DI with P.
Pass Pmode to gen_tls_dynamic_gnu2_64.

gcc/testsuite/

PR target/93319
* gcc.target/i386/pr93319-1a.c: New test.
* gcc.target/i386/pr93319-1b.c: Likewise.
* gcc.target/i386/pr93319-1c.c: Likewise.
* gcc.target/i386/pr93319-1d.c: Likewise.

4 years ago[AArch64] Set SLOW_BYTE_ACCESS
Wilco Dijkstra [Mon, 20 Jan 2020 13:09:15 +0000 (13:09 +0000)]
[AArch64] Set SLOW_BYTE_ACCESS

Contrary to all documentation, SLOW_BYTE_ACCESS simply means accessing
bitfields by their declared type, which results in better codegeneration.

gcc/
* config/aarch64/aarch64.h (SLOW_BYTE_ACCESS): Set to 1.

4 years agoaarch64: Remove parameter name and ATTRIBUTE_UNUSED
Richard Sandiford [Sat, 18 Jan 2020 14:49:39 +0000 (14:49 +0000)]
aarch64: Remove parameter name and ATTRIBUTE_UNUSED

2020-01-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* config/aarch64/aarch64-sve-builtins-base.cc
(svld1ro_impl::memory_vector_mode): Remove parameter name.

4 years agodebug/92763 keep DIEs that might be used in DW_TAG_inlined_subroutine
Richard Biener [Mon, 20 Jan 2020 09:36:09 +0000 (10:36 +0100)]
debug/92763 keep DIEs that might be used in DW_TAG_inlined_subroutine

We were pruning type-local subroutine DIEs if their context is unused
despite us later needing those DIEs as abstract origins for inlines.
The patch makes code already present for -fvar-tracking-assignments
unconditional.

2020-01-20  Richard Biener  <rguenther@suse.de>

PR debug/92763
* dwarf2out.c (prune_unused_types): Unconditionally mark
called function DIEs.

* g++.dg/debug/pr92763.C: New testcase.

4 years agocontrib: New remotes structure for vendor and personal refs
Richard Earnshaw [Mon, 20 Jan 2020 10:37:29 +0000 (10:37 +0000)]
contrib: New remotes structure for vendor and personal refs

The initial structure for vendor and personal branches makes use of
the default remote (normally origin) for the upstream
repository).  Unfortunately, this causes some confusion, especially for
personal branches because a push will not push to the correct upstream
location.  This can be 'fixed' by adding a push refspec for the remote,
but that has the unfortunate consequence of breaking the push.default
behaviour for git push, and it becomes too easy to accidentally commit
something unintended to the main parts of the repository.

To work around this, this patch changes the configuration to use
separate 'remotes' for these additional refs, with one remote for the
personal space and another remote for each vendor's space.  The
personal space is called after the user's preferred branch-space
prefix (default 'me'), the vendor spaces are called
vendors/<vendor-name>.

As far as possible, I've made the script automatically restructure any
existing fetch or push lines that earlier versions of the scripts may
have created - the gcc-git-customization.sh script will convert all
vendor refs that it can find, so it is not necessary to re-add any
vendors you've already added.

You might, however, want to run
  git remote prune <origin>
after running to clean up any stale upstream-refs that might still be
in your local repo, and then
  git fetch vendors/<vendor>
or
  git fetch <me>
to re-populate the remotes/ structures.

Also, for any branch you already have that tracks a personal or vendor
branch upstream, you might need to run
  git config branch.<name>.remote <new-remote>

so that merges and pushes go to the right place (I haven't attempted
to automate this last part).

For vendors, the new structure means that

  git checkout -b <vendor>/<branch> remotes/vendors/<vendor>/<branch>

will correctly set up a remote tracking branch.

Please be aware that if you have multiple personal branches set up, then

  git push <me>

will still consider all of them for pushing.  If you only want to push
one branch, then either write
  git push <me> HEAD
or
  git push <me> <me>/branch
as appropriate.

And don't forget '-n' (--dry-run) to see what would be done if this
were not a dry run.

Finally, now that the vendors spaces are isolated from each other and
from the other spaces, I've added an option "--enable-push" to
git-fetch-vendor.sh.  If passed, then a "push" spec will be added for
that vendor to enable pushing to the upstream.  If you re-run the
script for the same vendor without the option, the push spec will be
removed.

* gcc-git-customization.sh: Check that user-supplied remote
name exists before continuting.  Use a separate remotes for the
personal commit area.  Convert existing personal and vendor
fetch rules to new layout.
* git-fetch-vendor.sh: New vendor layout.  Add --enable-push
option.

4 years agoAdd testcase of PR c++/92536, already fixed.
Paolo Carlini [Mon, 20 Jan 2020 10:17:19 +0000 (11:17 +0100)]
Add testcase of PR c++/92536, already fixed.

PR c++/92536
* g++.dg/cpp1z/pr92536.C: New.

4 years agoRecord outer non-cleanup region in TREE EH.
Martin Liska [Mon, 20 Jan 2020 10:10:30 +0000 (11:10 +0100)]
Record outer non-cleanup region in TREE EH.

PR tree-optimization/93199
* tree-eh.c (struct leh_state): Add
new field outer_non_cleanup.
(cleanup_is_dead_in): Pass leh_state instead
of eh_region.  Add a checking that state->outer_non_cleanup
points to outer non-clean up region.
(lower_try_finally): Record outer_non_cleanup
for this_state.
(lower_catch): Likewise.
(lower_eh_filter): Likewise.
(lower_eh_must_not_throw): Likewise.
(lower_cleanup): Likewise.

4 years agotree-optimization/93094 pass down VECTORIZED_CALL to versioning
Richard Biener [Wed, 15 Jan 2020 13:25:38 +0000 (14:25 +0100)]
tree-optimization/93094 pass down VECTORIZED_CALL to versioning

When versioning is run the IL is already mangled and finding
a VECTORIZED_CALL IFN can fail.

2020-01-20  Richard Biener  <rguenther@suse.de>

PR tree-optimization/93094
* tree-vectorizer.h (vect_loop_versioning): Adjust.
(vect_transform_loop): Likewise.
* tree-vectorizer.c (try_vectorize_loop_1): Pass down
loop_vectorized_call to vect_transform_loop.
* tree-vect-loop.c (vect_transform_loop): Pass down
loop_vectorized_call to vect_loop_versioning.
* tree-vect-loop-manip.c (vect_loop_versioning): Use
the earlier discovered loop_vectorized_call.

* gcc.dg/vect/pr93094.c: New testcase.