1. 23 Jan, 2020 19 commits
    • i386: Fix ICEs on TImode signed overflow add/sub patterns [PR93376] · c124b345
      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.
      Jakub Jelinek committed
    • libstdc++: Simplify makefile rule for largefile-config.h (PR91947) · 04681fca
      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.
      Jonathan Wakely committed
    • aarch64: Fix -mtrack-speculation for irreversible conditions [PR93341] · 2214053f
      We can't yet represent the inverse of all conditions in rtl
      (see g:865257c4), 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.
      Richard Sandiford committed
    • analyzer: introduce analyzer-torture.exp · d16db16e
      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.
      David Malcolm committed
    • Remove wrong bail out in prune_topn_counter. · e9ee848d
      	* libgcov-driver.c (prune_topn_counter): Remove
      	check for -1 as we only prune run-time counters
      	that do not generate an invalid state.
      Martin Liska committed
    • Fix libgomp plugin-gcn bug · 14e5e746
      2020-01-23  Andrew Stubbs  <ams@codesourcery.com>
      
      	libgomp/
      	* plugin/plugin-gcn.c (parse_target_attributes): Use correct mask for
      	the device id.
      Andrew Stubbs committed
    • tree-optimization/93354 FRE redundant store removal validity fix · f5ee5d05
      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.
      Richard Biener committed
    • i386: Use bzhi for x & ((1 << y) - 1) or x & ((1U << y) - 1) [PR93346] · 9592f639
      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.
      Jakub Jelinek committed
    • PR c/84919 - bogus -Wrestrict on sprintf %p with destination as argument · 8a990ffa
      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.
      Martin Sebor committed
    • aarch64: Skip whilele_1.C test for ILP32 · 0ed442a4
      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.
      Richard Sandiford committed
    • aarch64: Skip some SVE ACLE function-body tests for ILP32 · b02fbed1
      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.
      Richard Sandiford committed
    • testsuite: Add target/xfail argument to check-function-bodies · 4c33b2da
      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.
      Richard Sandiford committed
    • auto-inc-dec: Don't add incs/decs to bare CLOBBERs [PR93124] · ccb68179
      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.
      Richard Sandiford committed
    • gotest: explicitly skip type descriptors · 92bea423
      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
      Ian Lance Taylor committed
    • analyzer: fix ICE due to sm-state origin being purged (PR 93382) · 591b59eb
      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.
      David Malcolm committed
    • analyzer: fix build with --enable-checking=release · c9c8aef4
      When adding namespaces to the analyzer in
      r10-6151-g75038aa6
      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.
      David Malcolm committed
    • Fix patchable-function-entry on arc · 41fe06f8
      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.
      Andrew Pinski committed
    • Revert "Allow tree-ssa.exp to be run by itself" and move some testcases · 83b04489
      This reverts commit 9085381f 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.
      Andrew Pinski committed
    • Daily bump. · 4857e6f3
      GCC Administrator committed
  2. 22 Jan, 2020 21 commits
    • runtime: for Solaris, add osinit, and drop duplicate getncpu · 9e16359c
      Fixes a build breakage introduced in the 1.14beta1 upgrade.
      
      Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/215857
      Ian Lance Taylor committed
    • c-family: Fix problems with blender and PPC from PR 40752 patch. · 55b7df8b
      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.
      Jason Merrill committed
    • c-family: Remove location parm from unsafe_conversion_p. · d9637168
      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.
      Jason Merrill committed
    • Allow tree-ssa.exp to be run by itself · 9085381f
      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.
      Andrew Pinski committed
    • analyzer: fix usage of "_setjmp" in test for PR 93378 · 597e403d
      gcc/testsuite/ChangeLog:
      	PR analyzer/93378
      	* gcc.dg/analyzer/setjmp-pr93378.c: Use setjmp rather than
      	_setjmp.
      David Malcolm committed
    • analyzer: fix setjmp handling with -g (PR 93378) · fd9982bb
      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.
      David Malcolm committed
    • analyzer: testsuite fixes for alloca, getpass, and setjmp (PR 93316) · da7cf663
      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.
      David Malcolm committed
    • analyzer: introduce namespace to avoid ODR clashes (PR 93307) · 75038aa6
      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.
      David Malcolm committed
    • runtime: call runtime_nanotime1, not runtime_nanotime · 68cbbe7c
      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
      Ian Lance Taylor committed
    • PR c++/92907 - noexcept does not consider "const" in member functions. · e1fd0408
      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.
      Marek Polacek committed
    • PR c++/93324 - ICE with -Wall on constexpr if. · 15ed55ea
      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.
      Marek Polacek committed
    • Fix a couple of memory leaks in the C++ frontend · bf91504d
      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.
      Patrick Palka committed
    • cfgexpand: Update partition size when merging variables · 7c46e71d
      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.
      Richard Sandiford committed
    • Fix TOP N counter update. · 7491c17f
      	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.
      Martin Liska committed
    • Skip gcc.target/aarch64/sve/tls_preserve* for emultls targets · 9c4fb565
      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.
      Richard Sandiford committed
    • Fix gcc.target/aarch64/sve/sel_3.c for big-endian targets · 998faa15
      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
      Richard Sandiford committed
    • Extend r279588 to g++.dg/ext/sve-sizeless-1.C · cb176538
      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.
      Richard Sandiford committed
    • tree-optimization/93381 fix integer offsetting in points-to analysis · 2b85c088
      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.
      Richard Biener committed
    • aarch64: Fix aarch64_expand_subvti constant handling [PR93335] · d80f0a8d
      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.
      Jakub Jelinek committed
    • Smart relaxation of TOP N counter. · 5f32f9cf
      	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.
      Martin Liska committed