Commit Graph

194309 Commits

Author SHA1 Message Date
Sam Feifer
d9fa599dc7 [PATCH] match.pd: Add new bitwise arithmetic pattern [PR98304]
PR tree-optimization/98304

gcc:

	* match.pd (n - (((n > C1) ? n : C1) & -C2)): New simplification.

gcc/testsuite:

	* gcc.c-torture/execute/pr98304-2.c: New test.
	* gcc.dg/pr98304-1.c: New test.
2022-07-09 12:08:01 -04:00
Jeff Law
46dc26fdfb [RFA] Improve initialization of objects when the initializer has trailing zeros.
gcc/

	* expr.cc (store_expr): Identify trailing NULs in a STRING_CST
	initializer and use clear_storage rather than copying the
	NULs to the destination array.
2022-07-09 11:11:00 -04:00
François Dumont
8f1802003d libstdc++: Remove obsolete comment in <string> header
The comment is obsolete because char_traits.h do not include stl_algobase.h
anymore and stl_algobase.h is included directly from <string> a few lines
below.

libstdc++-v3/ChangeLog:

	* include/std/string: Remove obsolete comment about char_traits.h including
	stl_algobase.h.
2022-07-09 14:18:15 +02:00
Roger Sayle
b434c94bf7 Improve preservation of FLAGS_REG mode in i386.md's peephole2s.
The patch tweaks several peephole2s in i386.md that propagate the flags
register, but take its mode from the SET_SRC rather than preserve the
mode of the original SET_DEST.  This encounters problems when the
SET_SRC is a VOIDmode CONST_INT.  Fixed by using match_operand with a
flags_reg_operand predicate.

2022-07-09  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* config/i386/i386.md (define_peephole2): Use match_operand of
	flags_reg_operand to capture and preserve the mode of FLAGS_REG.
	(define_peephole2): Likewise.
	(define_peephole2): Likewise...
2022-07-09 09:07:18 +01:00
Roger Sayle
002d81affa Support *testdi_not_doubleword during STV pass on x86.
This patch fixes the current two FAILs of pr65105-5.c on x86 when
compiled with -m32.  These (temporary) breakages were fallout from my
patches to improve/upgrade (scalar) double word comparisons.
On mainline, the i386 backend currently represents a critical comparison
using (compare (and (not reg1) reg2) (const_int 0)) which isn't/wasn't
recognized by the STV pass' convertible_comparison_p.  This simple STV
patch adds support for this pattern (*testdi_not_doubleword) and
generates the vector pandn and ptest instructions expected in the
existing (failing) test case.

2022-07-09  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* config/i386/i386-features.cc (convert_compare): Add support
	for *testdi_not_doubleword pattern, "(compare (and (not ...)))"
	by generating a pandn followed by ptest.
	(convertible_comparison_p): Recognize both *cmpdi_doubleword and
	recent *testdi_not_doubleword comparison patterns.
2022-07-09 09:04:55 +01:00
Tamar Christina
84ff566c63 [PATCH][s390]: Fix the usage of store_bit_field in the backend.
Hi All,

I seem to have broken the s390 bootstrap because I added a new parameter to the
store_bit_field function to indicate whether the value the field of is being set
is currently undefined.

If it's undefined we use a subreg instead.  In this case the value of false
restores the old behavior.

Ok for master?

Thanks,
Tamar

gcc/ChangeLog:

	* config/s390/s390.cc (s390_expand_atomic): Pass false to store_bit_field to
	indicate that the value is not undefined.
2022-07-08 21:56:25 -04:00
Andrew Pinski
71e3daa31c Fix tree-opt/PR106087: ICE with inline-asm with multiple output and assigned only static vars
The problem here is that when we mark the ssa name that was referenced in the now removed
dead store (to a write only static variable), the inline-asm would also be removed
even though it was defining another ssa name. This fixes the problem by checking
to make sure that the statement was only defining one ssa name.

Committed as approved after a bootstrapped and tested on x86_64 with no regressions.

	PR tree-optimization/106087

gcc/ChangeLog:

	* tree-ssa-dce.cc (simple_dce_from_worklist): Check
	to make sure the statement is only defining one operand.

gcc/testsuite/ChangeLog:

	* gcc.c-torture/compile/inline-asm-1.c: New test.
2022-07-09 01:17:46 +00:00
GCC Administrator
0fe604a2d9 Daily bump. 2022-07-09 00:16:54 +00:00
Ian Lance Taylor
55bb77b50a libbacktrace: check for sys/link.h
QNX uses sys/link.h rather than link.h for dl_iterate_phdr

Fixes https://github.com/ianlancetaylor/libbacktrace/issues/86

	* configure.ac: Check for sys/link.h.  Use either link.h or
	sys/link.h when checking for dl_iterate_phdr.
	* elf.c: Include sys/link.h if available.
	* configure, config.h.in: Regenerate.
2022-07-08 10:32:45 -07:00
Martin Jambor
b984b84cbe
testsuite: Fix tree-ssa/alias-access-path-13.c on 32bit platforms (PR 106216)
For gcc.dg/tree-ssa/alias-access-path-13.c to work, SRA must think of
accesses to foo.inn.val and to foo itself as different ones, i.e. they
need to have different offset and size, which on 32bit platforms they
do not.  Fixed by replacing a dummy long int field of the union with a
struct of two integers.

Tested by:
  make -k check-gcc RUNTESTFLAGS="tree-ssa.exp=alias-access-path-13.c" and
  make -k check-gcc RUNTESTFLAGS="--target_board=unix'{-m32}' tree-ssa.exp=alias-access-path-13.c"
on an x86_64-linux, also with patched SRA to verify it still tests the
original intent.

gcc/testsuite/ChangeLog:

2022-07-08  Martin Jambor  <mjambor@suse.cz>

	PR testsuite/106216
	* gcc.dg/tree-ssa/alias-access-path-13.c (union foo): Replace a long
	int field with a struct that is larger than an int also on 32bit
	platforms.
2022-07-08 18:13:31 +02:00
Lewis Hyatt
2bd15617e7 diagnostics: Make line-ending logic consistent with libcpp [PR91733]
libcpp recognizes a lone \r as a valid line ending, so the infrastructure
for retrieving source lines to be output in diagnostics needs to do the
same. This patch fixes file_cache_slot::get_next_line() accordingly so that
diagnostics display the correct part of the source when \r line endings are in
use.

gcc/ChangeLog:

	PR preprocessor/91733
	* input.cc (find_end_of_line): New helper function.
	(file_cache_slot::get_next_line): Recognize \r as a line ending.
	* diagnostic-show-locus.cc (test_escaping_bytes_1): Adapt selftest
	since \r will now be interpreted as a line-ending.

gcc/testsuite/ChangeLog:

	PR preprocessor/91733
	* c-c++-common/pr91733.c: New test.
2022-07-08 09:43:33 -04:00
Martin Liska
6da7f7c5ac sanitizer: Fix hwasan related option conflicts [PR106132]
Split report_conflicting_sanitizer_options(..., SANITIZE_ADDRESS | SANITIZE_HWADDRESS)
call into 2 calls as we don't have any option that would be
address+hwaddress (that conflicts) as well.

	PR sanitizer/106132

gcc/ChangeLog:

	* opts.cc (finish_options): Use 2 calls to
	report_conflicting_sanitizer_options.

gcc/testsuite/ChangeLog:

	* c-c++-common/hwasan/arguments-3.c: Cover new ICE.
2022-07-08 13:23:44 +02:00
Richard Biener
cf3a120084 tree-optimization/106226 - move vectorizer virtual SSA update
When we knowingly have broken virtual SSA form we need to update
it before we eventually perform slpeel manual updating which will
call delete_update_ssa.  Currently that's done on-demand but
communicating whether it's a known unavoidable case is broken
there.  The following makes that a synchronous operation but
instead of actually performing the update we instead recod the
need, clear the update SSA sub-state and force virtual renaming
at the very end of the vectorization pass.

	PR tree-optimization/106226
	* tree-vect-loop-manip.cc (vect_do_peeling): Assert that
	no SSA update is needed.  Move virtual SSA update ...
	* tree-vectorizer.cc (pass_vectorize::execute): ... here,
	via forced virtual renaming when TODO_update_ssa_only_virtuals
	is queued.
	(vect_transform_loops): Return TODO_update_ssa_only_virtuals
	when virtual SSA update is required.
	(try_vectorize_loop_1): Adjust.
	* tree-vect-stmts.cc (vectorizable_simd_clone_call): Allow
	virtual renaming if the ABI forces an aggregate return
	but the original call did not have a virtual definition.

	* gfortran.dg/pr106226.f: New testcase.
2022-07-08 13:05:19 +02:00
Martin Liska
95a234f5cb lto-dump: Do not print output file
Right now the following is printed:

lto-dump
	.file	"<artificial>"
	.ident	"GCC: (GNU) 13.0.0 20220707 (experimental)"
	.section	.note.GNU-stack,"",@progbits

After the patch we print -help and do not emit any assembly output:

lto-dump
Usage: lto-dump [OPTION]... SUB_COMMAND [OPTION]...

LTO dump tool command line options.

  -list [options]           Dump the symbol list.
    -demangle               Dump the demangled output.
    -defined-only           Dump only the defined symbols.
...

gcc/lto/ChangeLog:

	* lto-dump.cc (lto_main): Exit in the function
	as we don't want any LTO bytecode processing.

gcc/ChangeLog:

	* toplev.cc (init_asm_output): Do not init asm_out_file.
2022-07-08 12:52:47 +02:00
Tamar Christina
f7854e2faf middle-end: don't lower past veclower [PR106063]
Hi All,

My previous patch can cause a problem if the pattern matches after veclower
as it may replace the construct with a vector sequence which the target may not
directly support.

As such don't perform the rewriting if after veclower unless the target supports
the operation.  If before veclower do the rewriting as well if the target didn't
support the original operation either.

gcc/ChangeLog:

	PR tree-optimization/106063
	* match.pd: Do not apply pattern after veclower is not supported.

gcc/testsuite/ChangeLog:

	PR tree-optimization/106063
	* gcc.dg/pr106063.c: New test.
2022-07-08 08:30:22 +01:00
Thomas Schwinge
faa0c328ee Fix one issue in OpenMP 'requires' directive diagnostics
Fix-up for recent commit 683f118439
"OpenMP: Move omp requires checks to libgomp".

	gcc/
	* lto-cgraph.cc (input_offload_tables) <LTO_symtab_edge>: Correct
	'fn2' computation.
	libgomp/
	* testsuite/libgomp.c-c++-common/requires-1.c: Add 'dg-note's.
	* testsuite/libgomp.c-c++-common/requires-2.c: Likewise.
	* testsuite/libgomp.c-c++-common/requires-3.c: Likewise.
	* testsuite/libgomp.c-c++-common/requires-7.c: Likewise.
	* testsuite/libgomp.fortran/requires-1.f90: Likewise.
2022-07-08 08:53:58 +02:00
Tamar Christina
13f44099bc middle-end: Use subregs to expand COMPLEX_EXPR to set the lowpart.
When lowering COMPLEX_EXPR we currently emit two VEC_EXTRACTs.  One for the
lowpart and one for the highpart.

The problem with this is that in RTL the lvalue of the RTX is the only thing
tying the two instructions together.

This means that e.g. combine is unable to try to combine the two instructions
for setting the lowpart and highpart.

For ISAs that have bit extract instructions we can eliminate one of the extracts
if, and only if we're setting the entire complex number.

This change changes the expand code when we're setting the entire complex number
to generate a subreg for the lowpart instead of a vec_extract.

This allows us to optimize sequences such as:

_Complex int f(int a, int b) {
    _Complex int t = a + b * 1i;
    return t;
}

from:

f:
	bfi     x2, x0, 0, 32
	bfi     x2, x1, 32, 32
	mov     x0, x2
	ret

into:

f:
	bfi	x0, x1, 32, 32
	ret

I have also confirmed the codegen for x86_64 did not change.

gcc/ChangeLog:

	* expmed.cc (store_bit_field_1): Add parameter that indicates if value is
	still undefined and if so emit a subreg move instead.
	(store_integral_bit_field): Likewise.
	(store_bit_field): Likewise.
	* expr.h (write_complex_part): Likewise.
	* expmed.h (store_bit_field): Add new parameter.
	* builtins.cc (expand_ifn_atomic_compare_exchange_into_call): Use new
	parameter.
	(expand_ifn_atomic_compare_exchange): Likewise.
	* calls.cc (store_unaligned_arguments_into_pseudos): Likewise.
	* emit-rtl.cc (validate_subreg): Likewise.
	* expr.cc (emit_group_store): Likewise.
	(copy_blkmode_from_reg): Likewise.
	(copy_blkmode_to_reg): Likewise.
	(clear_storage_hints): Likewise.
	(write_complex_part):  Likewise.
	(emit_move_complex_parts): Likewise.
	(expand_assignment): Likewise.
	(store_expr): Likewise.
	(store_field): Likewise.
	(expand_expr_real_2): Likewise.
	* ifcvt.cc (noce_emit_move_insn): Likewise.
	* internal-fn.cc (expand_arith_set_overflow): Likewise.
	(expand_arith_overflow_result_store): Likewise.
	(expand_addsub_overflow): Likewise.
	(expand_neg_overflow): Likewise.
	(expand_mul_overflow): Likewise.
	(expand_arith_overflow): Likewise.

gcc/testsuite/ChangeLog:

	* g++.target/aarch64/complex-init.C: New test.
2022-07-08 07:39:33 +01:00
Haochen Jiang
bf3695691f i386: Handle memory operand for direct call to cvtps2pd in unpack
gcc/ChangeLog:

	PR target/106180
	* config/i386/sse.md (sse2_cvtps2pd<mask_name>_1):
	Rename from *sse2_cvtps2pd<mask_name>_1.
	(vec_unpacks_lo_v4sf): Add handler for memory operand.

gcc/testsuite/ChangeLog:

	PR target/106180
	* g++.target/i386/pr106180-1.C: New test.
2022-07-08 12:17:43 +08:00
Lulu Cheng
aa8fd7f656 LoongArch: Modify fp_sp_offset and gp_sp_offset's calculation method when frame->mask or frame->fmask is zero.
Under the LA architecture, when the stack is dropped too far, the process
of dropping the stack is divided into two steps.
step1: After dropping the stack, save callee saved registers on the stack.
step2: The rest of it.

The stack drop operation is optimized when frame->total_size minus
frame->sp_fp_offset is an integer multiple of 4096, can reduce the number
of instructions required to drop the stack. However, this optimization is
not effective because of the original calculation method

The following case:
	int main()
	{
  	  char buf[1024 * 12];
  	  printf ("%p\n", buf);
  	  return 0;
	}

As you can see from the generated assembler, the old GCC has two more
instructions than the new GCC, lines 14 and line 24.

	   new                                        old
 10 main:                       | 11 main:
 11   addi.d  $r3,$r3,-16       | 12   lu12i.w $r13,-12288>>12
 12   lu12i.w $r13,-12288>>12   | 13   addi.d  $r3,$r3,-2032
 13   lu12i.w $r5,-12288>>12    | 14   ori $r13,$r13,2016
 14   lu12i.w $r12,12288>>12    | 15   lu12i.w $r5,-12288>>12
 15   st.d  $r1,$r3,8           | 16   lu12i.w $r12,12288>>12
 16   add.d $r12,$r12,$r5       | 17   st.d  $r1,$r3,2024
 17   add.d $r3,$r3,$r13        | 18   add.d $r12,$r12,$r5
 18   add.d $r5,$r12,$r3        | 19   add.d $r3,$r3,$r13
 19   la.local  $r4,.LC0        | 20   add.d $r5,$r12,$r3
 20   bl  %plt(printf)          | 21   la.local  $r4,.LC0
 21   lu12i.w $r13,12288>>12    | 22   bl  %plt(printf)
 22   add.d $r3,$r3,$r13        | 23   lu12i.w $r13,8192>>12
 23   ld.d  $r1,$r3,8           | 24   ori $r13,$r13,2080
 24   or  $r4,$r0,$r0           | 25   add.d $r3,$r3,$r13
 25   addi.d  $r3,$r3,16        | 26   ld.d  $r1,$r3,2024
 26   jr  $r1                   | 27   or  $r4,$r0,$r0
			        | 28   addi.d  $r3,$r3,2032
 				| 29   jr  $r1
gcc/ChangeLog:

	* config/loongarch/loongarch.cc (loongarch_compute_frame_info):
	Modify fp_sp_offset and gp_sp_offset's calculation method,
	when frame->mask or frame->fmask is zero, don't minus UNITS_PER_WORD
	or UNITS_PER_FP_REG.

gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/prolog-opt.c: New test.
2022-07-08 11:11:20 +08:00
GCC Administrator
6345c41454 Daily bump. 2022-07-08 00:16:22 +00:00
Ian Lance Taylor
d8ddf1fa09 libbacktrace: don't exit Mach-O dyld library loop on one failure
* macho.c (backtrace_initialize) [HAVE_MACH_O_DYLD_H]: Don't exit
	loop if we can't find debug info for one shared library.
2022-07-07 16:54:05 -07:00
Ian Lance Taylor
9ed5779623 libbacktrace: don't let "make clean" remove allocfail.sh
For https://github.com/ianlancetaylor/libbacktrace/issues/81
	* Makefile.am (MAKETESTS): New variable split out of TESTS.
	(CLEANFILES): Replace TESTS with BUILDTESTS and MAKETESTS.
	* Makefile.in: Regenerate.
2022-07-07 16:15:05 -07:00
Patrick Palka
7b90f07f77 c++: generic targs and identity substitution [PR105956]
In r13-1045-gcb7fd1ea85feea I assumed that substitution into generic
DECL_TI_ARGS corresponds to an identity mapping of the given arguments,
and hence its safe to always elide such substitution.  But this PR
demonstrates that such a substitution isn't always the identity mapping,
in particular when there's an ARGUMENT_PACK_SELECT argument, which gets
handled specially during substitution:

  * when substituting an APS into a template parameter, we strip the
    APS to its underlying argument;
  * and when substituting an APS into a pack expansion, we strip the
    APS to its underlying argument pack.

In this testcase, when expanding the pack expansion pattern (idx + Ns)...
with Ns={0,1}, we specialize idx twice, first with Ns=APS<0,{0,1}> and
then Ns=APS<1,{0,1}>.  The DECL_TI_ARGS of idx are the generic template
arguments of the enclosing class template impl, so before r13-1045,
we'd substitute into its DECL_TI_ARGS which gave Ns={0,1} as desired.
But after r13-1045, we elide this substitution and end up attempting to
hash the original Ns argument, an APS, which ICEs.

So this patch reverts that part of r13-1045.  I considered using
preserve_args in this case instead, but that'd break the static_assert
in the testcase because preserve_args always strips APS to its
underlying argument, but here we want to strip it to its underlying
argument pack, so we'd incorrectly end up forming the specializations
impl<0>::idx and impl<1>::idx instead of impl<0,1>::idx.

Although we can't elide the substitution into DECL_TI_ARGS in light of
ARGUMENT_PACK_SELECT, it should still be safe to elide template argument
coercion in the case of a non-template decl, which this patch preserves.

It's unfortunate that we need to remove this optimization just because
it doesn't hold for one special tree code.  So this patch implements a
heuristic in tsubst_template_args to avoid allocating a new TREE_VEC if
the substituted elements are identical to those of a level from ARGS, as
well as a similar heuristic for tsubst_argument_pack.  It turns out that
about 40% of all calls to tsubst_template_args benefit from this, and it
reduces memory usage by about 4% for e.g. range-v3's zip.cpp (relative to
r13-1045) which more than makes up for the reversion.

	PR c++/105956

gcc/cp/ChangeLog:

	* pt.cc (template_arg_to_parm): Define.
	(tsubst_argument_pack): Try to reuse the corresponding
	ARGUMENT_PACK from 'args' when substituting into a generic
	ARGUMENT_PACK for a variadic template parameter.
	(tsubst_template_args): Move variable declarations closer to
	their first use.  Replace 'orig_t' with 'r'.  Rename 'need_new'
	to 'const_subst_p'.  Heuristically detect if the substituted
	elements are identical to that of a level from 'args' and avoid
	allocating a new TREE_VEC if so.  Add sanity check for the
	length of the new TREE_VEC, and remove dead ARGUMENT_PACK_P test.
	(tsubst_decl) <case TYPE_DECL, case VAR_DECL>: Revert
	r13-1045-gcb7fd1ea85feea change for avoiding substitution into
	DECL_TI_ARGS, but still avoid coercion in this case.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/variadic183.C: New test.
2022-07-07 16:46:29 -04:00
David Malcolm
52f538fa4a analyzer: use label_text for superedge::get_description
gcc/analyzer/ChangeLog:
	* checker-path.cc (start_cfg_edge_event::get_desc): Update for
	superedge::get_description returning a label_text.
	* engine.cc (feasibility_state::maybe_update_for_edge): Likewise.
	* supergraph.cc (superedge::dump): Likewise.
	(superedge::get_description): Convert return type from char * to
	label_text.
	* supergraph.h (superedge::get_description): Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-07 15:56:08 -04:00
David Malcolm
a8dce13c07 Convert label_text to C++11 move semantics
libcpp's class label_text stores a char * for a string and a flag saying
whether it owns the buffer.  I added this class before we could use
C++11, and so to avoid lots of copying it required an explicit call
to label_text::maybe_free to potentially free the buffer.

Now that we can use C++11, this patch removes label_text::maybe_free in
favor of doing the cleanup in the destructor, and using C++ move
semantics to avoid any copying.  This allows lots of messy cleanup code
to be eliminated in favor of implicit destruction (mostly in the
analyzer).

No functional change intended.

gcc/analyzer/ChangeLog:
	* call-info.cc (call_info::print): Update for removal of
	label_text::maybe_free in favor of automatic memory management.
	* checker-path.cc (checker_event::dump): Likewise.
	(checker_event::prepare_for_emission): Likewise.
	(state_change_event::get_desc): Likewise.
	(superedge_event::should_filter_p): Likewise.
	(start_cfg_edge_event::get_desc): Likewise.
	(warning_event::get_desc): Likewise.
	(checker_path::dump): Likewise.
	(checker_path::debug): Likewise.
	* diagnostic-manager.cc
	(diagnostic_manager::prune_for_sm_diagnostic): Likewise.
	(diagnostic_manager::prune_interproc_events): Likewise.
	* program-state.cc (sm_state_map::to_json): Likewise.
	* region.cc (region::to_json): Likewise.
	* sm-malloc.cc (inform_nonnull_attribute): Likewise.
	* store.cc (binding_map::to_json): Likewise.
	(store::to_json): Likewise.
	* svalue.cc (svalue::to_json): Likewise.

gcc/c-family/ChangeLog:
	* c-format.cc (range_label_for_format_type_mismatch::get_text):
	Update for removal of label_text::maybe_free in favor of automatic
	memory management.

gcc/ChangeLog:
	* diagnostic-format-json.cc (json_from_location_range): Update for
	removal of label_text::maybe_free in favor of automatic memory
	management.
	* diagnostic-format-sarif.cc
	(sarif_builder::make_location_object): Likewise.
	* diagnostic-show-locus.cc (struct pod_label_text): New.
	(class line_label): Convert m_text from label_text to pod_label_text.
	(layout::print_any_labels): Move "text" to the line_label.
	* tree-diagnostic-path.cc (path_label::get_text): Update for
	removal of label_text::maybe_free in favor of automatic memory
	management.
	(event_range::print): Likewise.
	(default_tree_diagnostic_path_printer): Likewise.
	(default_tree_make_json_for_path): Likewise.

libcpp/ChangeLog:
	* include/line-map.h: Include <utility>.
	(class label_text): Delete maybe_free method in favor of a
	destructor.  Add move ctor and assignment operator.  Add deletion
	of the copy ctor and copy-assignment operator.  Rename field
	m_caller_owned to m_owned.  Add std::move where necessary; add
	moved_from member function.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-07 15:50:26 -04:00
David Malcolm
897b3b31f0 analyzer: fix false positives from -Wanalyzer-tainted-divisor [PR106225]
gcc/analyzer/ChangeLog:
	PR analyzer/106225
	* sm-taint.cc (taint_state_machine::on_stmt): Move handling of
	assignments from division to...
	(taint_state_machine::check_for_tainted_divisor): ...this new
	function.  Reject warning when the divisor is known to be non-zero.
	* sm.cc: Include "analyzer/program-state.h".
	(sm_context::get_old_region_model): New.
	* sm.h (sm_context::get_old_region_model): New decl.

gcc/testsuite/ChangeLog:
	PR analyzer/106225
	* gcc.dg/analyzer/taint-divisor-1.c: Add test coverage for various
	correct and incorrect checks against zero.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-07 15:50:26 -04:00
Jonathan Wakely
ad6135e261 libstdc++: Remove workaround in __gnu_cxx::char_traits::move [PR89074]
The front-end bug that prevented this constexpr loop from working has
been fixed since GCC 12.1 so we can remove the workaround.

libstdc++-v3/ChangeLog:

	PR c++/89074
	* include/bits/char_traits.h (__gnu_cxx::char_traits::move):
	Remove workaround for front-end bug.
2022-07-07 17:38:14 +01:00
Prathamesh Kulkarni
9de8fbe150 statistics.cc: Add check to see if fn is not NULL in get_function_name.
gcc/ChangeLog:

	* statistics.cc (get_function_name): Add check to see if fn is not NULL.
2022-07-07 22:05:09 +05:30
Jason Merrill
81bec060e3 c++: -Woverloaded-virtual and dtors [PR87729]
My earlier patch broke out of the loop over base members when we found a
match, but that caused trouble for dtors, which can have multiple for which
same_signature_p is true.  But as the function comment says, we know this
doesn't apply to [cd]tors, so skip them.

	PR c++/87729

gcc/cp/ChangeLog:

	* class.cc (warn_hidden): Ignore [cd]tors.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Woverloaded-virt3.C: New test.
2022-07-07 11:56:09 -04:00
Martin Liska
d89fa97ff3 lto-plugin: use locking only for selected targets
For now, support locking only for linux targets that are different from
riscv* where the target depends on libatomic (and fails during
bootstrap).

	PR lto/106170

lto-plugin/ChangeLog:

	* configure.ac: Configure HAVE_PTHREAD_LOCKING.
	* lto-plugin.c (LOCK_SECTION): New.
	(UNLOCK_SECTION): New.
	(claim_file_handler): Use the newly added macros.
	(onload): Likewise.
	* config.h.in: Regenerate.
	* configure: Regenerate.
2022-07-07 15:18:58 +02:00
Richard Biener
9fc61fc8da Speedup update-ssa some more
The following avoids copying an sbitmap and one traversal by avoiding
to re-allocate old_ssa_names when not necessary.  In addition this
actually checks what the comment before PHI insert iterating promises,
that the old_ssa_names set does not grow.

	* tree-into-ssa.cc (iterating_old_ssa_names): New.
	(add_new_name_mapping): Grow {new,old}_ssa_names separately
	and only when actually needed.  Assert we are not growing
	the old_ssa_names set when iterating over it.
	(update_ssa): Remove old_ssa_names copying and empty_p
	query, note we are iterating over it and expect no set changes.
2022-07-07 13:22:31 +02:00
Thomas Schwinge
9ef714539c Fix Intel MIC 'mkoffload' for OpenMP 'requires'
Similar to how the other 'mkoffload's got changed in
recent commit 683f118439
"OpenMP: Move omp requires checks to libgomp".

This also means finally switching Intel MIC 'mkoffload' to
'GOMP_offload_register_ver', 'GOMP_offload_unregister_ver',
making 'GOMP_offload_register', 'GOMP_offload_unregister'
legacy entry points.

	gcc/
	* config/i386/intelmic-mkoffload.cc (generate_host_descr_file)
	(prepare_target_image, main): Handle OpenMP 'requires'.
	(generate_host_descr_file): Switch to 'GOMP_offload_register_ver',
	'GOMP_offload_unregister_ver'.
	libgomp/
	* target.c (GOMP_offload_register, GOMP_offload_unregister):
	Denote as legacy entry points.
	* testsuite/lib/libgomp.exp
	(check_effective_target_offload_target_any): New proc.
	* testsuite/libgomp.c-c++-common/requires-1.c: Enable for
	'offload_target_any'.
	* testsuite/libgomp.c-c++-common/requires-3.c: Likewise.
	* testsuite/libgomp.c-c++-common/requires-7.c: Likewise.
	* testsuite/libgomp.fortran/requires-1.f90: Likewise.
2022-07-07 12:38:51 +02:00
Thomas Schwinge
5647e2c385 Enhance 'libgomp.c-c++-common/requires-4.c', 'libgomp.c-c++-common/requires-5.c' testing
These should compile and link and execute in all configurations; host-fallback
execution, which we may actually verify.

Follow-up to recent commit 683f118439
"OpenMP: Move omp requires checks to libgomp".

	libgomp/
	* testsuite/libgomp.c-c++-common/requires-4.c: Enhance testing.
	* testsuite/libgomp.c-c++-common/requires-5.c: Likewise.
2022-07-07 12:38:51 +02:00
Thomas Schwinge
99831ceb87 Adjust 'libgomp.c-c++-common/requires-3.c'
As documented, this one does "Check diagnostic by device-compiler's lto1".
Indeed there are none when compiling with '-foffload=disable' with an
offloading-enabled compiler, so we should use 'offload_target_[...]', as
used in other similar test cases.

Follow-up to recent commit 683f118439
"OpenMP: Move omp requires checks to libgomp".

	libgomp/
	* testsuite/libgomp.c-c++-common/requires-3.c: Adjust.
2022-07-07 12:38:50 +02:00
Richard Biener
8bc2439437 target/106219 - proprly mark builtins pure via ix86_add_new_builtins
The target optimize pragma path to initialize extra target specific
builtins missed handling of the pure_p flag which in turn causes
extra clobber side-effects of gather builtins leading to unexpected
issues downhill.

	PR target/106219
	* config/i386/i386-builtins.cc (ix86_add_new_builtins): Properly
	set DECL_PURE_P.

	* g++.dg/pr106219.C: New testcase.
2022-07-07 12:03:45 +02:00
Jonathan Wakely
c1b1c4e58b testsuite: Fix incorrect -mfloat128-type option
This test currently fails with an error about -mfloat128-type being an
invalid option, which is not what it's supposed to be testing:

XFAIL: gcc.target/powerpc/ppc-fortran/pr80108-1.f90   -O  (test for excess errors)
Excess errors:
xgcc: error: unrecognized command-line option '-mfloat128-type'; did you mean '-mfloat128'?

With this change we get the error that the comment says it expects:

XFAIL: gcc.target/powerpc/ppc-fortran/pr80108-1.f90   -O  (test for excess errors)
Excess errors:
f951: Error: power9 target option is incompatible with '-mcpu=<xxx>' for <xxx> less than power9
f951: Error: '-mfloat128' requires VSX support
f951: Error: '-m64' requires a PowerPC64 cpu

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/ppc-fortran/pr80108-1.f90: Change
	-mfloat128-type to -mfloat128.
2022-07-07 10:29:37 +01:00
Richard Biener
1e1fdb729d Speed up LC SSA rewrite more
In many cases loops have only one exit or a variable is only live
across one of the exits.  In this case we know that all uses
outside of the loop will be dominated by the single LC PHI node
we insert.  If that holds for all variables requiring LC SSA PHIs
then we can simplify the update_ssa process, avoiding the
(iterated) dominance frontier computations.

	* tree-ssa-loop-manip.cc (add_exit_phis_var): Return the
	number of LC PHIs inserted.
	(add_exit_phis): Return whether any variable required
	multiple LC PHI nodes.
	(rewrite_into_loop_closed_ssa_1): Use TODO_update_ssa_no_phi
	when possible.
2022-07-07 10:49:45 +02:00
Richard Biener
e5a9d60317 Speed up LC SSA rewrite
The following avoids collecting all loops exit blocks into bitmaps
and computing the union of those up the loop tree possibly repeatedly.
Instead we make sure to do this only once for each loop with a
definition possibly requiring a LC phi node plus make sure to
leverage recorded exits to avoid the intermediate bitmap allocation.

	* tree-ssa-loop-manip.cc (compute_live_loop_exits): Take
	the def loop exit block bitmap as argument instead of
	re-computing it here.
	(add_exit_phis_var): Adjust.
	(loop_name_cmp): New function.
	(add_exit_phis): Sort variables to insert LC PHI nodes
	after definition loop, for each definition loop compute
	the exit block bitmap once.
	(get_loops_exit): Remove.
	(rewrite_into_loop_closed_ssa_1): Do not pre-record
	all loop exit blocks into bitmaps.  Record loop exits
	if required.
2022-07-07 09:06:13 +02:00
Dimitrije Milosevic
7922f5ee64
Mips: Fix the ASAN shadow offset hook for the n32 ABI
gcc/ChangeLog:

	* config/mips/mips.cc (mips_asan_shadow_offset): Reformat
	to handle the N32 ABI.
	* config/mips/mips.h (SUBTARGET_SHADOW_OFFSET): Remove
	the macro, as it is not needed anymore.
2022-07-07 10:20:03 +08:00
Dimitrije Milosevic
ee915c72da
libsanitizer: Cherry-pick 5d8077565e41 from upstream
5d8077565e41: [MIPS][AddressSanitizer] Resolve build issues for the n32 ABI
2022-07-07 10:19:58 +08:00
GCC Administrator
4bc92c3bfa Daily bump. 2022-07-07 00:16:46 +00:00
Thomas Schwinge
3f05e03d6c Restore 'GOMP_offload_unregister_ver' functionality
The recent commit 683f118439
"OpenMP: Move omp requires checks to libgomp" changed the
'GOMP_offload_register_ver' interface but didn't change
'GOMP_offload_unregister_ver' accordingly, so we're no longer
actually unregistering.

	gcc/
	* config/gcn/mkoffload.cc (process_obj): Clarify 'target_data' ->
	'[...]_data'.
	* config/nvptx/mkoffload.cc (process): Likewise.
	libgomp/
	* target.c (GOMP_offload_register_ver): Clarify 'target_data' ->
	'data'.
	(GOMP_offload_unregister_ver): Likewise.  Fix up 'target_data'.
2022-07-06 22:53:04 +02:00
Thomas Schwinge
2f0d819a81 Define 'OMP_REQUIRES_[...]', 'GOMP_REQUIRES_[...]' in a single place
Clean up for recent commit 683f118439
"OpenMP: Move omp requires checks to libgomp".

	gcc/
	* omp-general.h (enum omp_requires): Use 'GOMP_REQUIRES_[...]'.
	include/
	* gomp-constants.h (OMP_REQUIRES_[...]): Update comment.
2022-07-06 22:51:24 +02:00
Lewis Hyatt
e46f4d7430 diagnostics: Honor #pragma GCC diagnostic in the preprocessor [PR53431]
As discussed on PR c++/53431, currently, "#pragma GCC diagnostic" does
not always take effect for diagnostics generated by libcpp. The reason
is that libcpp itself does not interpret this pragma and only sends it on
to the frontend, hence the pragma is only honored if the frontend
arranges for it. The C frontend does process the pragma immediately
(more or less) after seeing the token, so things work fine there. The PR
points out that it doesn't work for C++, because the C++ frontend
doesn't handle anything until it has read all the tokens from
libcpp. The underlying problem is not C++-specific, though, and for
instance, gcc -E has the same issue.

This commit fixes the PR by adding the concept of an early pragma handler that
can be registered by frontends, which gives them a chance to process
diagnostic pragmas from libcpp before it is too late for them to take
effect. The C++ and preprocess-only frontends are modified to use early
pragmas and correct the behavior.

gcc/c-family/ChangeLog:

	PR preprocessor/53920
	PR c++/53431
	* c-common.cc (c_option_is_from_cpp_diagnostics): New function.
	* c-common.h (c_option_is_from_cpp_diagnostics): Declare.
	(c_pp_stream_token): Declare.
	* c-ppoutput.cc (init_pp_output): Refactor logic about skipping
	pragmas to...
	(should_output_pragmas): ...here. New function.
	(token_streamer::stream): Support handling early pragmas.
	(do_line_change): Likewise.
	(c_pp_stream_token): New function.
	* c-pragma.cc (struct pragma_diagnostic_data): New helper class.
	(pragma_diagnostic_lex_normal): New function. Moved logic for
	interpreting GCC diagnostic pragmas here.
	(pragma_diagnostic_lex_pp): New function for parsing diagnostic pragmas
	directly from libcpp.
	(handle_pragma_diagnostic): Refactor into helper function...
	(handle_pragma_diagnostic_impl): ...here.  New function.
	(handle_pragma_diagnostic_early): New function.
	(handle_pragma_diagnostic_early_pp): New function.
	(struct pragma_ns_name): Renamed to...
	(struct pragma_pp_data): ...this.  Add new "early_handler" member.
	(c_register_pragma_1): Support early pragmas in the preprocessor.
	(c_register_pragma_with_early_handler): New function.
	(c_register_pragma): Support the new early handlers in struct
	internal_pragma_handler.
	(c_register_pragma_with_data): Likewise.
	(c_register_pragma_with_expansion): Likewise.
	(c_register_pragma_with_expansion_and_data): Likewise.
	(c_invoke_early_pragma_handler): New function.
	(c_pp_invoke_early_pragma_handler): New function.
	(init_pragma): Add early pragma support for diagnostic pragmas.
	* c-pragma.h (struct internal_pragma_handler): Add new early handler
	members.
	(c_register_pragma_with_early_handler): Declare.
	(c_invoke_early_pragma_handler): Declare.
	(c_pp_invoke_early_pragma_handler): Declare.

gcc/cp/ChangeLog:

	PR c++/53431
	* parser.cc (cp_parser_pragma_kind): Move earlier in the file.
	(cp_lexer_handle_early_pragma): New function.
	(cp_lexer_new_main): Support parsing and handling early pragmas.
	(c_parse_file): Adapt to changes in cp_lexer_new_main.

gcc/testsuite/ChangeLog:

	PR preprocessor/53920
	PR c++/53431
	* c-c++-common/pragma-diag-11.c: New test.
	* c-c++-common/pragma-diag-12.c: New test.
	* c-c++-common/pragma-diag-13.c: New test.
2022-07-06 15:00:09 -04:00
Iain Buclaw
208fbc779c d: Merge upstream dmd 56589f0f4, druntime 651389b5, phobos 1516ecad9.
D front-end changes:

    - Import latest bug fixes to mainline.

D runtime changes:

    - Import latest bug fixes to mainline.

Phobos changes:

    - Import latest bug fixes to mainline.

gcc/d/ChangeLog:

	* dmd/MERGE: Merge upstream dmd 56589f0f4.

libphobos/ChangeLog:

	* libdruntime/MERGE: Merge upstream druntime 651389b5.
	* src/MERGE: Merge upstream phobos 1516ecad9.
2022-07-06 19:51:38 +02:00
Iain Buclaw
c785204735 d: Build the D sources in the front-end with -fno-exceptions
The D front-end does not use exceptions, but it still requires RTTI for
some lowerings of convenience language features.  Enforce it with by
building with `-fno-exceptions'.

gcc/d/ChangeLog:

	* Make-lang.in (NOEXCEPTION_DFLAGS): Define.
	(ALL_DFLAGS): Add NO_EXCEPTION_DFLAGS.
2022-07-06 19:51:38 +02:00
Immad Mir
acb696b792 analyzer: add testcase of using closed fd without warning.
This patch adds a testcase for passing a closed fd to a function
that does not emit any warning.

gcc/testsuite/ChangeLog:
	* gcc.dg/analyzer/fd-4.c: Add a new testcase to demonstrate
	passsing of a closed file descriptor to a function that does
	not emit any warning.

Signed-off-by: Immad Mir <mirimmad@outlook.com>
2022-07-06 21:38:41 +05:30
Immad Mir
3a6de2b2db analyzer: reorder initialization of state m_invalid in sm-fd.cc [PR106184]
This patch reorders the initialization of state m_invalid in sm-fd.cc
so that the order of initializers is same as the ordering of the fields
in the class decl.

gcc/analyzer/ChangeLog:
	PR analyzer/106184
	* sm-fd.cc (fd_state_machine): Change ordering of initialization
	of state m_invalid so that the order of initializers is same as
	the ordering of the fields in the class decl.

Signed-off-by: Immad Mir <mirimmad@outlook.com>
2022-07-06 21:37:30 +05:30
Immad Mir
71c05bb8e2 analyzer: show close event for use_after_close diagnostic
This patch saves the "close" event in use_after_close diagnostic
and shows it where possible.

gcc/analyzer/ChangeLog:
	* sm-fd.cc (use_after_close): save the "close" event and
	show it where possible.

gcc/testsuite/ChangeLog:
	* gcc.dg/analyzer/fd-4.c (test_3): change the message note to conform to the
	changes in analyzer/sm-fd.cc
	(test_4): Likewise.

Signed-off-by: Immad Mir <mirimmad@outlook.com>
2022-07-06 21:36:07 +05:30
Piotr Trojanek
9e0d5db3e0 [Ada] Simplify regular expression that matches 8 consecutive digits
Makefile cleanup; behaviour is unaffected.

gcc/ada/

	* gcc-interface/Make-lang.in (ada/generated/gnatvsn.ads):
	Simplify regular expression. The "interval expression",
	i.e. \{8\} is part of the POSIX regular expressions, so it
	should not be a problem for modern implementations of sed.
2022-07-06 13:29:50 +00:00