Commit Graph

187663 Commits

Author SHA1 Message Date
Marcel Vollweiler
03be3cfeef Add support for device-modifiers for 'omp target device'.
'device_num' and 'ancestor' are now parsed on target device constructs for C,
C++, and Fortran (see OpenMP specification 5.0, p. 170). When 'ancestor' is
 used, then 'sorry, not supported' is output. Moreover, the restrictions for
'ancestor' are implemented (see OpenMP specification 5.0, p. 174f).

gcc/c/ChangeLog:

	* c-parser.c (c_parser_omp_clause_device): Parse device-modifiers 'device_num'
	and 'ancestor' in 'target device' clauses.

gcc/cp/ChangeLog:

	* parser.c (cp_parser_omp_clause_device): Parse device-modifiers 'device_num'
	and 'ancestor' in 'target device' clauses.
	* semantics.c (finish_omp_clauses): Error handling. Constant device ids must
	evaluate to '1' if 'ancestor' is used.

gcc/fortran/ChangeLog:

	* gfortran.h: Add variable for 'ancestor' in struct gfc_omp_clauses.
	* openmp.c (gfc_match_omp_clauses): Parse device-modifiers 'device_num'
	and 'ancestor' in 'target device' clauses.
	* trans-openmp.c (gfc_trans_omp_clauses): Set OMP_CLAUSE_DEVICE_ANCESTOR.

gcc/ChangeLog:

	* gimplify.c (gimplify_scan_omp_clauses): Error handling. 'ancestor' only
	allowed on target constructs and only with particular other clauses.
	* omp-expand.c (expand_omp_target): Output of 'sorry, not supported' if
	'ancestor' is used.
	* omp-low.c (check_omp_nesting_restrictions): Error handling. No nested OpenMP
	structs when 'ancestor' is used.
	(scan_omp_1_stmt): No usage of OpenMP runtime routines in a target region when
	'ancestor' is used.
	* tree-pretty-print.c (dump_omp_clause): Append 'ancestor'.
	* tree.h (OMP_CLAUSE_DEVICE_ANCESTOR): Define macro.

gcc/testsuite/ChangeLog:

	* c-c++-common/gomp/target-device-1.c: New test.
	* c-c++-common/gomp/target-device-2.c: New test.
	* c-c++-common/gomp/target-device-ancestor-1.c: New test.
	* c-c++-common/gomp/target-device-ancestor-2.c: New test.
	* c-c++-common/gomp/target-device-ancestor-3.c: New test.
	* c-c++-common/gomp/target-device-ancestor-4.c: New test.
	* gfortran.dg/gomp/target-device-1.f90: New test.
	* gfortran.dg/gomp/target-device-2.f90: New test.
	* gfortran.dg/gomp/target-device-ancestor-1.f90: New test.
	* gfortran.dg/gomp/target-device-ancestor-2.f90: New test.
	* gfortran.dg/gomp/target-device-ancestor-3.f90: New test.
	* gfortran.dg/gomp/target-device-ancestor-4.f90: New test.
2021-08-31 06:19:31 -07:00
Jonathan Wakely
69b09c5599 libstdc++: Fix 17_intro/names.cc failures on Solaris
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* testsuite/17_intro/names.cc: Undefine some more names used
	by Solaris system headers.
2021-08-31 14:17:53 +01:00
Roger Sayle
cad36f3857 Preserve SUBREG_PROMOTED_VAR_P on (extend:HI (subreg/s:QI (reg:SI))).
SUBREG_PROMOTED_VAR_P is a mechanism for tracking that a partial subreg
is correctly zero-extended or sign-extended in the parent register.  For
example, the RTL (subreg/s/v:QI (reg/v:SI 23 [ x ]) 0) indicates that the
byte x is zero extended in reg:SI 23, which is useful for optimization.
An example is that zero extending the above QImode value to HImode can
simply use a wider subreg, i.e. (subreg:HI (reg/v:SI 23 [ x ]) 0).

This patch addresses the oversight/missed optimization opportunity that
the new HImode subreg above should retain its SUBREG_PROMOTED_VAR_P
annotation as its value is guaranteed to be correctly extended in the
SImode parent.  The code below to preserve SUBREG_PROMOTED_VAR_P is already
present in the middle-end (e.g. simplify-rtx.c:7232-7242) but missing
from one or two (precisely three) places that (accidentally) strip it.

Whilst there I also added another optimization.  If we need to extend
the above QImode value beyond the SImode register holding it, say to
DImode, we can eliminate the SUBREG and simply extend from the SImode
register to DImode.

2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* expr.c (convert_modes): Preserve SUBREG_PROMOTED_VAR_P when
	creating a (wider) partial subreg from a SUBREG_PROMOTED_VAR_P
	subreg.
	* simplify-rtx.c (simplify_unary_operation_1) [SIGN_EXTEND]:
	Likewise, preserve SUBREG_PROMOTED_VAR_P when creating a (wider)
	partial subreg from a SUBREG_PROMOTED_VAR_P subreg.  Generate
	SIGN_EXTEND of the SUBREG_REG when a subreg would be paradoxical.
	[ZERO_EXTEND]: Likewise, preserve SUBREG_PROMOTED_VAR_P when
	creating a (wider) partial subreg from a SUBREG_PROMOTED_VAR_P
	subreg.  Generate ZERO_EXTEND of the SUBREG_REG when a subreg
	would be paradoxical.
2021-08-31 11:45:07 +01:00
Roger Sayle
0960d937d9 Only simplify TRUNCATE to SUBREG on TRULY_NOOP_TRUNCATION targets.
As recently remarked by Jeff Law, SUBREGs are the "forever chemicals"
of GCC's RTL; once created they persist in the environment.  The problem,
according to the comment on lines 5428-5438 of combine.c is that
non-tieable SUBREGs interfere with reload/register allocation, so
combine often doesn't touch/clean-up instructions containing a SUBREG.

This is the first and simplest of two patches to tackle that problem,
by teaching combine to avoid converting explicit TRUNCATEs into
SUBREGs that it can't handle.

Consider the following (hypothetical) sequence of instructions on
a STORE_FLAG_VALUE=1 target, which stores a zero or one in an SI
register, then uselessly truncates to QImode, then extends it again.

(set (reg:SI 27) (ne:SI (reg:BI 28) (const_int 0)))
(set (reg:QI 26) (truncate:QI (reg:SI 27)))
(set (reg:SI 0) (zero_extend:SI (reg:QI 26)))

which ideally (i.e. with this patch) combine would simplify to:
(set (reg:SI 0) (ne:SI (reg:BI 28) (const_int 0)))

Alas currently, during combine the middle TRUNCATE is converted into
a lowpart SUBREG, which subst then turns into (clobber (const_int 0)),
abandoning the attempted combination, that then never reaches recog.

2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* combine.c (combine_simplify_rtx): Avoid converting an explicit
	TRUNCATE into a lowpart SUBREG on !TRULY_NOOP_TRUNCATION targets.
	* simplify-rtx.c (simplify_unary_operation_1): Likewise.
2021-08-31 11:41:57 +01:00
Richard Biener
6792734229 tree-optimization/102142 - fix typo in loop BB reduc cost adjustment
This fixes a typo in the condition guarding the cleanup of the
visited flag of costed scalar stmts.

2021-08-31  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/102142
	* tree-vect-slp.c (vect_bb_vectorization_profitable_p): Fix
	condition under which to unset the visited flag.

	* g++.dg/torture/pr102142.C: New testcase.
2021-08-31 12:27:04 +02:00
Richard Sandiford
de7a795c32 libgcc: Add missing runtime exception notices
Quoting from https://gcc.gnu.org/pipermail/gcc/2021-July/236716.html:

--------------------------------------------------------------------
It was pointed out to me off-list that config/aarch64/value-unwind.h
is missing the runtime exception.  It looks like a few other files
are too; a fuller list is:

libgcc/config/aarch64/value-unwind.h
libgcc/config/frv/frv-abi.h
libgcc/config/i386/value-unwind.h
libgcc/config/pa/pa64-hpux-lib.h

Certainly for the aarch64 file this was simply a mistake;
it seems to have been copied from the i386 version, both of which
reference the runtime exception but don't actually include it.
--------------------------------------------------------------------

Similarly, frv-abi.h referenced the exception but didn't include it.
pa64-hpux-lib.h was missing any reference to the exception.

The decision was that this was simply a mistake
[https://gcc.gnu.org/pipermail/gcc/2021-July/236717.html]:

--------------------------------------------------------------------
[…] It generally is
considered a textual omission.  The runtime library components of GCC
are intended to be licensed under the runtime exception, which was
granted and approved at the time of introduction.
--------------------------------------------------------------------

and that we should simply change all of the files above
[https://gcc.gnu.org/pipermail/gcc/2021-July/236719.html]:

--------------------------------------------------------------------
Please correct the text in the files. The files in libgcc used in the
GCC runtime are intended to be licensed with the runtime exception and
GCC previously was granted approval for that licensing and purpose.

[…]

The runtime exception explicitly was intended for this purpose and
usage at the time that GCC received approval to apply the exception.
--------------------------------------------------------------------

libgcc/
	* config/aarch64/value-unwind.h: Add missing runtime exception
	paragraph.
	* config/frv/frv-abi.h: Likewise.
	* config/i386/value-unwind.h: Likewise.
	* config/pa/pa64-hpux-lib.h: Likewise.
2021-08-31 10:56:34 +01:00
Richard Biener
5e57bacf6f middle-end/102129 - avoid TER of possibly trapping expressions
The following avoids applying TER to possibly trapping expressions,
preventing a trapping FP multiplication to be moved across a call
that should not be executed.

2021-08-31  Richard Biener  <rguenther@suse.de>

	PR middle-end/102129
	* tree-ssa-ter.c (find_replaceable_in_bb): Do not move
	possibly trapping expressions across calls.
2021-08-31 11:38:01 +02:00
Andrew Burgess
dd779c509e gdb: Add a dependency between gdb and libbacktrace
GDB is going to start using libbacktrace, so add a build dependency
between the two modules.  This change needs to be added into the GCC
toplevel files, and then back-ported to the binutils-gdb repository.

2021-08-31  Andrew Burgess  <andrew.burgess@embecosm.com>

ChangeLog:

	* Makefile.def: Add all-gdb dependency on all-libbacktrace.
	* Makefile.in: Regenerate.
2021-08-31 10:00:22 +01:00
Jakub Jelinek
06ac981ffb tree-ssa-ccp: Fix up bit_value_binop on RSHIFT_EXPR [PR102134]
As mentioned in the PR, this hunk is guarded with !wi::neg_p (r1val | r1mask, sgn)
which means if sgn is UNSIGNED, it is always true, but r1val | r1mask in
widest_int is still sign-extended.  That means wi::clz (arg) returns 0,
wi::get_precision (arg) returns some very large number
(WIDE_INT_MAX_PRECISION, on x86_64 576 bits) and width is 64, so we end up
with lzcount of -512 where the code afterwards expects a non-negative
lzcount.  For arg without the sign bit set the code works right, those
numbers are zero extended and so wi::clz must return wi::get_precision (arg) - width
plus number of leading zero bits within the width precision.
The patch fixes it by handling the sign-extension specially, either it could
be done through wi::neg_p (arg) check, but lzcount == 0 works identically.

2021-08-31  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/102134
	* tree-ssa-ccp.c (bit_value_binop) <case RSHIFT_EXPR>: If sgn is
	UNSIGNED and r1val | r1mask has MSB set, ensure lzcount doesn't
	become negative.

	* gcc.c-torture/execute/pr102134.c: New test.
2021-08-31 10:29:23 +02:00
prathamesh.kulkarni
dd817ccd26 arm: Adjust test for soft fp targets.
gcc/testsuite/ChangeLog:
	* gcc.target/arm/pr51534.c: Adjust test-case for soft fp targets.
2021-08-31 12:55:19 +05:30
Andrew Pinski
aba800615e Fix gcc.dg/ipa/inline-8.c for -fPIC
The problem here is with -fPIC, both cmp and move
don't bind locally so they are not even tried to be
inlined.  This fixes the issue by marking both
functions as static and now the testcase passes
for both -fPIC and -fno-PIC cases.

OK? Tested on x86_64-linux-gnu.

gcc/testsuite/ChangeLog:

	* gcc.dg/ipa/inline-8.c: Mark cmp and move as
	static so they both bind local and available for
	inlinine.
2021-08-31 06:28:27 +00:00
Andrew Pinski
2dc6782a06 Fix PR driver/79181 (and others), not deleting some /tmp/cc* files for LTO.
So the main issue here is that some signals are not setup unlike collect2.
So this merges the setting up of the signal handlers to one function in
collect-utils and has collect2 and lto-wrapper call that function.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

gcc/ChangeLog:

	PR driver/79181
	* collect-utils.c (setup_signals): New declaration.
	* collect-utils.h (setup_signals): New function.
	* collect2.c (handler): Delete.
	(main): Instead of manually setting up the signals,
	just call setup_signals.
	* lto-wrapper.c (main): Likewise.
2021-08-31 06:28:27 +00:00
Andrew Pinski
e4d8607888 Fix x86/56337 : 1<<28 alignment is broken
The problem here is the x86_64 back-end uses a signed integer
for alignment and then divides by BITS_PER_UNIT so if we had
INT_MIN (which is what 1<<28*8 is), we would get the wrong result.

This fixes the problem by using unsigned for the argument to
x86_output_aligned_bss and x86_output_aligned_bss.

OK? Bootstrapped and tested on x86_64-linux-gnu.

gcc/ChangeLog:

	PR target/56337
	* config/i386/i386-protos.h (x86_output_aligned_bss):
	Change align argument to unsigned type.
	(x86_elf_aligned_decl_common): Likewise.
	* config/i386/i386.c (x86_elf_aligned_decl_common): Likewise.
	(x86_output_aligned_bss): Likewise.
2021-08-31 06:28:26 +00:00
YunQiang Su
d904008df2 MIPS: add .module mipsREV to all output asm file
Currently, the asm output file for MIPS has no rev info.
It can make some trouble, for example:
  assembler is mips1 by default,
  gcc is fpxx by default.
To assemble the output of gcc -S, we have to pass -mips2
to assembler.

gcc/ChangeLog:

	* config/mips/mips.c (mips_module_isa_name): New.
	  mips_file_start: add .module mipsREV to all asm output
2021-08-31 09:38:46 +08:00
YunQiang Su
4ecfc7e3de MIPS: use mips_isa enum instead hardcoded numbers
Currently mips-cpu.defs, mips.h, netbsd.h and config.gcc are
using hardcoded numbers for isa level.

Let's replace them with more readable enum mips_isa.

gcc/ChangeLog:
	* config/mips/mips.h (struct mips_cpu_info): define enum mips_isa;
	  use enum instead of int for 'isa' member.
	* config.gcc, config/mips/mips.c, config/mips/mips-cpus.def,
	  config/mips/netbsd.h: replace hardcoded numbers with enum.
2021-08-31 09:34:57 +08:00
liuhongt
f4b4170138 Unify UNSPEC_MASKED_EQ/GT to the form of UNSPEC_PCMP.
Currently for evex vpcmpeqb instruction, we have two forms of rtl
template representation, one is (unspec [op1 op2] UNSPEC_MASK_EQ), the
other is (unspec [op1, op2, const_int 0] UNSPEC_PCMP), which increases
the maintenance burden, such as optimization (not: vpcmpeqb)
to (vpcmpneqb) requires two define_insn_and_split to match the two
forms respectively, this patch removes UNSPEC_MASK_EQ/GT, unifying
them into the form of UNSPEC_PCMP.

gcc/ChangeLog:

	* config/i386/sse.md (*<avx512>_ucmp<mode>3_1): Change from
	define_split to define_insn_and_split.
	(*avx2_eq<mode>3): Removed.
	(<avx512>_eq<mode>3<mask_scalar_merge_name>): Adjust pattern
	(<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Rename to ..
	(*<avx512>_eq<mode>3<mask_scalar_merge_name>_1): .. this, and
	adjust pattern.
	(*avx2_gt<mode>3): Removed.
	(<avx512>_gt<mode>3<mask_scalar_merge_name>): Change from
	define_insn to define_expand, and adjust pattern.
	(UNSPEC_MASKED_EQ, UNSPEC_MASKED_GT): Removed.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512bw-vpcmpeqb-1.c: Adjust testcase.
	* gcc.target/i386/avx512bw-vpcmpeqw-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgtb-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgtw-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpeqd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpeqq-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpgtd-1.c: Ditto.
	* gcc.target/i386/avx512f-vpcmpgtq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpeqd-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpeqq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpgtd-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpgtq-1.c: Ditto.
	* gcc.target/i386/bitwise_mask_op-1.c: Ditto.
	* gcc.target/i386/bitwise_mask_op-2.c: Ditto.
2021-08-31 09:25:57 +08:00
GCC Administrator
1e2f030b80 Daily bump. 2021-08-31 00:16:50 +00:00
David Malcolm
eafa9d9692 analyzer: support "bifurcation"; reimplement realloc [PR99260]
Most of the state-management code in the analyzer involves
modifying state objects in-place, which implies a single outcome.
(I originally implemented in-place modification because I wanted
to avoid having to create copies of state objects, and it's now
very difficult to change this aspect of the analyzer's design)

However, there are various special-cases such as "realloc" for which
it's best to split the state into multiple outcomes.

This patch adds a mechanism for "bifurcating" the analysis in places
where there isn't a split in the CFG, and uses it to implement realloc,
in this case treating it as having 3 possible outcomes:
- failure, returning NULL
- success, growing the buffer in-place without moving it
- success, allocating a new buffer, copying the content of the old
  buffer to it, and freeing the old buffer.

gcc/ChangeLog:
	PR analyzer/99260
	* Makefile.in (ANALYZER_OBJS): Add analyzer/call-info.o.

gcc/analyzer/ChangeLog:
	PR analyzer/99260
	* analyzer.h (class custom_edge_info): New class, adapted from
	exploded_edge::custom_info_t.  Make member functions const.
	Make update_model return bool, converting edge param from
	reference to a pointer, and adding a ctxt param.
	(class path_context): New class.
	* call-info.cc: New file.
	* call-info.h: New file.
	* engine.cc: Include "analyzer/call-info.h" and <memory>.
	(impl_region_model_context::impl_region_model_context): Update for
	new m_path_ctxt field.
	(impl_region_model_context::bifurcate): New.
	(impl_region_model_context::terminate_path): New.
	(impl_region_model_context::get_malloc_map): New.
	(impl_sm_context::impl_sm_context): Update for new m_path_ctxt
	field.
	(impl_sm_context::get_fndecl_for_call): Likewise.
	(impl_sm_context::set_next_state): Likewise.
	(impl_sm_context::warn): Likewise.
	(impl_sm_context::is_zero_assignment): Likewise.
	(impl_sm_context::get_path_context): New.
	(impl_sm_context::m_path_ctxt): New.
	(impl_region_model_context::on_condition): Update for new
	path_ctxt param.  Handle m_enode_for_diag being NULL.
	(impl_region_model_context::on_phi): Update for new path_ctxt
	param.
	(exploded_node::on_stmt): Add path_ctxt param, updating ctor calls
	to use it as necessary.  Use it to bail out after sm-handling,
	if needed.
	(exploded_node::detect_leaks): Update for new path_ctxt param.
	(dynamic_call_info_t::update_model): Update for conversion of
	exploded_edge::custom_info_t to custom_edge_info.
	(dynamic_call_info_t::add_events_to_path): Likewise.
	(rewind_info_t::update_model): Likewise.
	(rewind_info_t::add_events_to_path): Likewise.
	(exploded_edge::exploded_edge): Likewise.
	(exploded_graph::add_edge): Likewise.
	(exploded_graph::maybe_process_run_of_before_supernode_enodes):
	Update for new path_ctxt param.
	(class impl_path_context): New.
	(exploded_graph::process_node): Update for new path_ctxt param.
	Create an impl_path_context and pass it to exploded_node::on_stmt.
	Use it to terminate iterating stmts if terminate_path is called
	on it.  After processing a run of stmts, query path_ctxt to
	potentially terminate the analysis path, and/or to "bifurcate" the
	analysis into multiple additional paths.
	(feasibility_state::maybe_update_for_edge): Update for new
	update_model ctxt param.
	* exploded-graph.h
	(impl_region_model_context::impl_region_model_context): Add
	path_ctxt param.
	(impl_region_model_context::bifurcate): New.
	(impl_region_model_context::terminate_path): New
	(impl_region_model_context::get_ext_state): New.
	(impl_region_model_context::get_malloc_map): New.
	(impl_region_model_context::m_path_ctxt): New field.
	(exploded_node::on_stmt): Add path_ctxt param.
	(class exploded_edge::custom_info_t): Move to analyzer.h, renaming
	to custom_edge_info, and making the changes as noted in analyzer.h
	above.
	(exploded_edge::exploded_edge): Update for these changes to
	exploded_edge::custom_info_t.
	(exploded_edge::m_custom_info): Likewise.
	(class dynamic_call_info_t): Likewise.
	(class rewind_info_t): Likewise.
	(exploded_graph::add_edge): Likewise.
	* program-state.cc (program_state::on_edge): Update for new
	path_ctxt param.
	(program_state::push_call): Likewise.
	(program_state::returning_call): Likewise.
	(program_state::prune_for_point): Likewise.
	* region-model-impl-calls.cc: Include "analyzer/call-info.h".
	(call_details::get_fndecl_for_call): New.
	(region_model::impl_call_realloc): Reimplement.
	* region-model.cc (region_model::on_call_pre): Move call to
	impl_call_realloc to...
	(region_model::on_call_post): ...here.  Consolidate creation
	of call_details instance.
	(noop_region_model_context::bifurcate): New.
	(noop_region_model_context::terminate_path): New.
	* region-model.h (call_details::get_call_stmt): New.
	(call_details::get_fndecl_for_call): New.
	(region_model::on_realloc_with_move): New.
	(region_model_context::bifurcate): New.
	(region_model_context::terminate_path): New.
	(region_model_context::get_ext_state): New.
	(region_model_context::get_malloc_map): New.
	(noop_region_model_context::bifurcate): New.
	(noop_region_model_context::terminate_path): New.
	(noop_region_model_context::get_ext_state): New.
	(noop_region_model_context::get_malloc_map): New.
	* sm-malloc.cc: Include "analyzer/program-state.h".
	(malloc_state_machine::on_realloc_call): Reimplement.
	(malloc_state_machine::on_realloc_with_move): New.
	(region_model::on_realloc_with_move): New.
	* sm-signal.cc (class signal_delivery_edge_info_t): Update for
	conversion from exploded_edge::custom_info_t to custom_edge_info.
	* sm.h (sm_context::get_path_context): New.
	* svalue.cc (svalue::maybe_get_constant): Call
	unwrap_any_unmergeable.

gcc/testsuite/ChangeLog:
	PR analyzer/99260
	* gcc.dg/analyzer/capacity-2.c: Update for changes to realloc
	analysis.
	* gcc.dg/analyzer/pr99193-1.c: Likewise.
	* gcc.dg/analyzer/pr99193-3.c: Likewise.
	* gcc.dg/analyzer/realloc-1.c: Likewise.  Add test coverage for
	realloc of non-heap pointer, realloc from mismatching allocator,
	and realloc on a freed pointer.
	* gcc.dg/analyzer/realloc-2.c: New test.
2021-08-30 18:36:31 -04:00
Jason Merrill
8960a29b18 c++: limit instantiation with ill-formed class [PR96286]
I noticed that after the static_assert failures in lwg3466.cc, we got
various follow-on errors because we went ahead and tried to instantiate the
promise<T> member functions even after instantiating the class itself ran
into problems.  Interrupting instantiation of the class itself seems likely
to cause error-recovery problems, but preventing instantiation of member
functions seems strictly better for error-recovery.

This doesn't fix any of the specific testcases in PR96286, but addresses
part of that problem space.

	PR c++/96286

gcc/cp/ChangeLog:

	* cp-tree.h (struct lang_type): Add erroneous bit-field.
	(CLASSTYPE_ERRONEOUS): New.
	* pt.c (limit_bad_template_recursion): Check it.
	(instantiate_class_template_1): Set it.

libstdc++-v3/ChangeLog:

	* testsuite/30_threads/promise/requirements/lwg3466.cc:
	Remove dg-prune-outputs.

gcc/testsuite/ChangeLog:

	* g++.dg/template/access2.C: Split struct A.
2021-08-30 17:25:21 -04:00
Jason Merrill
729f6881cf c++: preserve location through constexpr
While working on the patch for PR101460, I noticed that we were losing the
expression location when folding class prvalue expressions.  The final patch
doesn't fold class prvalues, but this still seems a worthwhile change.  I
don't add location wrappers for scalar prvalues because many callers are
trying to fold them away.

gcc/cp/ChangeLog:

	* constexpr.c (cxx_eval_outermost_constant_expr): Copy
	expr location to result.
2021-08-30 17:23:38 -04:00
Jason Merrill
a8de832470 c++: fold function template args sooner [PR101460]
As discussed in the PR, we were giving a lot of unnecessary errors for this
testcase because we didn't try to do constant evaluation until
convert_nontype_argument, which happens for each of the candidates.  But
when looking at a template-id as the function operand of a call, we can try
to fold arguments before we get into overload resolution.

	PR c++/101460

gcc/cp/ChangeLog:

	* cp-tree.h (cxx_constant_value_sfinae): Declare.
	* constexpr.c (cxx_constant_value_sfinae): New.
	* pt.c (fold_targs_r, maybe_fold_fn_template_args): New.
	(tsubst_copy_and_build) [CALL_EXPR]: Call
	maybe_fold_fn_template_args.

gcc/testsuite/ChangeLog:

	* g++.dg/template/explicit-args6.C: New test.
2021-08-30 17:23:28 -04:00
Harald Anlauf
a7083b83e4 Fortran - fix whitespace issue during parsing of assigned goto
gcc/fortran/ChangeLog:

	PR fortran/102113
	* match.c (gfc_match_goto): Allow for whitespace in parsing list
	of labels.

gcc/testsuite/ChangeLog:

	PR fortran/102113
	* gfortran.dg/goto_9.f90: New test.
2021-08-30 23:10:01 +02:00
Andrew Pinski
79a017c412 Fix PR 90142: contrib/download_prerequisites uses test ==
Since == is not portable, it is better to use = in contrib/
download_prerequisites.  The only place == was used is inside
the function md5_check which is used only on Mac OS X.

Tested on Mac OS X as:
./contrib/download_prerequisites --md5
Both with all files having the correct checksum and one with a broken one.

contrib/ChangeLog:

	* download_prerequisites (md5_check): Replace == inside
	test with = to be more portable.
2021-08-30 20:53:19 +00:00
Jason Merrill
e18e56c76b c++: Add warning about missing 'requires'
I noticed that concepts-lambda14.C had two useless requires-expressions:

  static_assert(requires { C<T>; });

always succeeds, because C<T> is always a valid expression for any type,
regardless of whether C is satisfied for a particular type.  Presumably the
user means

  static_assert(requires { requires C<T>; });

to make the C<T> a nested-requirement.  Of course,

  static_assert(C<T>);

is much simpler and means the same thing; this is more relevant in the
middle of a longer requires-expression, such as the bug this warning found
in cmcstl2:

  template<class I>
  META_CONCEPT input_iterator =
	  input_or_output_iterator<I> &&
	  readable<I> &&
	  requires(I& i, const I& ci) {
		  typename iterator_category_t<I>;
		  derived_from<iterator_category_t<I>, input_iterator_tag>;
		  i++;
	  };

where 'requires' is missing before 'derived_from'.

gcc/ChangeLog:

	* doc/invoke.texi: Document -Wmissing-requires.

gcc/c-family/ChangeLog:

	* c.opt: Add -Wmissing-requires.

gcc/cp/ChangeLog:

	* parser.c (cp_parser_simple_requirement): Warn about missing
	requires.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/concepts-lambda14.C: Add expected warnings.
2021-08-30 16:48:28 -04:00
Harald Anlauf
9213ff1324 Fortran - correct check for constraint F2008:C628 / F2018:C932
gcc/fortran/ChangeLog:

	PR fortran/101349
	* resolve.c (resolve_allocate_expr): An unlimited polymorphic
	argument to ALLOCATE must be ALLOCATABLE or a POINTER.  Fix the
	corresponding check.

gcc/testsuite/ChangeLog:

	PR fortran/101349
	* gfortran.dg/unlimited_polymorphic_33.f90: New test.
2021-08-30 22:41:01 +02:00
Bill Schmidt
7465c2ed6f rs6000: Always initialize vector_pair and vector_quad nodes
2021-08-24  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Remove
	TARGET_EXTRA_BUILTINS guard.
2021-08-30 14:58:30 -05:00
Bill Schmidt
a5027ea2ad rs6000: Add sanity to V2DI_type_node definitions
2021-08-30  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Change
	initialization of V2DI_type_node and unsigned_V2DI_type_node.
2021-08-30 14:58:27 -05:00
Bill Schmidt
b5bc39317b rs6000: Darwin builtin support
2021-03-04  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
	* config/rs6000/darwin.h (SUBTARGET_INIT_BUILTINS): Use the new
	decl when new_builtins_are_live.
	* config/rs6000/rs6000-builtin-new.def (__builtin_cfstring): New
	built-in.
2021-08-30 14:58:25 -05:00
John David Anglin
a6fe949d57 Fix libgfortran build on hppa*-hp-hpux[01]*
Add include hack to define PRIdPTR, PRIiPTR, PRIoPTR, PRIuPTR, PRIxPTR
and PRIXPTR in inttypes.h.

2021-08-30  John David Anglin  <danglin@gcc.gnu.org>

fixincludes/ChangeLog:
	* inclhack.def (hpux_c99_inttypes5): New hack to define PRIdPTR, etc.
	* fixincl.x: Regenerate.
	* tests/base/inttypes.h: Update.
2021-08-30 19:31:40 +00:00
Joseph Myers
42ade7bdc1 Update gcc sv.po.
* sv.po: Update.
2021-08-30 19:10:08 +00:00
Pat Haugen
d73c44800b Enable store fusion on Power10.
gcc/ChangeLog:

	* config/rs6000/rs6000-cpus.def (ISA_3_1_MASKS_SERVER): Add
	OPTION_MASK_P10_FUSION_2STORE.
	(POWERPC_MASKS): Likewise.
	* config/rs6000/rs6000.c (rs6000_option_override_internal): Enable
	store fusion for Power10.
	(is_fusable_store): New.
	(power10_sched_reorder): Likewise.
	(rs6000_sched_reorder): Do Power10 specific reordering.
	(rs6000_sched_reorder2): Likewise.
	* config/rs6000/rs6000.opt: Add new option.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/fusion-p10-stst.c: New test.
	* gcc.target/powerpc/fusion-p10-stst2.c: New test.
2021-08-30 10:58:21 -05:00
Iain Buclaw
02dbf5d127 libphobos: Compile configure tests with -fno-druntime
libphobos/ChangeLog:

	* configure: Regenerate.
	* m4/autoconf.m4 (AC_LANG_PROGRAM): Declare module name 'object'.
	* m4/gcc_support.m4 (WITH_LOCAL_DRUNTIME): Compile tests with
	-fno-druntime.
2021-08-30 16:42:30 +02:00
Richard Biener
89f33f44ad tree-optimization/102128 - rework if-converted BB vect heuristic
This reworks the previous attempt to avoid leaving around if-converted
scalar code in BB vectorized loop bodies to keep costing independent
subgraphs which should address the observed regression with 519.lbm_r.

For this to work we now first cost all subgraphs and only after
doing that proceed to emit vectorized code.

2021-08-30  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/102128
	* tree-vect-slp.c (vect_bb_vectorization_profitable_p):
	Move scanning for if-converted scalar code to the caller
	and instead delay clearing the visited flag for profitable
	subgraphs.
	(vect_slp_region): Cost all subgraphs before scheduling.
	For if-converted BB vectorization scan for scalar COND_EXPRs
	and do not vectorize if any found and the cost model is
	very-cheap.
2021-08-30 14:03:56 +02:00
Richard Biener
1313111fde Make sure -fexceptions is enabled when -fnon-call-exceptions is
This makes -fexceptions enabled by -fnon-call-exceptions, removing
the odd state of !flag_exceptions && flag_non_call_exceptions from
middle-end consideration.

2021-08-30  Richard Biener  <rguenther@suse.de>

	* common.opt (fexceptions): Mark
	EnabledBy(fnon-call-exceptions).
	* doc/invoke.texi (fnon-call-exceptions): Document this
	enables -fexceptions.
2021-08-30 14:03:56 +02:00
Sebastian Huber
caf81d3b57 Use __builtin_trap() for abort() if inhibit_libc
abort() is used in gcc_assert() and gcc_unreachable() which is used by target
libraries such as libgcov.a.  This patch changes the abort() definition under
certain conditions.  If inhibit_libc is defined and abort is not already
defined, then abort() is defined to __builtin_trap().

The inhibit_libc define is usually defined if GCC is built for targets running
in embedded systems which may optionally use a C standard library.  If
inhibit_libc is defined, then there may be still a full featured abort()
available.  abort() is a heavy weight function which depends on signals and
file streams.  For statically linked applications, this means that a dependency
on gcc_assert() pulls in the support for signals and file streams.  This could
prevent using gcov to test low end targets for example.  Using __builtin_trap()
avoids these dependencies if the target implements a "trap" instruction.  The
application or operating system could use a trap handler to react to failed GCC
runtime checks which caused a trap.

gcc/

	* tsystem.h (abort): Define abort() if inhibit_libc is defined and it
	is not already defined.
2021-08-30 10:37:17 +02:00
YunQiang Su
d7e56b084d libffi: Fix MIPS r6 support
for some instructions, MIPS r6 uses different encoding other than
the previous releases.

1. mips/n32.S disable .set mips4: since it casuses old insn encoding
   is used.
   https://github.com/libffi/libffi/pull/396 has been accepted as:
     94c102aa69b04337f63498e0e6551fcdce549ae5
2. mips/ffi.c: the encoding for JR is hardcoded: we need to use
   different value for r6 and pre-r6.
   https://github.com/libffi/libffi/pull/401 has been accpeted as:
     746dbe3a6a79a41931c03b51df2972be4d5e5028

libffi/
	PR libffi/83636
	* src/mips/n32.S: disable .set mips4
	* src/mips/ffi.c: use different JR encoding for r6.
2021-08-30 16:03:59 +08:00
liuhongt
7218c2ec36 Make sure we're playing with integral modes before call extract_integral_bit_field.
gcc/ChangeLog:

	* expmed.c (extract_bit_field_1): Make sure we're playing with
	integral modes before call extract_integral_bit_field.
	(extract_integral_bit_field): Add a parameter of type
	scalar_int_mode which corresponds to of tmode.
	And call extract_and_convert_fixed_bit_field instead of
	extract_fixed_bit_field and convert_extracted_bit_field.
	(extract_and_convert_fixed_bit_field): New function, it's a
	combination of extract_fixed_bit_field and
	convert_extracted_bit_field.
2021-08-30 09:06:36 +08:00
GCC Administrator
1e77fd4f17 Daily bump. 2021-08-30 00:16:44 +00:00
Iain Buclaw
392e141079 libiberty: Add support for demangling local D template declarations
The D language now allows multiple different template declarations in
the same function that have the same mangled name.  To make the mangled
names unique, a fake parent in the form `__Sddd' is added to the symbol.
This information is not important for the user, so the demangler now
handles and ignores it.

libiberty/ChangeLog:

	* d-demangle.c (dlang_identifier): Skip over fake parent manglings.
	* testsuite/d-demangle-expected: Add tests.
2021-08-30 01:14:18 +02:00
Iain Buclaw
34f3e0657a libiberty: Add support for demangling D function literals as template value parameters
The D language now allows instantiating templates using struct literals
that have function literal fields as a value argument.

libiberty/ChangeLog:

	* d-demangle.c (dlang_parse_arrayliteral): Add 'info' parameter.
	(dlang_parse_assocarray): Likewise.
	(dlang_parse_structlit): Likewise.
	(dlang_value): Likewise.  Handle function literal symbols.
	(dlang_template_args): Pass 'info' to dlang_value.
	* testsuite/d-demangle-expected: Add new test.
2021-08-30 01:14:18 +02:00
Iain Buclaw
0e32a5aa8b libiberty: Add support for D `typeof(*null)' types
The D language has a new bottom type `typeof(*null)'.  Null types were
also incorrectly being demangled as `none', this has been fixed to be
`typeof(null)'.

libiberty/ChangeLog:

	* d-demangle.c (dlang_attributes): Handle typeof(*null).
	(dlang_type): Likewise.  Demangle 'n' as typeof(null).
	* testsuite/d-demangle-expected: Update tests.
2021-08-30 01:14:18 +02:00
Iain Sandoe
c3c669ac81 Darwin: Fixes for darwin_libc_has_function.
Firstly, the checks for availability need not be run for any
currently supported Darwin version (or for any version of
Darwin on x86).  In fact, the only test that is needed that
differs from the default is for the availbaility of sincos.
Test that and then fall back to the default implementation.

Secondly, the funtion appears to be called from the Jit library
before the value of darwin_macosx_version_min has been set up -
at present we work around this by guarding the checks on having
a non-null pointer for darwin_macosx_version_min.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/ChangeLog:

	* config/darwin.c (darwin_libc_has_function): Do not run
	the checks for x86 or modern Darwin.  Make sure that there
	is a value set for darwin_macosx_version_min before testing.
2021-08-29 20:51:29 +01:00
Iain Buclaw
766f5f8726 d: Call the assertp and boundsp variants for assert and array contract failures.
gcc/d/ChangeLog:

	* d-codegen.cc: Include dmd/module.h.
	(build_filename_from_loc): New function.
	(d_assert_call): Rename to...
	(build_assert_call): ...this.
	(build_array_bounds_call): Call arrayboundsp variant of the array
	bounds failure callback.
	(build_bounds_condition): Rename to...
	(build_bounds_index_condition): ...this.  Update signature.
	(build_bounds_slice_condition): New function.
	(checkaction_trap_p): New function.
	(d_assert_call): Call assertp variant of assert failure callback.
	* d-tree.h (class IndexExp): Declare.
	(class SliceExp): Declare.
	(build_bounds_condition): Remove.
	(build_assert_call): Declare.
	(build_bounds_index_condition): Declare.
	(build_bounds_slice_condition): Declare.
	(checkaction_trap_p): Declare.
	(d_assert_call): Remove.
	* expr.cc (ExprVisitor::visit(IndexExp *)): Call
	build_bounds_index_condition.
	(ExprVisitor::visit(SliceExp *)): Call build_bounds_slice_condition.
	(ExprVisitor::visit(AssertExp *)): Update setting of libcall.
	* runtime.cc (enum d_libcall_type): Add LCT_IMMUTABLE_CHARPTR.
	(get_libcall_type): Handle LCT_IMMUTABLE_CHARPTR.
	* runtime.def (ASSERT): Rename to...
	(ASSERTP): ...this.  Update signature.
	(UNITTEST): Rename to...
	(UNITTESTP): ...this.  Update signature.
	(ARRAY_BOUNDS): Rename to...
	(ARRAYBOUNDSP): ...this.  Updates signature.
	* toir.cc (IRVisitor::visit(SwitchErrorStatement *)): Update call.
2021-08-29 17:19:03 +02:00
Iain Buclaw
118a559df9 d: Update comment for TypeInfoVisitor::layout_base
gcc/d/ChangeLog:

	* typeinfo.cc (class TypeInfoVisitor::layout_base): Update comment.
2021-08-29 17:19:02 +02:00
Iain Buclaw
2b8543a8ce d: Use int to store class and struct flags
gcc/d/ChangeLog:

	* typeinfo.cc (TypeInfoVisitor::visit(TypeInfoClassDeclaration *)):
	Use int to store type flags.
	(TypeInfoVisitor::visit(TypeInfoStructDeclaration *)): Likewise.
2021-08-29 17:19:02 +02:00
Iain Buclaw
0abfd7f4f4 d: Get __c_wchar_t type from build_frontend_type
gcc/d/ChangeLog:

	* types.cc (TypeVisitor::visit(TypeEnum*)): Get wchar_t type from
	build_frontend_type.
2021-08-29 17:19:02 +02:00
Iain Buclaw
ce15a3e757 d: Convert convert_for_rvalue switch statement into if condition
gcc/d/ChangeLog:

	* d-convert.cc (convert_for_rvalue): Convert switch statement into if
	condition.
2021-08-29 17:19:02 +02:00
Iain Buclaw
1925e514b4 d: Use POINTER_SIZE for testing whether to predefine D_LP64
gcc/d/ChangeLog:

	* d-builtins.cc (d_init_versions): Use POINTER_SIZE for testing
	whether to predefine D_LP64.
2021-08-29 17:19:02 +02:00
Iain Buclaw
07984707be d: ICE in gimple_register_canonical_type_1, at lto/lto-common.c:430 (PR102094)
User defined types have the TYPE_CXX_ODR_P flag set, but closure frames
did not.  This mismatch led to an ICE in the conflict detection for ODR
and interoperable non-ODR types.  As a given closure frame is tied
explicitly to a function, it already conforms to ODR.

	PR d/102094

gcc/d/ChangeLog:

	* d-codegen.cc (build_frame_type): Set TYPE_CXX_ODR_P.

gcc/testsuite/ChangeLog:

	* gdc.dg/lto/pr102094_0.d: New test.
2021-08-29 17:19:02 +02:00
Iain Sandoe
dc033e0149 testsuite, Darwin : Skip a test requiring strndup in libc.
Before Darwin11 there is no strndup in libc. This test fails with
warning output because of that - so skip it on these versions (since
they are not able to use strndup anyway).

gcc/testsuite/ChangeLog:

	* gcc.dg/analyzer/strndup-1.c: Skip for Darwin versions
	without strndup support in libc.
2021-08-29 07:53:18 +01:00