Commit graph

194649 commits

Author SHA1 Message Date
Martin Liska
c2d0742938 gcc-changelog: do not run extra deduction
Do not deduce changelog for root ChangeLog ('').

contrib/ChangeLog:

	* gcc-changelog/git_commit.py: Do not deduce changelog for root ChangeLog.
2022-08-02 10:50:07 +02:00
Richard Biener
c30bbd4d16 tree-optimization/106498 - reduce SSA updates in autopar
The following reduces the number of SSA updates done during autopar
OMP expansion, specifically avoiding the cases that just add virtual
operands (where maybe none have been before) in dead regions of the CFG.

Instead virtual SSA update is delayed until after the pass.  There's
much more TLC needed here, but test coverage makes it really difficult.

	PR tree-optimization/106498
	* omp-expand.cc (expand_omp_taskreg): Do not perform virtual
	SSA update here.
	(expand_omp_for): Or here.
	(execute_expand_omp): Instead schedule it here together
	with CFG cleanup via TODO.
2022-08-02 08:40:30 +02:00
Richard Biener
bc7526f6fc lto/106334 - fix previous fix wrt -flto-partition=none
This adjusts the assert guard to include -flto-partition=none which
behaves as WPA.

	PR lto/106334
	* dwarf2out.cc (dwarf2out_register_external_die): Adjust
	assert.
2022-08-02 08:35:01 +02:00
Richard Biener
b9da686470 tree-optimization/106495 - avoid threading to possibly never executed edge
The following builds upon the logic of the PR105679 fix by avoiding
to thread to a known edge that is predicted as probably never executed.

	PR tree-optimization/106495
	* tree-ssa-threadbackward.cc
	(back_threader_profitability::profitable_path_p): If known_edge
	is probably never executed avoid threading.
2022-08-02 08:35:01 +02:00
GCC Administrator
325103829e Daily bump. 2022-08-02 00:16:51 +00:00
David Malcolm
e8bc6918b3 c: improvements to address space diagnostics
This adds a clarifying "note" to address space mismatch diagnostics.
For example, it improves the diagnostic for
gcc.target/i386/addr-space-typeck-2.c from:

addr-space-typeck-2.c: In function 'test_bad_call':
addr-space-typeck-2.c:12:22: error: passing argument 2 of 'expects_seg_gs'
  from pointer to non-enclosed address space
   12 |   expects_seg_gs (0, ptr, 1);
      |                      ^~~

to:

addr-space-typeck-2.c: In function 'test_bad_call':
addr-space-typeck-2.c:12:22: error: passing argument 2 of 'expects_seg_gs'
  from pointer to non-enclosed address space
   12 |   expects_seg_gs (0, ptr, 1);
      |                      ^~~
addr-space-typeck-2.c:7:51: note: expected '__seg_gs void *' but argument
  is of type 'void *'
    7 | extern void expects_seg_gs (int i, void __seg_gs *param, int j);
      |                                    ~~~~~~~~~~~~~~~^~~~~

I took the liberty of adding the test coverage to i386 since we need
a specific target to test this on.

gcc/c/ChangeLog:
	* c-typeck.cc (build_c_cast): Quote names of address spaces in
	diagnostics.
	(convert_for_assignment): Add a note to address space mismatch
	diagnostics, specifying the expected and actual types.

gcc/testsuite/ChangeLog:
	* gcc.target/i386/addr-space-typeck-1.c: New test.
	* gcc.target/i386/addr-space-typeck-2.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-08-01 19:30:15 -04:00
David Malcolm
ffd12be139 docs: fix copy&paste error in -Wanalyzer-putenv-of-auto-var
gcc/ChangeLog:
	* doc/invoke.texi (-Wanalyzer-putenv-of-auto-var): Fix copy&paste
	error.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-08-01 19:30:15 -04:00
Roger Sayle
96e5f6696a PR target/106481: Handle CONST_WIDE_INT in REG_EQUAL during STV on x86_64.
This patch resolves PR target/106481, and is an oversight in my recent
battles with REG_EQUAL notes during TImode STV (see PR target/106278
https://gcc.gnu.org/pipermail/gcc-patches/2022-July/598416.html).

The patch above's/current behaviour is that we check that the mode of
the REG_EQUAL note is TImode before using PUT_MODE to set it to V1TImode.
However, the new test case reveals that this doesn't consider REG_EQUAL
notes that are CONST_INT or CONST_WIDE_INT, i.e. that are VOIDmode,
and so STV produces:

(insn 85 84 86 2 (set (reg:V1TI 113)
        (reg:V1TI 84)) "pr106481.c":13:3 1766 {movv1ti_internal}
     (expr_list:REG_EQUAL (const_wide_int 0x0ffffffff00000004)
        (nil)))

which causes problems as the const_wide_int isn't a valid immediate
constant for V1TImode.  With this patch, we now generate the correct:

(insn 85 84 86 2 (set (reg:V1TI 113)
        (reg:V1TI 84)) "pr106481.c":13:3 1766 {movv1ti_internal}
     (expr_list:REG_EQUAL (const_vector:V1TI [
                (const_wide_int 0x0ffffffff00000004)
            ])
        (nil)))

2022-08-01  Roger Sayle  <roger@nextmovesoftware.com>
	    Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog
	PR target/106481
	* config/i386/i386-features.cc (timode_scalar_chain::convert_insn):
	Convert a CONST_SCALAR_INT_P in a REG_EQUAL note into a V1TImode
	CONST_VECTOR.

gcc/testsuite/ChangeLog
	PR target/106481
	* gcc.target/i386/pr106481.c: New test case.
2022-08-01 23:08:23 +01:00
H.J. Lu
8092892014 x86: Add ix86_ifunc_ref_local_ok
We can't always use the PLT entry as the function address for local IFUNC
functions.  When the PIC register is needed for PLT call, indirect call
via the PLT entry will fail since the PIC register may not be set up
properly for indirect call.  Add ix86_ifunc_ref_local_ok to return false
when the PLT entry can't be used as local IFUNC function pointers.

gcc/

	PR target/83782
	* config/i386/i386.cc (ix86_ifunc_ref_local_ok): New.
	(TARGET_IFUNC_REF_LOCAL_OK): Use it.

gcc/testsuite/

	PR target/83782
	* gcc.target/i386/pr83782-1.c: Require non-ia32.
	* gcc.target/i386/pr83782-2.c: Likewise.
	* gcc.target/i386/pr83782-3.c: New test.
2022-08-01 11:28:43 -07:00
Jose E. Marchesi
32566720f3 btf: emit linkage information in BTF_KIND_FUNC entries
The kernel bpftool expects BTF_KIND_FUNC entries in BTF to include an
annotation reflecting the linkage of functions (static, global).  For
whatever reason they abuse the `vlen' field of the BTF_KIND_FUNC entry
instead of adding a variable-part to the record like it is done with
other entry kinds.

This patch makes GCC to include this linkage info in BTF_KIND_FUNC
entries.

Tested in bpf-unknown-none target.

gcc/ChangeLog:

	PR debug/106263
	* ctfc.h (struct ctf_dtdef): Add field linkage.
	* ctfc.cc (ctf_add_function): Set ctti_linkage.
	* dwarf2ctf.cc (gen_ctf_function_type): Pass a linkage for
	function types and subprograms.
	* btfout.cc (btf_asm_func_type): Emit linkage information for the
	function.
	(btf_dtd_emit_preprocess_cb): Propagate the linkage information
	for functions.

gcc/testsuite/ChangeLog:

	PR debug/106263
	* gcc.dg/debug/btf/btf-function-4.c: New test.
	* gcc.dg/debug/btf/btf-function-5.c: Likewise.
2022-08-01 19:44:12 +02:00
Andrew Stubbs
b64e937ccd openmp-simd-clone: Match shift types
Ensure that both parameters to vector shifts use the same mode.  This is most
important for amdgcn where the masks are DImode.

gcc/ChangeLog:

	* omp-simd-clone.cc (simd_clone_adjust): Convert shift_cnt to match
	the mask type.

Co-authored-by: Jakub Jelinek  <jakub@redhat.com>
2022-08-01 17:08:27 +01:00
Sam Feifer
388fbbd895 match.pd: Add new division pattern [PR104992]
This patch fixes a missed optimization in match.pd. It takes the pattern,
x / y * y == x, and optimizes it to x % y == 0. This produces fewer
instructions. This simplification does not happen for complex types.

This patch also adds tests for the optimization rule.

Bootstrapped/regtested on x86_64-pc-linux-gnu.

	PR tree-optimization/104992

gcc/ChangeLog:

	* match.pd (x / y * y == x): New simplification.

gcc/testsuite/ChangeLog:

	* g++.dg/pr104992-1.C: New test.
	* gcc.dg/pr104992.c: New test.
2022-08-01 09:01:53 -04:00
Roger Sayle
71f068a9b3 Update configure to check for a recent gnat Ada compiler.
GCC fails to bootstrap when configured with --enable-languages=all on
machines that have older versions of GNAT installed as the system Ada
compiler.  In configure, it's not sufficient to check whether gnat is
available, but whether a sufficiently recent version of GNAT is
installed.  This patch tweaks config/acx.m4 so that conftest.adb also
contains a reference to System.CRTL.int64 as required by the current
version of gcc/ada/osint.adb.  This fixes the build when the system
Ada is GNAT v4.8.5 (on Redhat 7) by disabling ada, but continues to
work fine when the system Ada is GNAT v11.3.1.

2022-08-01  Roger Sayle  <roger@nextmovesoftware.com>
	    Arnaud Charlet  <charlet@adacore.com>

config/ChangeLog
	* acx.m4 (AC_PROG_GNAT): Update conftest.adb to include
	features required of the host gnat compiler.

ChangeLog
	* configure: Regenerate.
2022-08-01 11:40:50 +01:00
Martin Liska
5d8637208d lto: replace $target with $host in configure.ac [PR106170]
PR lto/106170

lto-plugin/ChangeLog:

	* configure.ac: Replace $target with $host.
	* configure: Regenerate.
2022-08-01 10:32:00 +02:00
Jakub Jelinek
82ac4cd213 libfortran: Fix up boz_15.f90 on powerpc64le with -mabi=ieeelongdouble [PR106079]
The boz_15.f90 test FAILs on powerpc64le-linux when -mabi=ieeelongdouble
is used (either default through --with-long-double-format=ieee or
when used explicitly).
The problem is that the read/write transfer routines are called with
BT_REAL (or BT_COMPLEX) type and kind 17 which is magic we use to say
it is the IEEE quad real(kind=16) rather than the IBM double double
real(kind=16).  For the floating point input/output we then handle kind
17 specially, but for B/O/Z we just treat the bytes of the floating point
value as binary blob and using 17 in that case results in unexpected
behavior, for write it means we don't estimate right how many chars we'll
need and print ******************** etc. rather than what we should, and
even with explicit size we'd print one further byte than intended.
For read it would even mean overwriting some unrelated byte after the
floating point object.

Fixed by using 16 instead of 17 in the read_radix and write_{b,o,z} calls.

2022-08-01  Jakub Jelinek  <jakub@redhat.com>

	PR libfortran/106079
	* io/transfer.c (formatted_transfer_scalar_read,
	formatted_transfer_scalar_write): For type BT_REAL with kind 17
	change kind to 16 before calling read_radix or write_{b,o,z}.
2022-08-01 08:26:03 +02:00
Aldy Hernandez
3f05605364 Cleanups to frange.
These are some assorted cleanups to the frange class to make it easier
to drop in an implementation with FP endpoints:

* frange::set() had some asserts limiting the type of arguments
  passed.  There's no reason why we can't handle all the variants.
  Worse comes to worse, we can always return a VARYING which is
  conservative and correct.

* frange::normalize_kind() now returns a boolean that can be used in
  union and intersection to indicate that the range changed.

* Implement vrp_val_max and vrp_val_min for floats.  Also, move them
  earlier in the header file so frange can use them.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* value-range.cc (tree_compare): New.
	(frange::set): Make more general.
	(frange::normalize_kind): Cleanup and return bool.
	(frange::union_): Use normalize_kind return value.
	(frange::intersect): Same.
	(frange::verify_range): Remove unnecessary else.
	* value-range.h (vrp_val_max): Move before frange class.
	(vrp_val_min): Same.
	(frange::frange): Remove set to m_type.
2022-08-01 08:16:03 +02:00
Aldy Hernandez
7e029e067d const_tree conversion of vrange::supports_*
Make all vrange::supports_*_p methods const_tree as they can end up
being called from functions that are const_tree.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* value-range.cc (vrange::supports_type_p): Use const_tree.
	(irange::supports_type_p): Same.
	(frange::supports_type_p): Same.
	* value-range.h (Value_Range::supports_type_p): Same.
	(irange::supports_p): Same.
2022-08-01 08:16:03 +02:00
Aldy Hernandez
460dcec49f Make irange dependency explicit for range_of_ssa_name_with_loop_info.
Even though ranger is type agnostic, SCEV seems to only work with
integers.  This patch removes some FIXME notes making it explicit that
bounds_of_var_in_loop only works with iranges.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* gimple-range-fold.cc (fold_using_range::range_of_phi): Only
	query SCEV for integers.
	(fold_using_range::range_of_ssa_name_with_loop_info): Remove
	irange check.
2022-08-01 08:16:03 +02:00
Dimitrije Milošević
1efeaf99bd libsanitizer: Cherry-pick 2bfb0fcb51510f22723c8cdfefe from upstream
2bfb0fcb51510f22723c8cdfefe [Sanitizer][MIPS] Fix stat struct size for the O32 ABI.

Signed-off-by: Dimitrije Milosevic <dimitrije.milosevic@syrmia.com>.
2022-08-01 06:10:31 +02:00
GCC Administrator
4a7274ddc4 Daily bump. 2022-08-01 00:16:31 +00:00
Roger Sayle
525a1a73a5 Add rotl64ti2_doubleword pattern to i386.md
This patch adds rot[lr]64ti2_doubleword patterns to the x86_64 backend,
to move splitting of 128-bit TImode rotates by 64 bits after reload,
matching what we now do for 64-bit DImode rotations by 32 bits with -m32.

In theory moving when this rotation is split should have little
influence on code generation, but in practice "reload" sometimes
decides to make use of the increased flexibility to reduce the number
of registers used, and the code size, by using xchg.

For example:
__int128 x;
__int128 y;
__int128 a;
__int128 b;

void foo()
{
    unsigned __int128 t = x;
    t ^= a;
    t = (t<<64) | (t>>64);
    t ^= b;
    y = t;
}

Before:
        movq    x(%rip), %rsi
        movq    x+8(%rip), %rdi
        xorq    a(%rip), %rsi
        xorq    a+8(%rip), %rdi
        movq    %rdi, %rax
        movq    %rsi, %rdx
        xorq    b(%rip), %rax
        xorq    b+8(%rip), %rdx
        movq    %rax, y(%rip)
        movq    %rdx, y+8(%rip)
        ret

After:
        movq    x(%rip), %rax
        movq    x+8(%rip), %rdx
        xorq    a(%rip), %rax
        xorq    a+8(%rip), %rdx
        xchgq   %rdx, %rax
        xorq    b(%rip), %rax
        xorq    b+8(%rip), %rdx
        movq    %rax, y(%rip)
        movq    %rdx, y+8(%rip)
        ret

One some modern architectures this is a small win, on some older
architectures this is a small loss.  The decision which code to
generate is made in "reload", and could probably be tweaked by
register preferencing.  The much bigger win is that (eventually) all
TImode mode shifts and rotates by constants will become potential
candidates for TImode STV.

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

gcc/ChangeLog
	* config/i386/i386.md (define_expand <any_rotate>ti3): For
	rotations by 64 bits use new rot[lr]64ti2_doubleword pattern.
	(rot[lr]64ti2_doubleword): New post-reload splitter.
2022-07-31 21:51:44 +01:00
Roger Sayle
493f4e6cf0 PR target/106450: Tweak timode_remove_non_convertible_regs on x86_64.
This patch resolves PR target/106450, some more fall-out from more
aggressive TImode scalar-to-vector (STV) optimizations.  I continue
to be caught out by how far TImode STV has diverged from DImode/SImode
STV, and therefore requires additional (unexpected) tweaking.  Many
thanks to H.J. Lu for pointing out timode_remove_non_convertible_regs
needs to be extended to handle XOR (and other new operations).

Unhelpfully the comment above this function states that it's the TImode
version of "remove_non_convertible_regs", which doesn't exist anymore,
so I've resurrected an explanatory comment from the git history.
By refactoring the checks for hard regs and already "marked" regs
into timode_check_non_convertible_regs itself, all of its callers are
simplified.  This patch then FOR_EACH_INSN_USE and FOR_EACH_INSN_DEF
to generically handle arbitrary (non-move) instructions (including
unary and binary operations), calling timode_check_non_convertible_regs
on each TImode register USE and DEF.

2022-07-31  Roger Sayle  <roger@nextmovesoftware.com>
	    H.J. Lu  <hjl.tools@gmail.com>

gcc/ChangeLog
	PR target/106450
	* config/i386/i386-features.cc (timode_check_non_convertible_regs):
	Do nothing if REGNO is set in the REGS bitmap, or is a hard reg.
	(timode_remove_non_convertible_regs): Update comment.
	Call timode_check_non_convertible_reg on all TImode register
	DEFs and USEs in each instruction.

gcc/testsuite/ChangeLog
	PR target/106450
	* gcc.target/i386/pr106450.c: New test case.
2022-07-31 21:44:51 +01:00
Harald Anlauf
d325e7048c Fortran: detect blanks within literal constants in free-form mode [PR92805]
gcc/fortran/ChangeLog:

	PR fortran/92805
	* match.cc (gfc_match_small_literal_int): Make gobbling of leading
	whitespace optional.
	(gfc_match_name): Likewise.
	(gfc_match_char): Likewise.
	* match.h (gfc_match_small_literal_int): Adjust prototype.
	(gfc_match_name): Likewise.
	(gfc_match_char): Likewise.
	* primary.cc (match_kind_param): Match small literal int or name
	without gobbling whitespace.
	(get_kind): Do not skip over blanks.
	(match_string_constant): Likewise.

gcc/testsuite/ChangeLog:

	PR fortran/92805
	* gfortran.dg/literal_constants.f: New test.
	* gfortran.dg/literal_constants.f90: New test.

Co-authored-by: Steven G. Kargl <kargl@gcc.gnu.org>
2022-07-31 20:43:17 +02:00
Harald Anlauf
0110cfd544 Fortran: fix invalid rank error in ASSOCIATED when rank is remapped [PR77652]
gcc/fortran/ChangeLog:

	PR fortran/77652
	* check.cc (gfc_check_associated): Make the rank check of POINTER
	vs. TARGET match the allowed forms of pointer assignment for the
	selected Fortran standard.

gcc/testsuite/ChangeLog:

	PR fortran/77652
	* gfortran.dg/associated_target_9a.f90: New test.
	* gfortran.dg/associated_target_9b.f90: New test.
2022-07-31 20:28:38 +02:00
Lewis Hyatt
b04c399e25 c++: Fix location for -Wunused-macros [PR66290]
In C++, since all tokens are lexed from libcpp up front, diagnostics generated
by libcpp after lexing has completed do not get a valid location from libcpp
(rather, libcpp thinks they all pertain to the end of the file.) This has long
been addressed using the global variable "done_lexing", which the C++ frontend
sets at the appropriate time; when done_lexing is true, then c_cpp_diagnostic(),
which outputs libcpp's diagnostics, uses input_location instead of the wrong
libcpp location. The C++ frontend arranges that input_location will point to the
token it is currently processing, so this generally works fine. However, there
is one exception currently, which is -Wunused-macros. This gets generated at the
end of processing in cpp_finish (), since we need to wait until then to
determine whether a macro was eventually used or not. But the locations it
passes to c_cpp_diagnostic () were remembered from the original lexing and hence
they should not be overridden with input_location, which is now the one
incorrectly pointing to the end of the file.

Fixed by setting done_lexing=false again just prior to calling cpp_finish (). I
also renamed the variable from done_lexing to "override_libcpp_locations", since
it's now not strictly about lexing anymore.

There is no new testcase with this patch, since we already had an xfailed
testcase which is now fixed.

gcc/c-family/ChangeLog:

	PR c++/66290
	* c-common.h: Rename global done_lexing to
	override_libcpp_locations.
	* c-common.cc (c_cpp_diagnostic): Likewise.
	* c-opts.cc (c_common_finish): Set override_libcpp_locations
	(formerly done_lexing) immediately prior to calling cpp_finish ().

gcc/cp/ChangeLog:

	PR c++/66290
	* parser.cc (cp_lexer_new_main): Rename global done_lexing to
	override_libcpp_locations.

gcc/testsuite/ChangeLog:

	PR c++/66290
	* c-c++-common/pragma-diag-15.c: Remove xfail for C++.
2022-07-31 07:48:47 -04:00
Roger Sayle
351e3cad2c PR bootstrap/106472: Add libgo depends on libbacktrace to Makefile.def
This patch fixes PR bootstrap/106472 by adding a missing dependency
to Makefile.def to allow make bootstrap when configured using
"--enable-languages=go" (and not using make with multiple threads).

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

ChangeLog
	PR bootstrap/106472
	* Makefile.def (dependencies): Make configure-target-libgo depend
	upon all-target-libbacktrace.
2022-07-31 08:13:30 +01:00
Jason Merrill
9efe4e153d c++: constexpr, empty base after non-empty [PR106369]
Here the CONSTRUCTOR we were providing for D{} had an entry for the B base
subobject at offset 0 following the entry for the C base, causing
output_constructor_regular_field to ICE due to going backwards.  It might be
nice for that function to be more tolerant of empty fields, but it also
seems reasonable for the front end to prune the useless entry.

	PR c++/106369

gcc/cp/ChangeLog:

	* constexpr.cc (reduced_constant_expression_p): Return false
	if a CONSTRUCTOR initializes an empty field.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/constexpr-lambda27.C: New test.
2022-07-30 19:56:36 -07:00
GCC Administrator
9ef2c9aa5b Daily bump. 2022-07-31 00:16:37 +00:00
Ian Lance Taylor
a63b99f24d libgo: use SYS_timer_settime32
Musl defines SYS_timer_settime32, not SYS_timer_settime, on 32-bit systems.

Based on patch by Sören Tempel.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/420222
2022-07-30 10:35:23 -07:00
Takayuki 'January June' Suwa
2fa8c4a659 xtensa: Fix conflicting hard regno between indirect sibcall fixups and EH_RETURN_STACKADJ_RTX
The hard register A10 was already allocated for EH_RETURN_STACKADJ_RTX.
(although exception handling and sibling call may not apply at the same time,
 but for safety)

gcc/ChangeLog:

	* config/xtensa/xtensa.md: Change hard register number used in
	the split patterns for indirect sibling call fixups from 10 to 11,
	the last free one for the CALL0 ABI.
2022-07-29 21:14:18 -07:00
Takayuki 'January June' Suwa
48e9954d08 xtensa: Add RTX costs for if_then_else
It takes one machine instruction for both condtional branch and move.

gcc/ChangeLog:

	* config/xtensa/xtensa.cc (xtensa_rtx_costs):
	Add new case for IF_THEN_ELSE.
2022-07-29 21:14:18 -07:00
GCC Administrator
b2bf04739f Daily bump. 2022-07-30 00:16:30 +00:00
Andrew Stubbs
6e0ca3fe88 amdgcn: 64-bit vector shifts
Enable 64-bit vector-vector and vector-scalar shifts.

gcc/ChangeLog:

	* config/gcn/gcn-valu.md (V_INT_noHI): New iterator.
	(<expander><mode>3<exec>): Use V_INT_noHI.
	(v<expander><mode>3<exec>): Likewise.
2022-07-29 13:01:34 +01:00
Andrew Stubbs
8f4d9c1ded amdgcn: 64-bit not
This makes the auto-vectorizer happier when handling masks.

gcc/ChangeLog:

	* config/gcn/gcn.md (one_cmpldi2): New.
2022-07-29 12:56:48 +01:00
Tobias Burnus
85fe7e7dd1 Add libgomp.c-c++-common/pr106449-2.c
This run-time test test pointer-based iteration with collapse,
similar to the '(parallel) simd' test for PR106449 but for 'for'.

libgomp/ChangeLog:

	* testsuite/libgomp.c-c++-common/pr106449-2.c: New test.
2022-07-29 12:41:08 +02:00
Tobias Burnus
a6afbe5e95 OpenMP/Fortran: Permit assumed-size arrays in uniform clause
gcc/fortran/ChangeLog:

	* openmp.cc (resolve_omp_clauses): Permit assumed-size arrays
	in uniform clause.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/declare-simd-3.f90: New test.
2022-07-29 12:36:07 +02:00
Richard Biener
49ba4fdeb6 tree-optimization/105679 - disable backward threading of unlikely entry
The following makes the backward threader reject threads whose entry
edge is probably never executed according to the profile.  That in
particular, for the testcase, avoids threading the irq == 1 check
on the path where irq > 31, thereby avoiding spurious -Warray-bounds
diagnostics

  if (irq_1(D) > 31)
    goto <bb 3>; [0.00%]
  else
    goto <bb 4>; [100.00%]

;;   basic block 3, loop depth 0, count 0 (precise), probably never executed
  _2 = (unsigned long) irq_1(D);
  __builtin___ubsan_handle_shift_out_of_bounds (&*.Lubsan_data0, 1, _2);

  _3 = 1 << irq_1(D);
  mask_4 = (u32) _3;
  entry = instance_5(D)->array[irq_1(D)];
  capture (mask_4);
  if (level_6(D) != 0)
    goto <bb 7>; [34.00%]
  else
    goto <bb 5>; [66.00%]

;;   basic block 5, loop depth 0, count 708669600 (estimated locally), maybe hot  if (irq_1(D) == 1)
    goto <bb 7>; [20.97%]
  else
    goto <bb 6>; [79.03%]

	PR tree-optimization/105679
	* tree-ssa-threadbackward.cc
	(back_threader_profitability::profitable_path_p): Avoid threading
	when the entry edge is probably never executed.
2022-07-29 12:05:35 +02:00
Jonathan Wakely
b5f5d1b36e libstdc++: Tweak common_iterator::operator-> return type [PR104443]
This adjusts the return type to match the resolution of LWG 3672. There
is no functional difference, because decltype(auto) always deduced a
value anyway, but this makes it simpler and consistent with the working
draft.

libstdc++-v3/ChangeLog:

	PR libstdc++/104443
	* include/bits/stl_iterator.h (common_iterator::operator->):
	Change return type to just auto.
2022-07-29 10:10:00 +01:00
Richard Biener
4894ba0786 tree-optimization/106422 - verify block copying in forward threading
The forward threader failed to check whether it can actually duplicate
blocks.  The following adds this in a similar place the backwards threader
performs this check.

	PR tree-optimization/106422
	* tree-ssa-threadupdate.cc (fwd_jt_path_registry::update_cfg):
	Check whether we can copy thread blocks and cancel the thread if not.

	* gcc.dg/torture/pr106422.c: New testcase.
2022-07-29 10:47:47 +02:00
Jakub Jelinek
2dcceedb3c openmp: Reject invalid forms of C++ #pragma omp atomic compare [PR106448]
The allowed syntaxes of atomic compare don't allow ()s around the condition
of ?:, but we were accepting it in one case for C++.

Fixed thusly.

2022-07-29  Jakub Jelinek  <jakub@redhat.com>

	PR c++/106448
	* parser.cc (cp_parser_omp_atomic): For simple cast followed by
	CPP_QUERY token, don't try cp_parser_binary_operation if compare
	is true.

	* c-c++-common/gomp/atomic-32.c: New test.
2022-07-29 09:59:19 +02:00
Jakub Jelinek
97d32048c0 openmp: Fix up handling of non-rectangular simd loops with pointer type iterators [PR106449]
There were 2 issues visible on this new testcase, one that we didn't have
special POINTER_TYPE_P handling in a few spots of expand_omp_simd - for
pointers we need to use POINTER_PLUS_EXPR and need to have the non-pointer
part in sizetype, for non-rectangular loop on the other side we can rely on
multiplication factor 1, pointers can't be multiplied, without those changes
we'd ICE.  The other issue was that we put n2 expression directly into a
comparison in a condition and regimplified that, for the &a[512] case that
and with gimplification being destructed that unfortunately meant modification
of original fd->loops[?].n2.  Fixed by unsharing the expression.  This was
causing a runtime failure on the testcase.

2022-07-29  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/106449
	* omp-expand.cc (expand_omp_simd): Fix up handling of pointer
	iterators in non-rectangular simd loops.  Unshare fd->loops[i].n2
	or n2 before regimplifying it inside of a condition.

	* testsuite/libgomp.c-c++-common/pr106449.c: New test.
2022-07-29 09:49:11 +02:00
Jakub Jelinek
4796d16de6 openmp: Simplify fold_build_pointer_plus callers in omp-expand
Tobias mentioned in PR106449 that fold_build_pointer_plus already
fold_converts the second argument to sizetype if it doesn't already
have an integral type gimple compatible with sizetype.

So, this patch simplifies the callers of fold_build_pointer_plus in
omp-expand so that they don't do those conversions manually.

2022-07-29  Jakub Jelinek  <jakub@redhat.com>

	* omp-expand.cc (expand_omp_for_init_counts, expand_omp_for_init_vars,
	extract_omp_for_update_vars, expand_omp_for_ordered_loops,
	expand_omp_simd): Don't fold_convert second argument to
	fold_build_pointer_plus to sizetype.
2022-07-29 09:43:34 +02:00
Lulu Cheng
201e8d9f82 LoongArch: Define the macro ASM_PREFERRED_EH_DATA_FORMAT by checking the assembler's support for eh_frame encoding.
.eh_frame DW_EH_PE_pcrel encoding format is not supported by gas <= 2.39.
Check if the assembler support DW_EH_PE_PCREL encoding and define .eh_frame
encoding type.

gcc/ChangeLog:

	* config.in: Regenerate.
	* config/loongarch/loongarch.h (ASM_PREFERRED_EH_DATA_FORMAT):
	Select the value of the macro definition according to whether
	HAVE_AS_EH_FRAME_PCREL_ENCODING_SUPPORT is defined.
	* configure: Regenerate.
	* configure.ac: Reinstate HAVE_AS_EH_FRAME_PCREL_ENCODING_SUPPORT test.
2022-07-29 14:58:39 +08:00
Richard Biener
0c0feae60a Use CONVERT_EXPR_CODE_P
* gimple-ssa-warn-restrict.cc (builtin_memref::set_base_and_offset):
	Use CONVERT_EXPR_CODE_P.
2022-07-29 08:29:26 +02:00
Richard Biener
b234f5240c Avoid vect_get_vector_types_for_stmt
This replaces vect_get_vector_types_for_stmt with get_vectype_for_scalar_type
in vect_recog_bool_pattern.

	* tree-vect-patterns.cc (vect_recog_bool_pattern): Use
	get_vectype_for_scalar_type instead of
	vect_get_vector_types_for_stmt.
2022-07-29 08:29:25 +02:00
GCC Administrator
af086d1911 Daily bump. 2022-07-29 00:16:21 +00:00
David Malcolm
872693eebb analyzer: new warning: -Wanalyzer-putenv-of-auto-var [PR105893]
This patch implements a new -fanalyzer warning:
  -Wanalyzer-putenv-of-auto-var
which complains about stack pointers passed to putenv(3) calls, as
per SEI CERT C Coding Standard rule POS34-C ("Do not call putenv() with
a pointer to an automatic variable as the argument").

For example, given:

#include <stdio.h>
#include <stdlib.h>

void test_arr (void)
{
  char arr[] = "NAME=VALUE";
  putenv (arr);
}

it emits:

demo.c: In function ‘test_arr’:
demo.c:7:3: warning: ‘putenv’ on a pointer to automatic variable ‘arr’ [POS34-C] [-Wanalyzer-putenv-of-auto-var]
    7 |   putenv (arr);
      |   ^~~~~~~~~~~~
  ‘test_arr’: event 1
    |
    |    7 |   putenv (arr);
    |      |   ^~~~~~~~~~~~
    |      |   |
    |      |   (1) ‘putenv’ on a pointer to automatic variable ‘arr’
    |
demo.c:6:8: note: ‘arr’ declared on stack here
    6 |   char arr[] = "NAME=VALUE";
      |        ^~~
demo.c:7:3: note: perhaps use ‘setenv’ rather than ‘putenv’
    7 |   putenv (arr);
      |   ^~~~~~~~~~~~

gcc/analyzer/ChangeLog:
	PR analyzer/105893
	* analyzer.opt (Wanalyzer-putenv-of-auto-var): New.
	* region-model-impl-calls.cc (class putenv_of_auto_var): New.
	(region_model::impl_call_putenv): New.
	* region-model.cc (region_model::on_call_pre): Handle putenv.
	* region-model.h (region_model::impl_call_putenv): New decl.

gcc/ChangeLog:
	PR analyzer/105893
	* doc/invoke.texi: Add -Wanalyzer-putenv-of-auto-var.

gcc/testsuite/ChangeLog:
	PR analyzer/105893
	* gcc.dg/analyzer/putenv-1.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-28 17:21:29 -04:00
David Malcolm
9c60338061 analyzer: add CWE identifier URLs to docs
gcc/analyzer/ChangeLog:
	* sm-malloc.cc (free_of_non_heap::emit): Add comment about CWE.
	* sm-taint.cc (tainted_size::emit): Likewise.

gcc/ChangeLog:
	* doc/invoke.texi (-fdiagnostics-show-cwe): Use uref rather than
	url.
	(Static Analyzer Options): Likewise.  Add urefs for all of the
	warnings that have associated CWE identifiers.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-28 17:21:29 -04:00
David Malcolm
9cac6811cf analyzer: expand the comment in region.h
gcc/analyzer/ChangeLog:
	* region.h: Add notes to the comment describing the region
	class hierarchy.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-28 17:21:28 -04:00
David Malcolm
b8ce0c4361 jit: update docs to reflect .c to .cc renaming
gcc/jit/ChangeLog:
	* docs/internals/index.rst: Remove reference to ".c" extensions
	of source files.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-07-28 17:21:28 -04:00