Commit Graph

174247 Commits

Author SHA1 Message Date
Andrew Stubbs 14e5e74698 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.
2020-01-23 12:40:04 +00:00
Richard Biener f5ee5d05f3 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.
2020-01-23 12:46:39 +01:00
Jakub Jelinek 9592f639ff 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.
2020-01-23 12:39:13 +01:00
Martin Sebor 8a990ffafa 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.
2020-01-23 11:37:02 +01:00
Richard Sandiford 0ed442a40f 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.
2020-01-23 09:39:13 +00:00
Richard Sandiford b02fbed15a 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.
2020-01-23 09:39:12 +00:00
Richard Sandiford 4c33b2daeb 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.
2020-01-23 09:19:16 +00:00
Richard Sandiford ccb6817964 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.
2020-01-23 09:19:15 +00:00
Ian Lance Taylor 92bea423c2 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
2020-01-22 20:53:43 -08:00
David Malcolm 591b59ebfc 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.
2020-01-22 21:06:45 -05:00
David Malcolm c9c8aef474 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.
2020-01-22 20:57:11 -05:00
Andrew Pinski 41fe06f89f 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.
2020-01-23 01:23:28 +00:00
Andrew Pinski 83b0448980 Revert "Allow tree-ssa.exp to be run by itself" and move some testcases
This reverts commit 9085381f19 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.
2020-01-23 01:17:00 +00:00
GCC Administrator 4857e6f343 Daily bump. 2020-01-23 00:16:33 +00:00
Ian Lance Taylor 9e16359ce8 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
2020-01-22 15:08:25 -08:00
Andrew Pinski 26afdf5070 internal/syscall/unix: use getrandom_linux_generic.go on arm64be
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/215342
2020-01-22 15:05:26 -08:00
Jason Merrill 55b7df8bfb 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.
2020-01-22 17:05:43 -05:00
Jason Merrill d963716881 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.
2020-01-22 17:05:42 -05:00
Andrew Pinski 9085381f19 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.
2020-01-22 20:44:07 +00:00
David Malcolm 597e403d6d 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.
2020-01-22 15:28:33 -05:00
David Malcolm fd9982bb00 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.
2020-01-22 14:52:11 -05:00
David Malcolm da7cf663b7 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.
2020-01-22 14:32:08 -05:00
David Malcolm 75038aa6aa 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.
2020-01-22 14:18:31 -05:00
Ian Lance Taylor 68cbbe7cdc 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
2020-01-22 11:14:52 -08:00
Marek Polacek e1fd040884 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.
2020-01-22 12:30:15 -05:00
Marek Polacek 15ed55eabb 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.
2020-01-22 11:44:13 -05:00
Patrick Palka bf91504dc2 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.
2020-01-22 11:13:02 -05:00
Richard Sandiford 7c46e71d01 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.
2020-01-22 14:33:19 +00:00
Martin Liska 7491c17fe0
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.
2020-01-22 13:40:12 +01:00
Richard Sandiford 9c4fb56578 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.
2020-01-22 12:24:02 +00:00
Richard Sandiford 998faa15e9 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
2020-01-22 12:24:01 +00:00
Richard Sandiford cb17653866 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.
2020-01-22 12:24:00 +00:00
Richard Biener 2b85c08822 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.
2020-01-22 12:38:12 +01:00
Jakub Jelinek d80f0a8dc9 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.
2020-01-22 12:28:16 +01:00
Martin Liska 5f32f9cf13
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.
2020-01-22 12:08:11 +01:00
Richard Earnshaw f96af171be 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.
2020-01-22 10:06:50 +00:00
Jakub Jelinek c892d8f58f 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.
2020-01-22 10:22:16 +01:00
Jakub Jelinek 44a9d801a7 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.
2020-01-22 09:54:59 +01:00
Jakub Jelinek a38979d9d7 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.
2020-01-22 09:50:53 +01:00
Ian Lance Taylor 5a8ea16592 libgo: update to Go1.14beta1
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/214297
2020-01-21 23:53:22 -08:00
JunMa 6ac6529e15 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.
2020-01-22 14:36:13 +08:00
JunMa c75199b716 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.
2020-01-22 14:35:09 +08:00
Joseph Myers 1050283158 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.
2020-01-22 01:36:55 +00:00
Andrew Pinski 87ca615aa6 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.
2020-01-22 01:31:54 +00:00
Joseph Myers ac68e287fc 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.
2020-01-22 01:23:42 +00:00
GCC Administrator 4e9b9a6cb5 Daily bump. 2020-01-22 00:16:34 +00:00
David Malcolm 4f01e57786 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.
2020-01-21 18:58:31 -05:00
Jason Merrill c77074d056 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.
2020-01-21 18:40:19 -05:00
Jason Merrill 731dbfc3f3 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.
2020-01-21 18:40:19 -05:00
Jim Wilson 0501b74264 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.
2020-01-21 15:20:19 -08:00