]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
4 months agotarget/119010 - add reservations for integer vector compares to zen4/zen5
Richard Biener [Thu, 27 Mar 2025 11:40:15 +0000 (12:40 +0100)] 
target/119010 - add reservations for integer vector compares to zen4/zen5

The following handles TI, OI and XI mode in the respective EVEX
compare reservations that do not use memory (I've not yet run into
ones with).  The znver automata has separate reservations for
integer compares (but only for zen1, for zen2 and zen3 there are
no compare reservations at all), but I don't see why that should
be necessary here.

PR target/119010
* config/i386/zn4zn5.md (znver4_sse_cmp_avx128,
znver5_sse_cmp_avx128): Handle TImode.
(znver4_sse_cmp_avx256, znver5_sse_cmp_avx256): Handle OImode.
(znver4_sse_cmp_avx512, znver5_sse_cmp_avx512): Handle XImode.

4 months agotarget/119010 - missing reservations for Zen4/5 and SSE compares
Richard Biener [Thu, 27 Mar 2025 10:29:21 +0000 (11:29 +0100)] 
target/119010 - missing reservations for Zen4/5 and SSE compares

There's the znver4_sse_test reservation which matches the memory-less
SSE compares but currently requires prefix_extra == 1.  The old
znver automata in this case sometimes uses znver1-double instead of
znver1-direct, but it's quite a maze.  The following simply drops
the prefix_extra requirement, but I have no idea what I'm doing here.
There doesn't seem to be any documentation on the scheduler relevant
attributes used, or at least I cannot find that.

PR target/119010
* config/i386/zn4zn5.md (znver4_sse_test): Drop test of
prefix_extra attribute.

4 months agotarget/119010 - fixup zn4zn5 reservation for move from const_vector
Richard Biener [Thu, 27 Mar 2025 08:04:38 +0000 (09:04 +0100)] 
target/119010 - fixup zn4zn5 reservation for move from const_vector

movv8si_internal uses sselog1 and V4SFmode for an instruction like

(insn 363 2437 371 97 (set (reg:V8SI 46 xmm10 [1125])
        (const_vector:V8SI [
                (const_int 0 [0]) repeated x8
            ])) "ComputeNonbondedUtil.C":185:21 2402 {movv8si_internal}

this wasn't catched by the existing znver4_sse_log1 reservation,
I think the znver automaton catches this with the generic

(define_insn_reservation "znver1_sse_log1" 1
             (and (eq_attr "cpu" "znver1,znver2,znver3")
                  (and (eq_attr "type" "sselog1")
                   (eq_attr "memory" "none")))
             "znver1-direct,znver1-fp1|znver1-fp2")

which does not look at the mode at all.  The zn4zn5 automaton lacks
this and instead has separated store and load-store reservations
in odd ways.  The following renames the store one and introduces
a none variant.

PR target/119010
* config/i386/zn4zn5.md (znver4_sse_log1): Rename to
znver4_sse_log1_store.
(znver5_sse_log1): Rename to znver5_sse_log1_store.
(znver4_sse_log1): New memory-less variant.

4 months agoc++: Honor noipa attribute for FE nothrow discovery [PR119518]
Jakub Jelinek [Mon, 31 Mar 2025 05:51:04 +0000 (07:51 +0200)] 
c++: Honor noipa attribute for FE nothrow discovery [PR119518]

The following testcase has different code generation in bar depending on
whether foo is defined or just declared.
That is undesirable when it has noipa attribute, that attribute is
documented to be a black box between caller and callee, so the caller
shouldn't know about any implicitly determined properties of the callee
and callee shouldn't know about its callers.

E.g. the ipa-pure-const passes including nothrow discovery in there all
honor noipa attribute, but the FE did not.

2025-03-31  Jakub Jelinek  <jakub@redhat.com>

PR c++/119518
* decl.cc (finish_function): Don't set TREE_NOTHROW for
functions with "noipa" attribute even when we can prove
they can't throw.

* g++.dg/opt/pr119518.C: New test.

4 months agolibstdc++: Fix up string _M_constructor<bool> exports [PR103827]
Jakub Jelinek [Mon, 31 Mar 2025 05:39:53 +0000 (07:39 +0200)] 
libstdc++: Fix up string _M_constructor<bool> exports [PR103827]

On Thu, Mar 27, 2025 at 02:04:24PM +0100, Jan Hubicka wrote:
> Seems I missed the approval, sorry.  I will push it - I think it would
> be useful to have it in.

Unfortunately the exports in this patch only work on targets where size_t is
unsigned long, not e.g. on ia32 where it is unsigned int, or targets where
it is unsigned long long.

2025-03-31  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/103827
PR tree-optimization/80331
PR tree-optimization/87502
* config/abi/pre/gnu.ver (GLIBCXX_3.4.34): Use [jmy] rather than m
in pattern for _M_construct<bool>(char const*, size_t).

4 months agoDaily bump.
GCC Administrator [Mon, 31 Mar 2025 00:17:59 +0000 (00:17 +0000)] 
Daily bump.

4 months agoDocs: make regenerate-opt-urls
Sandra Loosemore [Sun, 30 Mar 2025 22:05:51 +0000 (22:05 +0000)] 
Docs: make regenerate-opt-urls

gcc/c-family/ChangeLog
* c.opt.urls: Regenerate.

gcc/d/ChangeLog
* lang.opt.urls: Regenerate.

gcc/m2/ChangeLog
* lang.opt.urls: Regenerate.

4 months agoOptimize string constructor
Jan Hubicka [Sun, 30 Mar 2025 21:49:49 +0000 (23:49 +0200)] 
Optimize string constructor

this patch improves code generation on string constructors.  We currently have
_M_construct which takes as a parameter two iterators (begin/end pointers to
other string) and produces new string.  This patch adds special case of
constructor where instead of begining/end pointers we readily know the string
size and also special case when we know that source is 0 terminated.  This
happens commonly when producing stirng copies. Moreover currently ipa-prop is
not able to propagate information that beg-end is known constant (copied string
size) which makes it impossible for inliner to spot the common case where
string size is known to be shorter than 15 bytes and fits in local buffer.

Finally I made new constructor inline. Because it is explicitely instantiated
without C++20 constexpr we do not produce implicit instantiation (as required
by standard) which prevents inlining, ipa-modref and any other IPA analysis to
happen.  I think we need to make many of the other functions inline, since
optimization accross string manipulation is quite important. There is PR94960
to track this issue.

Bootstrapped/regtested x86_64-linux, OK?

libstdc++-v3/ChangeLog:

PR tree-optimization/103827
PR tree-optimization/80331
PR tree-optimization/87502

* config/abi/pre/gnu.ver: Add version for _M_construct<bool>
* include/bits/basic_string.h: (basic_string::_M_construct<bool>): Declare.
(basic_string constructors): Use it.
* include/bits/basic_string.tcc: (basic_string::_M_construct<bool>): New template.
* src/c++11/string-inst.cc: Instantated S::_M_construct<bool>.

gcc/testsuite/ChangeLog:

* g++.dg/tree-ssa/pr80331.C: New test.
* g++.dg/tree-ssa/pr87502.C: New test.

4 months agoDoc: Clean up New/Delete Builtins manual section
Sandra Loosemore [Wed, 26 Mar 2025 18:25:51 +0000 (18:25 +0000)] 
Doc: Clean up New/Delete Builtins manual section

I noticed that the "New/Delete Builtins" section failed to explicitly
name or describe the arguments of the builtin functions it purported
to document, outside of using them in an example.  I've fixed that
and cleaned up the whole section.

gcc/ChangeLog
* doc/extend.texi (New/Delete Builtins): Cleanup up the text and
explicitly list the builtins being documented.

4 months agoDoc: Move Integer Overflow Builtins section [PR42270]
Sandra Loosemore [Wed, 26 Mar 2025 16:43:18 +0000 (16:43 +0000)] 
Doc: Move Integer Overflow Builtins section [PR42270]

This is part of an incremental effort to make the chapter on GCC
extensions better organized by grouping/rearranging sections by topic.

gcc/ChangeLog
PR other/42270
* doc/extend.texi (Numeric Builtins): Move Integer Overflow Builtins
section here, as a subsection.

4 months agoDoc: Organize atomic memory builtins documentation [PR42270]
Sandra Loosemore [Wed, 26 Mar 2025 14:56:02 +0000 (14:56 +0000)] 
Doc: Organize atomic memory builtins documentation [PR42270]

This is part of an incremental effort to make the chapter on GCC
extensions better organized by grouping/rearranging sections by topic.

This installment adds a container section to hold documentation for
both the _atomic and _sync builtins, reordering them so that the new
_atomic interface is presented before the legacy _sync one.  I also
incorporated material from the separate x86 transactional memory
section directly into the __atomic builtins documentation instead of
retaining that as a parallel section.

gcc/ChangeLog
PR other/42270
* doc/extend.texi (Atomic Memory Access): New section.
(__sync Builtins): Make it a subsection of the above.
(Atomic Memory Access): Likewise.
(x86 specific memory model extensions for transactional memory):
Delete this section, incorporating the text into the discussion
of __atomic builtins.

4 months agoDoc: Break up and rearrange the "other builtins" section [PR42270]
Sandra Loosemore [Wed, 26 Mar 2025 04:16:24 +0000 (04:16 +0000)] 
Doc: Break up and rearrange the "other builtins" section [PR42270]

This is part of an incremental effort to make the chapter on GCC
extensions better organized by grouping/rearranging sections by topic.

The "Other Builtins" section had become a catch-all for all sorts of
things with very little organization or attempt to differentiate between
important information (e.g., GCC treats a gazillion library functions as
builtins by default) from obscure builtins provided primarily as internal
interfaces.  I've split it up into various pieces and attempted to move
the more important or useful-to-users documentation earlier in the chapter.
What's left of the section is still a jumbled mess...  but at least it's a
smaller jumbled mess.

gcc/ChangeLog
PR other/42270
* doc/extend.texi (Built-in Functions): Incorporate some text
formerly in "Other Builtins" into the introduction.  Adjust
menu for new sections.
(Library Builtins): New section, split from "Other Builtins".
(Numeric Builtins): Likewise.
(Stack Allocation): Likewise.
(Constructing Calls): Move __builtin_call_with_static_chain here.
(Object Size Checking): Minor copy-editing.
(Other Builtins): Move text to new sections listed above.  Delete
duplicate docs for object-size checking builtins.
* doc/invoke.texi (C dialect options): Update @xref for -fno-builtin.

4 months agoDoc: Move builtin documentation to a new chapter [PR42270]
Sandra Loosemore [Tue, 25 Mar 2025 05:25:34 +0000 (05:25 +0000)] 
Doc: Move builtin documentation to a new chapter [PR42270]

This is part of an incremental effort to make the documentation for
GCC extensions better organized by grouping/rearranging sections by
topic.

I was originally intending to consolidate all the sections documenting
builtins as subsections of a new container section within the C
extensions chapter, but I ran into a technical limitation of Texinfo:
it only supports sectioning depth up to @subsubsection, and we already
had quite a few of those in the target-specific builtins sections.  So
instead I have pulled all the existing sections out into a new
chapter.  This actually makes sense since some of the builtins are
specific to C++ anyway and are not C language extensions at all.

Subsequent patches in this series will move things around within the
new chapter; this one just adds the new container node and adjusts
the menus.

gcc/ChangeLog
PR other/42270
* doc/extend.texi (C Extensions): Move menu items for
builtin-related sections to...
(Built-in Functions): New chapter.
* doc/gcc.texi (Introduction): Add menu entry for new chapter.

4 months agoDoc: Add a container section to consolidate attribute documentation [PR42270]
Sandra Loosemore [Tue, 25 Mar 2025 02:56:48 +0000 (02:56 +0000)] 
Doc: Add a container section to consolidate attribute documentation [PR42270]

    This is part of an incremental effort to make the chapter on GCC
    extensions better organized by grouping/rearranging sections by topic.
    Note that this patch does not address the restructuring/rewrite
    suggested by PR88472 or PR102397, beyond adding a very short
    introduction to the new container section that is more explicit about
    both syntaxes being accepted as a GNU extension.

gcc/ChangeLog
PR other/42270
* doc/extend.texi (Attributes): New section.
(Function Attributes): Make it a subsection of the new section.
(Variable Attributes): Likewise.
(Type Attributes): Likewise.
(Label Attributes): Likewise.
(Enumerator Attributes): Likewise.
(Attribute Syntax): Likewise.

4 months agoDoc: Remove separate "Target Format Checks" section [PR42270]
Sandra Loosemore [Tue, 25 Mar 2025 05:22:38 +0000 (05:22 +0000)] 
Doc: Remove separate "Target Format Checks" section [PR42270]

This is part of an incremental effort to make the chapter on GCC
extensions better organized by grouping/rearranging sections by topic.

Following the last round of patches, there's a leftover section
"Target Format Checks" that didn't fit into any category.  It seems best
to merge this material into the main discussion of the "format" attribute,
in particular because that discussion already contains similar discussion
for mingw/Windows targets.

gcc/ChangeLog
PR other/42270
* doc/extend.texi (Function Attributes): Merge text from "Target
Format Checks" into the main discussion of the format and
format_arg attributes.
(Target Format Checks): Delete section.

4 months agotestsuite: Fix up atomic-inst-ldlogic.c
Jakub Jelinek [Sun, 30 Mar 2025 18:11:05 +0000 (20:11 +0200)] 
testsuite: Fix up atomic-inst-ldlogic.c

r15-8956 changed in the test:
-/* { dg-final { scan-assembler-times "ldclr\t" 16} */
+/* { dg-final { scan-assembler-times "ldclr\t" 16 } */
which made it even worse than before, when the directive has
been silently ignored because it didn't match the regex for
directives.  Now it matches it but is unbalanced.

The following patch fixes it and adds space after all the
other scan-assembler-times counts in the file.

2025-03-30  Jakub Jelinek  <jakub@redhat.com>

* gcc.target/aarch64/atomic-inst-ldlogic.c: Fix another
unbalanced {} directive problem.  Add space after all
scan-assembler-times counts.

4 months agoaarch64: Changed CRC test.
Mariam Arutunian [Sun, 30 Mar 2025 15:33:39 +0000 (09:33 -0600)] 
aarch64: Changed CRC test.

Fixed the iteration number in crc-crc32c-data16.c test from 8 to 16 to match the test name.

gcc/testsuite
* gcc.target/aarch64/crc-crc32c-data16.c: Fix iteration
count to match testname.

4 months agoAlpha: Add option to avoid data races for partial writes [PR117759]
Maciej W. Rozycki [Sun, 30 Mar 2025 14:24:51 +0000 (15:24 +0100)] 
Alpha: Add option to avoid data races for partial writes [PR117759]

Similarly to data races with 8-bit byte or 16-bit word quantity memory
writes on non-BWX Alpha implementations we have the same problem even on
BWX implementations with partial memory writes produced for unaligned
stores as well as block memory move and clear operations.  This happens
at the boundaries of the area written where we produce unprotected RMW
sequences, such as for example:

ldbu $1,0($3)
stw $31,8($3)
stq $1,0($3)

to zero a 9-byte member at the byte offset of 1 of a quadword-aligned
struct, happily clobbering a 1-byte member at the beginning of said
struct if concurrent write happens while executing on the same CPU such
as in a signal handler or a parallel write happens while executing on
another CPU such as in another thread or via a shared memory segment.

To guard against these data races with partial memory write accesses
introduce the `-msafe-partial' command-line option that instructs the
compiler to protect boundaries of the data quantity accessed by instead
using a longer code sequence composed of narrower memory writes where
suitable machine instructions are available (i.e. with BWX targets) or
atomic RMW access sequences where byte and word memory access machine
instructions are not available (i.e. with non-BWX targets).

Owing to the desire of branch avoidance there are redundant overlapping
writes in unaligned cases where STQ_U operations are used in the middle
of a block so as to make sure no part of data to be written has been
lost regardless of run-time alignment.  For the non-BWX case it means
that with blocks whose size is not a multiple of 8 there are additional
atomic RMW sequences issued towards the end of the block in addition to
the always required pair enclosing the block from each end.

Only one such additional atomic RMW sequence is actually required, but
code currently issues two for the sake of simplicity.  An improvement
might be added to `alpha_expand_unaligned_store_words_safe_partial' in
the future, by folding `alpha_expand_unaligned_store_safe_partial' code
for handling multi-word blocks whose size is not a multiple of 8 (i.e.
with a trailing partial-word part).  It would improve performance a bit,
but current code is correct regardless.

Update test cases with `-mno-safe-partial' where required and add new
ones accordingly.

In some cases GCC chooses to open-code block memory write operations, so
with non-BWX targets `-msafe-partial' will in the usual case have to be
used together with `-msafe-bwa'.

Credit to Magnus Lindholm <linmag7@gmail.com> for sharing hardware for
the purpose of verifying the BWX side of this change.

gcc/
PR target/117759
* config/alpha/alpha-protos.h
(alpha_expand_unaligned_store_safe_partial): New prototype.
* config/alpha/alpha.cc (alpha_expand_movmisalign)
(alpha_expand_block_move, alpha_expand_block_clear): Handle
TARGET_SAFE_PARTIAL.
(alpha_expand_unaligned_store_safe_partial)
(alpha_expand_unaligned_store_words_safe_partial)
(alpha_expand_clear_safe_partial_nobwx): New functions.
* config/alpha/alpha.md (insvmisaligndi): Handle
TARGET_SAFE_PARTIAL.
* config/alpha/alpha.opt (msafe-partial): New option.
* config/alpha/alpha.opt.urls: Regenerate.
* doc/invoke.texi (Option Summary, DEC Alpha Options): Document
the new option.

gcc/testsuite/
PR target/117759
* gcc.target/alpha/memclr-a2-o1-c9-ptr.c: Add
`-mno-safe-partial'.
* gcc.target/alpha/memclr-a2-o1-c9-ptr-safe-partial.c: New file.
* gcc.target/alpha/memcpy-di-unaligned-dst.c: New file.
* gcc.target/alpha/memcpy-di-unaligned-dst-safe-partial.c: New
file.
* gcc.target/alpha/memcpy-di-unaligned-dst-safe-partial-bwx.c:
New file.
* gcc.target/alpha/memcpy-si-unaligned-dst.c: New file.
* gcc.target/alpha/memcpy-si-unaligned-dst-safe-partial.c: New
file.
* gcc.target/alpha/memcpy-si-unaligned-dst-safe-partial-bwx.c:
New file.
* gcc.target/alpha/stlx0.c: Add `-mno-safe-partial'.
* gcc.target/alpha/stlx0-safe-partial.c: New file.
* gcc.target/alpha/stlx0-safe-partial-bwx.c: New file.
* gcc.target/alpha/stqx0.c: Add `-mno-safe-partial'.
* gcc.target/alpha/stqx0-safe-partial.c: New file.
* gcc.target/alpha/stqx0-safe-partial-bwx.c: New file.
* gcc.target/alpha/stwx0.c: Add `-mno-safe-partial'.
* gcc.target/alpha/stwx0-bwx.c: Add `-mno-safe-partial'.  Refer
to stwx0.c rather than copying its code and also verify no LDQ_U
or STQ_U instructions have been produced.
* gcc.target/alpha/stwx0-safe-partial.c: New file.
* gcc.target/alpha/stwx0-safe-partial-bwx.c: New file.

4 months agoAlpha: Add option to avoid data races for sub-longword memory stores [PR117759]
Maciej W. Rozycki [Sun, 30 Mar 2025 14:24:50 +0000 (15:24 +0100)] 
Alpha: Add option to avoid data races for sub-longword memory stores [PR117759]

With non-BWX Alpha implementations we have a problem of data races where
a 8-bit byte or 16-bit word quantity is to be written to memory in that
in those cases we use an unprotected RMW access of a 32-bit longword or
64-bit quadword width.  If contents of the longword or quadword accessed
outside the byte or word to be written are changed midway through by a
concurrent write executing on the same CPU such as by a signal handler
or a parallel write executing on another CPU such as by another thread
or via a shared memory segment, then the concluding write of the RMW
access will clobber them.  This is especially important for the safety
of RCU algorithms, but is otherwise an issue anyway.

To guard against these data races with byte and aligned word quantities
introduce the `-msafe-bwa' command-line option (standing for Safe Byte &
Word Access) that instructs the compiler to instead use an atomic RMW
access sequence where byte and word memory access machine instructions
are not available.  There is no change to code produced for BWX targets.

It would be sufficient for the secondary reload handle to use a pair of
scratch registers, as requested by `reload_out<mode>', but it would end
with poor code produced as one of the scratches would be occupied by
data retrieved and the other one would have to be reloaded with repeated
calculations, all within the LL/SC sequence.

Therefore I chose to add a dedicated `reload_out<mode>_safe_bwa' handler
and ask for more scratches there by defining a 256-bit OI integer mode.
While reload is documented in our manual to support an arbitrary number
of scratches in reality it hasn't been implemented for IRA:

/* ??? It would be useful to be able to handle only two, or more than
   three, operands, but for now we can only handle the case of having
   exactly three: output, input and one temp/scratch.  */

and it seems to be the case for LRA as well.  Do what everyone else does
then and just have one wide multi-register scratch.

I note that the atomic sequences emitted are suboptimal performance-wise
as the looping branch for the unsuccessful completion of the sequence
points backwards, which means it will be predicted as taken despite that
in most cases it will fall through.  I do not see it as a deficiency of
this change proposed as it takes care of recording that the branch is
unlikely to be taken, by calling `alpha_emit_unlikely_jump'.  Therefore
generic code elsewhere should instead be investigated and adjusted
accordingly for the arrangement to actually take effect.

Add test cases accordingly.

There are notable regressions between a plain `-mno-bwx' configuration
and a `-mno-bwx -msafe-bwa' one:

FAIL: gcc.dg/torture/inline-mem-cpy-cmp-1.c   -O0  execution test
FAIL: gcc.dg/torture/inline-mem-cpy-cmp-1.c   -O1  execution test
FAIL: gcc.dg/torture/inline-mem-cpy-cmp-1.c   -O2  execution test
FAIL: gcc.dg/torture/inline-mem-cpy-cmp-1.c   -O3 -g  execution test
FAIL: gcc.dg/torture/inline-mem-cpy-cmp-1.c   -Os  execution test
FAIL: gcc.dg/torture/inline-mem-cpy-cmp-1.c   -O2 -flto -fno-use-linker-plugin -flto-partition=none  execution test
FAIL: gcc.dg/torture/inline-mem-cpy-cmp-1.c   -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects  execution test
FAIL: g++.dg/init/array25.C  -std=c++17 execution test
FAIL: g++.dg/init/array25.C  -std=c++98 execution test
FAIL: g++.dg/init/array25.C  -std=c++26 execution test

They come from the fact that these test cases play tricks with alignment
and end up calling code that expects a reference to aligned data but is
handed one to unaligned data.

This doesn't cause a visible problem with plain `-mno-bwx' code, because
the resulting alignment exception is fixed up by Linux.  There's no such
handling currently implemented for LDL_L or LDQ_L instructions (which
are first in the sequence) and consequently the offender is issued with
SIGBUS instead.  Suitable handling will be added to Linux to complement
this change that will emulate the trapping instructions[1], so these
interim regressions are seen as harmless and expected.

References:

[1] "Alpha: Emulate unaligned LDx_L/STx_C for data consistency",
    <https://lore.kernel.org/r/alpine.DEB.2.21.2502181912230.65342@angie.orcam.me.uk/>

gcc/
PR target/117759
* config/alpha/alpha-modes.def (OI): New integer mode.
* config/alpha/alpha-protos.h (alpha_expand_mov_safe_bwa): New
prototype.
* config/alpha/alpha.cc (alpha_expand_mov_safe_bwa): New
function.
(alpha_secondary_reload): Handle TARGET_SAFE_BWA.
* config/alpha/alpha.md (aligned_store_safe_bwa)
(unaligned_store<mode>_safe_bwa, reload_out<mode>_safe_bwa)
(reload_out<mode>_unaligned_safe_bwa): New expanders.
(mov<mode>, movcqi, reload_out<mode>_aligned): Handle
TARGET_SAFE_BWA.
(reload_out<mode>): Guard against TARGET_SAFE_BWA.
* config/alpha/alpha.opt (msafe-bwa): New option.
* config/alpha/alpha.opt.urls: Regenerate.
* doc/invoke.texi (Option Summary, DEC Alpha Options): Document
the new option.

gcc/testsuite/
PR target/117759
* gcc.target/alpha/stb.c: New file.
* gcc.target/alpha/stb-bwa.c: New file.
* gcc.target/alpha/stb-bwx.c: New file.
* gcc.target/alpha/stba.c: New file.
* gcc.target/alpha/stba-bwa.c: New file.
* gcc.target/alpha/stba-bwx.c: New file.
* gcc.target/alpha/stw.c: New file.
* gcc.target/alpha/stw-bwa.c: New file.
* gcc.target/alpha/stw-bwx.c: New file.
* gcc.target/alpha/stwa.c: New file.
* gcc.target/alpha/stwa-bwa.c: New file.
* gcc.target/alpha/stwa-bwx.c: New file.

4 months agoIRA+LRA: Let the backend request to split basic blocks
Maciej W. Rozycki [Sun, 30 Mar 2025 14:24:50 +0000 (15:24 +0100)] 
IRA+LRA: Let the backend request to split basic blocks

The next change for Alpha will produce extra labels and branches in
reload, which in turn requires basic blocks to be split at completion.
We do this already for functions that can trap, so just extend the
arrangement with a flag for the backend to use whenever it finds it
necessary.

gcc/
* function.h (struct function): Add
`split_basic_blocks_after_reload' member.
* lra.cc (lra): Handle it.
* reload1.cc (reload): Likewise.

4 months agoAlpha: Export `emit_unlikely_jump' for a subsequent change to use
Maciej W. Rozycki [Sun, 30 Mar 2025 14:24:50 +0000 (15:24 +0100)] 
Alpha: Export `emit_unlikely_jump' for a subsequent change to use

Rename `emit_unlikely_jump' function to `alpha_emit_unlikely_jump', so
as to avoid namespace pollution, updating callers accordingly and export
it for use in the machine description.  Make it return the insn emitted.

gcc/
* config/alpha/alpha-protos.h (alpha_emit_unlikely_jump): New
prototype.
* config/alpha/alpha.cc (emit_unlikely_jump): Rename to...
(alpha_emit_unlikely_jump): ... this.  Return the insn emitted.
(alpha_split_atomic_op, alpha_split_compare_and_swap)
(alpha_split_compare_and_swap_12, alpha_split_atomic_exchange)
(alpha_split_atomic_exchange_12): Update call sites accordingly.

4 months agogcc/testsuite/g++.dg/gomp/append-args-8.C: Fix scan-dump-tree
Tobias Burnus [Sun, 30 Mar 2025 07:55:29 +0000 (09:55 +0200)] 
gcc/testsuite/g++.dg/gomp/append-args-8.C: Fix scan-dump-tree

gcc/testsuite/ChangeLog:

* g++.dg/gomp/append-args-8.C: Remove bogus '3' after \.\[0-9\]+
pattern.

4 months agogcc/mingw: Align `.refptr.` to 8-byte boundaries for 64-bit targets
LIU Hao [Sat, 29 Mar 2025 14:47:54 +0000 (22:47 +0800)] 
gcc/mingw: Align `.refptr.` to 8-byte boundaries for 64-bit targets

Windows only requires sections to be aligned on a 4-byte boundary. This used
to work because in binutils the `.rdata` section is over-aligned to a 16-byte
boundary, which will be fixed in the future.

This matches the output of Clang.

Signed-off-by: LIU Hao <lh_mouse@126.com>
Signed-off-by: Jonathan Yong <10walls@gmail.com>
gcc/ChangeLog:
* config/mingw/winnt.cc (mingw_pe_file_end): Add `.p2align`.

4 months agoDaily bump.
GCC Administrator [Sun, 30 Mar 2025 00:16:46 +0000 (00:16 +0000)] 
Daily bump.

4 months agotestsuite: arm: fixup more dg-final syntax
Sam James [Sat, 29 Mar 2025 21:09:25 +0000 (21:09 +0000)] 
testsuite: arm: fixup more dg-final syntax

... as Richard E mentioned on the ML. Followup to r15-8956-ge90d6c2639c392.

gcc/testsuite/ChangeLog:

* gcc.target/arm/short-vfp-1.c: Add whitespace around brace.

4 months agoc++/modules: unexported friend template
Jason Merrill [Sat, 29 Mar 2025 12:56:09 +0000 (08:56 -0400)] 
c++/modules: unexported friend template

Here we were failing to match the injected friend declaration to the
definition because the latter isn't exported.  But the friend is attached to
the module, so we need to look for any reachable declaration in that module,
not just the exports.

The duplicate_decls change is to avoid clobbering DECL_MODULE_IMPORT_P on
the imported definition; matching an injected friend doesn't change that
it's imported.  I considered checking get_originating_module == 0 or
!decl_defined_p instead of DECL_UNIQUE_FRIEND_P there, but I think this
situation is specific to friends.

I removed an assert because we have a test for the same condition a few
lines above.

gcc/cp/ChangeLog:

* decl.cc (duplicate_decls): Don't clobber DECL_MODULE_IMPORT_P with
an injected friend.
* name-lookup.cc (check_module_override): Look at all reachable
decls in decl's originating module.

gcc/testsuite/ChangeLog:

* g++.dg/modules/friend-9_a.C: New test.
* g++.dg/modules/friend-9_b.C: New test.

4 months agolibiberty, gcc: Add memrchr to libiberty and use it [PR119283].
Iain Sandoe [Sat, 15 Mar 2025 22:30:20 +0000 (22:30 +0000)] 
libiberty, gcc: Add memrchr to libiberty and use it [PR119283].

This adds an implementation of memrchr to libiberty and arranges
to configure gcc to use it, if the host does not have it.

PR cobol/119283

gcc/ChangeLog:

* config.in: Regenerate.
* configure: Regenerate.
* configure.ac: Check for host memrchr.

include/ChangeLog:

* libiberty.h (memrchr): New.

libiberty/ChangeLog:

* Makefile.in: Add memrchr build rules.
* config.in: Regenerate.
* configure: Regenerate.
* configure.ac: Check for memrchr.
* functions.texi: Document memrchr.
* memrchr.c: New file.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
4 months agojit, Darwin: Update exports with ABI 28 throught 34.
Iain Sandoe [Sat, 29 Mar 2025 13:47:27 +0000 (13:47 +0000)] 
jit, Darwin: Update exports with ABI 28 throught 34.

Synchronise the darwin export list with the current map.

gcc/jit/ChangeLog:

* libgccjit.exports: Add symbols for ABI 28 to 34.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
4 months agoc++: optimize push_to_top_level [PR64500]
Jason Merrill [Mon, 24 Mar 2025 19:28:04 +0000 (15:28 -0400)] 
c++: optimize push_to_top_level [PR64500]

Profiling showed that the loop to save away IDENTIFIER_BINDINGs from open
binding levels was taking 5% of total compilation time in the PR116285
testcase.  This turned out to be because we were unnecessarily trying to do
this for namespaces, whose bindings are found through
DECL_NAMESPACE_BINDINGS, not IDENTIFIER_BINDING.

As a result we would frequently loop through everything in std::, checking
whether it needs to be stored, and never storing anything.

This change actually appears to speed up compilation for the PR116285
testcase by ~20%.

The replaced comments referred either to long-replaced handling of classes
and templates, or to wanting b to point to :: when the loop exits.

PR c++/64500
PR c++/116285

gcc/cp/ChangeLog:

* name-lookup.cc (push_to_top_level): Don't try to store_bindings
for namespace levels.

4 months agoc++: Fix comment typo
Jakub Jelinek [Sat, 29 Mar 2025 12:26:38 +0000 (13:26 +0100)] 
c++: Fix comment typo

Found a typo in a comment.

2025-03-29  Jakub Jelinek  <jakub@redhat.com>

* name-lookup.cc (maybe_lazily_declare): Fix comment typo,
anout -> about.

4 months agoc++/modules: Fix modules and LTO with header units [PR118961]
Nathaniel Shead [Fri, 28 Mar 2025 12:38:26 +0000 (23:38 +1100)] 
c++/modules: Fix modules and LTO with header units [PR118961]

This patch makes some adjustments required to get a simple modules
testcase working with LTO.  There are two main issues fixed.

Firstly, modules only streams the maybe-in-charge constructor, and any
clones are recreated on stream-in.  These clones are copied from the
existing function decl and then adjusted.  This caused issues because
the clones were getting incorrectly marked as abstract, since after
clones have been created (in the imported file) the maybe-in-charge decl
gets marked as abstract.  So this patch just ensures that clones are
always created as non-abstract.

The second issue is that we need to explicitly tell cgraph that explicit
instantiations need to be emitted, otherwise LTO will elide them (as
they don't necessarily appear to be used directly) and cause link
errors.  Additionally, expand_or_defer_fn doesn't setup comdat groups
for explicit instantiations, so we need to do that here as well.
Currently this is all handled in 'mark_decl_instantiated'; this patch
splits out the linkage handling into a separate function that we can
call from modules code, maybe in GCC16 we could move this somewhere more
central.

PR c++/118961

gcc/cp/ChangeLog:

* class.cc (copy_fndecl_with_name): Mark clones as non-abstract.
* cp-tree.h (setup_explicit_instantiation_definition_linkage):
Declare new function.
* module.cc (trees_in::read_var_def): Use it.
(module_state::read_cluster): Likewise.
* pt.cc (setup_explicit_instantiation_definition_linkage): New
function.
(mark_decl_instantiated): Use it.

gcc/testsuite/ChangeLog:

* g++.dg/modules/lto-1.h: New test.
* g++.dg/modules/lto-1_a.H: New test.
* g++.dg/modules/lto-1_b.C: New test.
* g++.dg/modules/lto-1_c.C: New test.
* g++.dg/modules/lto-2_a.H: New test.
* g++.dg/modules/lto-2_b.C: New test.
* g++.dg/modules/lto-3_a.H: New test.
* g++.dg/modules/lto-3_b.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
4 months agoLoongArch: doc: Add same-address constraint to the description of '-mld-seq-sa'.
Lulu Cheng [Thu, 27 Mar 2025 03:42:11 +0000 (11:42 +0800)] 
LoongArch: doc: Add same-address constraint to the description of '-mld-seq-sa'.

gcc/ChangeLog:

* doc/invoke.texi: Modify the description of '-mld-seq-sa'.

4 months agoLoongArch: Set default alignment for functions jumps loops and labels.
Lulu Cheng [Thu, 27 Mar 2025 03:27:40 +0000 (11:27 +0800)] 
LoongArch: Set default alignment for functions jumps loops and labels.

Based on r15-7624, a set of align combinations with better performance
was tested through spec2006.

LA464: -falign-loops=8 -falign-functions=32 -falign-jumps=32 -falign-labels=8
LA664: -falign-loops=16 -falign-functions=16 -falign-jumps=32 -falign-labels=8

gcc/ChangeLog:

* config/loongarch/loongarch-def.cc
(la464_align): Add settings for labels.
(la664_align): Likewise.
* config/loongarch/loongarch-opts.cc
(loongarch_target_option_override): Likewise.
* config/loongarch/loongarch-tune.h
(struct loongarch_align): Implement the function `label_`.

4 months agoDaily bump.
GCC Administrator [Sat, 29 Mar 2025 00:17:59 +0000 (00:17 +0000)] 
Daily bump.

4 months agotestsuite: Fix up musttail2.C test
Jakub Jelinek [Fri, 28 Mar 2025 23:49:27 +0000 (00:49 +0100)] 
testsuite: Fix up musttail2.C test

On Wed, Mar 26, 2025 at 10:10:07AM -0700, Andi Kleen wrote:
> I think this needs to be target external_tailcall, otherwise you will
> fail on targets that don't support that.
>
> Or alternatively make this not extern.

You're right (although I don't remember which targets are
non-external_musttail).

Here is a patch to define the function.

2025-03-28  Jakub Jelinek  <jakub@redhat.com>

* g++.dg/opt/musttail2.C (foo): Define the function instead of
just declaring it, add [[gnu::noipa]] attribute to it.

4 months agocobol: Fix up cobol/{charmaps,valconv}.cc rules
Jakub Jelinek [Fri, 28 Mar 2025 23:47:57 +0000 (00:47 +0100)] 
cobol: Fix up cobol/{charmaps,valconv}.cc rules

sed -i is not portable, it is supported by GNU sed and perhaps some BSDs,
but not elsewhere.
Furthermore, I think it is far better to always use
 #include "../../libgcobol/something.h"
paths rather than something depending on the build directory.
And because we require GNU make, we don't have to have two different
rules for those, can use just one for both.
The l variable in there is just to make it fit into 80 columns.

2025-03-28  Jakub Jelinek  <jakub@redhat.com>

* Make-lang.in (cobol/charmaps.cc, cobol/valconv.cc): Used sed -e
instead of cp and multiple sed -i commands.  Always prefix libgcobol
header names in #include directives with ../../libgcobol/ rather than
something depending on $(LIB_SOURCE).

4 months agolibcpp: Fix incorrect line numbers in large files [PR108900]
Jeremy Bettis [Fri, 28 Mar 2025 07:54:27 +0000 (00:54 -0700)] 
libcpp: Fix incorrect line numbers in large files [PR108900]

This patch addresses an issue in the C preprocessor where incorrect
line number information is generated when processing files with a
large number of lines. The problem arises from improper handling
of location intervals in the line map, particularly when locations
exceed LINE_MAP_MAX_LOCATION_WITH_PACKED_RANGES.

By ensuring that the highest location is not decremented if it
would move to a different ordinary map, this fix resolves
the line number discrepancies observed in certain test cases.
This change improves the accuracy of line number reporting, benefiting
users relying on precise code coverage and debugging information.

libcpp/ChangeLog:

PR preprocessor/108900
* files.cc (_cpp_stack_file): Do not decrement highest_location
across distinct maps.

Signed-off-by: Jeremy Bettis <jbettis@google.com>
Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
4 months agolibstdc++: Add testcase for bogus -Wstringop-overflow in std::vector [PR117983]
Jonathan Wakely [Fri, 28 Mar 2025 21:46:46 +0000 (21:46 +0000)] 
libstdc++: Add testcase for bogus -Wstringop-overflow in std::vector [PR117983]

This was fixed on trunk by r15-4473-g3abe751ea86e34, just add the
testcase.

libstdc++-v3/ChangeLog:

PR libstdc++/117983
* testsuite/23_containers/vector/modifiers/insert/117983.cc: New
test.

4 months agoFortran: fix spelling of flag -fallow-invalid-boz
Harald Anlauf [Fri, 28 Mar 2025 19:31:08 +0000 (20:31 +0100)] 
Fortran: fix spelling of flag -fallow-invalid-boz

gcc/fortran/ChangeLog:

* check.cc (gfc_invalid_boz): Correct spelling of compiler flag in
hint to -fallow-invalid-boz.

4 months agotestsuite: Don't cycle through option list for gfortran.dg and libgomp.fortran dg...
Jakub Jelinek [Fri, 28 Mar 2025 19:29:31 +0000 (20:29 +0100)] 
testsuite: Don't cycle through option list for gfortran.dg and libgomp.fortran dg-do run tests with -O in dg*options

Here is a new version of the patch.

The current behavior in gfortran.dg/ and libgomp.fortran/libgomp.oacc-fortran
is that tests without any dg-do directive are implicitly dg-do compile
and tests with dg-do compile or without dg-do don't cycle through options
(-O is implicitly added but can be overridden), while test with dg-do run
cycle through the optimization options.
The following patch modifies this, so that even tests with dg-do run
with -O in dg-options or dg-additional-options (after [ \t"{]) don't cycle
either and also get implicit -O which is overridden by that
-O{,0,1,2,3,s,z,g,fast} in dg-{,additional-}options.  Previously we were
mostly wasting test time on those, because e.g.
-O0 -O2
-O1 -O2
-O2 -O2
-Os -O2
are still effectively -O2 and so the same thing, while
-O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions -O2
and
-O3 -g -O2
are not the same thing (effectively
-fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions -O2
and
-g -O2) I think it isn't worth to test those combinations (especially when
with e.g. -O0 in dg-options it mostly doesn't do much).

Tested with make check-gfortran where this results in slight decrease of
tests:
 # of expected passes            73809
 # of expected failures          343
 # of unsupported tests          78
with unmodified trunk vs.
 # of expected passes            72734
 # of expected failures          343
 # of unsupported tests          73
with the patch, and on the libgomp side
 # of expected passes            11162
 # of expected failures          238
 # of unsupported tests          274
to
 # of expected passes            11092
 # of expected failures          238
 # of unsupported tests          274
(when counting just fortran.exp tests).

Before the patch I see
grep -- '-O[^ ].*-O' testsuite/gfortran/gfortran.log | grep -v '/vect/\|/graphite/' | wc -l
1008
and with the patch
grep -- '-O[^ ].*-O' testsuite/gfortran/gfortran.log | grep -v '/vect/\|/graphite/' | wc -l
0
(vect and graphite have a few occurrences, but not too much).

2025-03-28  Jakub Jelinek  <jakub@redhat.com>

* lib/gfortran-dg.exp: Don't cycle through the option list if
dg-options or dg-additional-options contains -O after space, tab,
double quote or open curly bracket.
* gfortran.dg/cray_pointers_2.f90: Remove extraneous space between
dg-do and run and remove comment about it.

4 months agoPR modula2/118045: libm2iso.so.20.0.0 contains an unresolvable reference to symbol...
Gaius Mulley [Fri, 28 Mar 2025 17:47:05 +0000 (17:47 +0000)] 
PR modula2/118045: libm2iso.so.20.0.0 contains an unresolvable reference to symbol casin

This patch adds -lm to the libm2iso, libm2log and libm2pim libraries.

libgm2/ChangeLog:

PR modula2/118045
* libm2iso/Makefile.am (libm2iso_la_LINK): Add -lm.
* libm2log/Makefile.am (libm2log_la_LINK): Ditto.
* libm2pim/Makefile.am (libm2pim_la_LINK): Ditto.
* libm2iso/Makefile.in: Regenerate.
* libm2log/Makefile.in: Regenerate.
* libm2pim/Makefile.in: Regenerate.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
4 months agoRegenerate common.opt.urls
Jakub Jelinek [Fri, 28 Mar 2025 16:23:29 +0000 (17:23 +0100)] 
Regenerate common.opt.urls

The r15-8947 commit has not regenerate-opt-urls.

2025-03-28  Jakub Jelinek  <jakub@redhat.com>

* common.opt.urls: Regenerate.

4 months agocobol: Confine all __int128/_Float128 references to libgcobol.
Bob Dubner [Fri, 28 Mar 2025 16:09:39 +0000 (12:09 -0400)] 
cobol: Confine all __int128/_Float128 references to libgcobol.

These changes are part of the effort to make possible cross compilation for
hosts that don't support __int128 or _Float128.

gcc/cobol

* Make-lang.in: Eliminate libgcobol.h from gcc/cobol files.
* genapi.cc: Eliminate "#include libgcobol.h".
(parser_display_internal): Change comment.
* genmath.cc: Eliminate "#include libgcobol.h".
* genutil.cc: Likewise.
(get_power_of_ten): Change comment.
* structs.cc: Eliminate cblc_int128_type_node.
* structs.h: Likewise.
* symbols.h: Receive comment from libgcobol.h

libgcobol

* charmaps.cc:Eliminate "#include libgcobol.h".
Change comment about _Float128.
* common-defs.h: Change comment about _Float128. Receive
#defines from libgcobol.h.
* constants.cc: Eliminate #include libgcobol.h. Eliminate other
unneeded #includes.
* ec.h: Receive declarations from libgcobol.h.
* gcobolio.h: Likewise.
* gfileio.cc: (__gg__file_init): Use file_flag_none_e instead of
zero in assignment.  (__gg__file_reopen): Likewise.
(__io__file_open): Likewise.
* gfileio.h: Receive declarations from libgcobol.h.
* libgcobol.h: Numerous declarations moved elsewhere.

4 months agoPR modula2/119504: ICE when attempting to access an element of a constant string
Gaius Mulley [Fri, 28 Mar 2025 15:25:55 +0000 (15:25 +0000)] 
PR modula2/119504: ICE when attempting to access an element of a constant string

This patch prevents an ICE and generates an error if an array access to a
constant string is attempted.  The patch also allows HIGH ("string").

gcc/m2/ChangeLog:

PR modula2/119504
* gm2-compiler/M2Quads.mod (BuildHighFunction): Defend against
Type = NulSym and fall into BuildConstHighFromSym.
(BuildDesignatorArray): Rewrite to detect an array access to
a constant string.
(BuildDesignatorArrayStaticDynamic): New procedure.

gcc/testsuite/ChangeLog:

PR modula2/119504
* gm2/iso/fail/conststrarray2.mod: New test.
* gm2/iso/run/pass/constarray2.mod: New test.
* gm2/pim/pass/hexstring.mod: New test.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
4 months agosrcextra fixes
Jakub Jelinek [Fri, 28 Mar 2025 14:45:03 +0000 (15:45 +0100)] 
srcextra fixes

Here is a patch which uses sed to fix up the copies of the generated
files by flex/bison in the source directories (i.e. what we ship in
release tarballs).
In that case the generated files are in the same directory as the
files they are generated from, so there should be no absolute or relative
directories, just the filenames.

Furthermore, c.srcextra was duplicating the work of gcc.srcextra, there is
nothing C FE specific on gengtype-lex.l.

2025-03-28  Jakub Jelinek  <jakub@redhat.com>

gcc/
* Makefile.in (gcc.srcextra): Use sed to turn .../gcc/gengtype-lex.l
in #line directives into just gengtype-lex.l.
gcc/c/
* Make-lang.in (c.srcextra): Don't depend on anything and don't copy
anything.
gcc/cobol/
* Make-lang.in (cobol.srcextra): Use sed to turn
.../gcc/cobol/*.{y,l,h,cc} and cobol/*.{y,l,h,cc} in #line directives
into just *.{y,l,h,cc}.

4 months agoother/119510 - use --enable-languages=default,cobol for release tarballs
Richard Biener [Fri, 28 Mar 2025 14:20:16 +0000 (15:20 +0100)] 
other/119510 - use --enable-languages=default,cobol for release tarballs

The following adds cobol to the set of languages built during release
tarball building so the bison and flex generated sources for cobol
are included in the tarball.

PR other/119510
maintainer-scripts/
* gcc_release: Use --enable-languages=default,cobol
when building generated files.

4 months agoIf the LHS does not contain zero, neither do multiply operands.
Andrew MacLeod [Wed, 26 Mar 2025 14:34:42 +0000 (10:34 -0400)] 
If the LHS does not contain zero, neither do multiply operands.

Given ~[0,0] = op1 * op2, range-ops should determine that neither op1 nor
op2 is zero.  Add this to the operator_mult for op1_range.  op2_range
simply invokes op1_range, so both will be covered.

PR tree-optimzation/110992.c
PR tree-optimzation/119471.c
gcc/
* range-op.cc (operator_mult::op1_range): If the LHS does not
contain zero, return non-zero.

gcc/testsuite/
* gcc.dg/pr110992.c: New.
* gcc.dg/pr119471.c: New.

4 months agobootstrap/119513 - fix cobol bootstrap with --enable-generated-files-in-srcdir
Richard Biener [Fri, 28 Mar 2025 12:48:36 +0000 (13:48 +0100)] 
bootstrap/119513 - fix cobol bootstrap with --enable-generated-files-in-srcdir

This adds gcc/cobol/parse.o to compare_exclusions and makes sure to
ignore errors when copying generated files, like it's done when
copying gengtype-lex.cc.

PR bootstrap/119513
* configure.ac (compare_exclusions): Add gcc/cobol/parse\$(objext).
* configure: Regenerated.

gcc/cobol/
* Make-lang.in (cobol.srcextra): Use cp instead of ln, ignore
errors.

4 months agotestsuite: Add options for float16 for test [PR119133]
Christophe Lyon [Thu, 27 Mar 2025 14:44:18 +0000 (14:44 +0000)] 
testsuite: Add options for float16 for test [PR119133]

Some targets (like arm) need some flags to enable _Float16 support.

gcc/testsuite/ChangeLog:

PR target/119133
* gcc.dg/torture/pr119133.c: Add options for float16.

4 months agocobol: Eliminate check-cobol -Os failure in EVALUATE testcase
Bob Dubner [Fri, 28 Mar 2025 12:57:24 +0000 (08:57 -0400)] 
cobol: Eliminate check-cobol -Os failure in EVALUATE testcase

The coding error was the lack of a necessary cast from unsigned
char to int.

gcc/cobol

* genapi.cc: (create_and_call): cast unsigned char to int

gcc/testsuite

* cobol.dg/group2/Complex_EVALUATE__1_.cob: New EVALUTE testcase.
* cobol.dg/group2/Complex_EVALUATE__2_.cob: Likewise.
* cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.cob: Likewise.
* cobol.dg/group2/EVALUATE_condition__2_.cob: Likewise.
* cobol.dg/group2/EVALUATE_doubled_WHEN.cob: Likewise.
* cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.cob: Likewise.
* cobol.dg/group2/Complex_EVALUATE__1_.out: Known-good data for testcase.
* cobol.dg/group2/Complex_EVALUATE__2_.out: Likewise.
* cobol.dg/group2/EVALUATE_WHEN_NEGATIVE.out: Likewise.
* cobol.dg/group2/EVALUATE_condition__2_.out: Likewise.
* cobol.dg/group2/EVALUATE_doubled_WHEN.out: Likewise.
* cobol.dg/group2/EVALUATE_with_WHEN_using_condition-1.out: Likewise.

4 months ago[COBOL] use native_encode_real
Richard Biener [Fri, 28 Mar 2025 07:52:16 +0000 (08:52 +0100)] 
[COBOL] use native_encode_real

The following avoids the round-trip through a newly built tree and
instead directly uses the now exported native_encode_real.

gcc/cobol/
* genapi.cc (initial_from_float128): Use native_encode_real.

4 months agotailc: Handle musttail noreturn calls [PR119483]
Jakub Jelinek [Fri, 28 Mar 2025 09:49:40 +0000 (10:49 +0100)] 
tailc: Handle musttail noreturn calls [PR119483]

The following (first) testcase is accepted by clang (if clang::musttail)
and rejected by gcc, because we discover the call is noreturn and then bail
out because we don't want noreturn tailcalls.
The general reason not to support noreturn tail calls is for cases like
abort where we want nicer backtrace, but if user asks explicitly to
musttail a call which either is explicitly noreturn or is implicitly
determined to be noreturn, I don't see a reason why we couldn't do that.
Both for tail calls and tail recursions.

An alternative would be to keep rejecting musttail to explicit noreturn,
but not actually implicitly mark anything as noreturn if it has any musttail
calls.  But it is unclear how we could do that, such marking is I think done
typically before IPA and e.g. for LTO we won't know whether some other TU
could have musttail calls to it.  And keeping around both explicit and
implicit noreturn bits would be ugly.  Well, I guess we could differentiate
between presence of noreturn/_Noreturn attributes and just ECF_NORETURN
without those, but then tailc would still need to support it, just error out
if it was explicit.

2025-03-28  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/119483
* tree-tailcall.cc (find_tail_calls): Handle noreturn musttail
calls.
(eliminate_tail_call): Likewise.
(tree_optimize_tail_calls_1): If cfun->has_musttail and
diag_musttail, handle also basic blocks with no successors
with noreturn musttail calls.
* calls.cc (can_implement_as_sibling_call_p): Allow ECF_NORETURN
calls if they are musttail calls.

* c-c++-common/pr119483-1.c: New test.
* c-c++-common/pr119483-2.c: New test.

4 months agoipa-sra: Don't change return type to void if there are musttail calls [PR119484]
Jakub Jelinek [Fri, 28 Mar 2025 09:48:31 +0000 (10:48 +0100)] 
ipa-sra: Don't change return type to void if there are musttail calls [PR119484]

The following testcase is rejected, because IPA-SRA decides to
turn bar.constprop call into bar.constprop.isra which returns void.
While there is no explicit lhs on the call, as it is a musttail call
the tailc pass checks if IPA-VRP returns singleton from that function
and the function returns the same value and in that case it still turns
it into a tail call.  This can't work with IPA-SRA changing it into
void returning function though.

The following patch fixes this by forcing returning the original type
if there are musttail calls.

2025-03-28  Jakub Jelinek  <jakub@redhat.com>

PR ipa/119484
* ipa-sra.cc (isra_analyze_call): Don't set m_return_ignored if
gimple_call_must_tail_p even if it doesn't have lhs.

* c-c++-common/pr119484.c: New test.

4 months agoExport native_encode_real operating on REAL_VALUE_TYPE
Richard Biener [Fri, 21 Mar 2025 18:30:31 +0000 (19:30 +0100)] 
Export native_encode_real operating on REAL_VALUE_TYPE

The following exports the native_encode_real worker, and makes it
take a scalar float mode and REAL_VALUE_TYPE data instead of a tree
for use in the COBOL frontend, avoiding creating of a temporary tree.

* fold-const.h (native_encode_real): Export.
* fold-const.cc (native_encode_real): Change API to take
mode and REAL_VALUE_TYPE.
(native_encode_expr): Adjust.

4 months agotestsuite, riscv: fix broken dg directives
David Malcolm [Wed, 26 Mar 2025 18:34:53 +0000 (14:34 -0400)] 
testsuite, riscv: fix broken dg directives

Found by dg-lint.

gcc/testsuite/ChangeLog:
* gcc.target/riscv/cmo-zicbop-1.c: Fix missing space before
trailing } in dg-do directive.
* gcc.target/riscv/cmo-zicbop-2.c: Likewise.
* gcc.target/riscv/prefetch-zicbop.c: Likewise.
* gcc.target/riscv/prefetch-zihintntl.c: Likewise.

4 months agotestsuite, i386: fix broken dg directives
David Malcolm [Wed, 26 Mar 2025 18:34:50 +0000 (14:34 -0400)] 
testsuite, i386: fix broken dg directives

Found by dg-lint.

gcc/testsuite/ChangeLog:
* gcc.target/i386/strub-pr118006.c: Fix ordering of dg-do and
dg-require- directive so that dg-do is first.

4 months agotestsuite, arm: fix broken dg directives
David Malcolm [Wed, 26 Mar 2025 18:34:48 +0000 (14:34 -0400)] 
testsuite, arm: fix broken dg directives

Found by dg-lint.

gcc/testsuite/ChangeLog:
* gcc.target/arm/cmse/cmse-17.c: Fix missing space before trailing
"}" in dg-options.

4 months agotestsuite, aarch64: fix broken dg directives
David Malcolm [Wed, 26 Mar 2025 18:34:46 +0000 (14:34 -0400)] 
testsuite, aarch64: fix broken dg directives

Found by dg-lint.

gcc/testsuite/ChangeLog:
* gcc.target/aarch64/saturating_arithmetic_1.c: Fix dg-do compile.
* gcc.target/aarch64/saturating_arithmetic_2.c: Likewise.

4 months agocobol: Do not include <cmath> (no longer needed)
Iain Sandoe [Thu, 20 Mar 2025 17:08:57 +0000 (17:08 +0000)] 
cobol: Do not include <cmath> (no longer needed)

Several of enumerators in parse.y conflict with ones declared in at
least some versions of <cmath> .. e.g. "OVERFLOW".  The header is no
longer needed since the FE is not trying to do host arithmetic.

gcc/cobol/ChangeLog:

* cobol-system.h: Remove <cmath>.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
4 months agoDaily bump.
GCC Administrator [Fri, 28 Mar 2025 00:19:00 +0000 (00:19 +0000)] 
Daily bump.

4 months agolibstdc++-v3 testsuite: fix malformed dg-require-static-libstdcxx directives
David Malcolm [Fri, 28 Mar 2025 00:00:34 +0000 (20:00 -0400)] 
libstdc++-v3 testsuite: fix malformed dg-require-static-libstdcxx directives

I believe these don't get detected by DejaGnu's regexp.

Found by dg-lint.

libstdc++-v3/ChangeLog:
* testsuite/17_intro/shared_with_static_deps.cc: Fix malformed
dg-require-static-libstdcxx directive.
* testsuite/17_intro/static.cc: Likewise.
* testsuite/18_support/type_info/110572.cc: Likewise.
* testsuite/20_util/to_chars/4.cc: Likewise.
* testsuite/std/time/tzdb_list/pr118811.cc: Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
4 months agotestsuite: fix some malformed dg-require-* directives
David Malcolm [Fri, 28 Mar 2025 00:00:29 +0000 (20:00 -0400)] 
testsuite: fix some malformed dg-require-* directives

gcc/testsuite/ChangeLog:
* g++.dg/abi/pure-virtual1.C: Fix dg-require-weak directive.
* g++.target/i386/mangling-alias1.C: Fix dg-require-ifunc
directive.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
4 months agocontrib: add dg-lint and libgdiagnostics.py [PR116163]
David Malcolm [Thu, 27 Mar 2025 23:46:20 +0000 (19:46 -0400)] 
contrib: add dg-lint and libgdiagnostics.py [PR116163]

Changed in v2:
- eliminated COMMON_MISSPELLINGS in favor of retesting with a regexp
  that adds underscores
- add a list of KNOWN_DIRECTIVES, and complain if we see a directive
  that isn't in the list
- various refactorings to reduce the nesting within the script
- skip more kinds of file ('README', 'Makefile.am', 'Makefile.in',
  'gen_directive_tests')
- keep track of the number of files scanned and report it and the end
  with a note

This patch adds a new dg-lint subdirectory below contrib, containing
a "dg-lint" script for detecting common mistakes made in our DejaGnu
tests.

Specifically, DejaGnu's dg.exp's dg-get-options has a regexp for
detecting dg- directives
  https://git.savannah.gnu.org/gitweb/?p=dejagnu.git;a=blob;f=lib/dg.exp
here's the current:

    set tmp [grep $prog "{\[ \t\]\+dg-\[-a-z\]\+\[ \t\]\+.*\[ \t\]\+}" line]

which if I'm reading it right requires a "{", then one or more tab/space
chars, then a "dg-" directive name, then one of more tab/space
characters, then anything (for arguments to the directive), then one of
more tab/space character, then a "}".

There are numerous places in our testsuite which look like attempts to
use a directive, but which don't match this regexp.

The script warns about such places, along with a list of misspelled
directives (currently just "dg_options" for "dg-options"), and a warning
if a dg-do appears after a dg-require-* (as per
https://gcc.gnu.org/onlinedocs/gccint/Directives.html
"This directive must appear after any dg-do directive in the test
and before any dg-additional-sources directive." for
dg-require-effective-target.

dg-lint uses libgdiagnostics to report its results; the patch adds a
new libgdiagnostics.py script below contrib/dg-lint.  This uses Python's
ctypes module to expose libgdianostics.so to Python via FFI.  Hence
the warnings have colorization, quote the pertinent parts of the tested
file, can have fix-it hints, etc.  Here's the output from the tests, run
from the top-level directory:

$ LD_LIBRARY_PATH=../build/gcc/ ./contrib/dg-lint/dg-lint contrib/dg-lint/test-*.c
contrib/dg-lint/test-1.c:6:6: warning: misspelled directive: 'dg_final'; did you mean 'dg-final'?
    6 | /* { dg_final { scan_assembler_times "vmsumudm" 2 } } */
      |      ^~~~~~~~
      |      dg-final
contrib/dg-lint/test-1.c:15:4: warning: directive 'dg-output-file' appears not to match dg.exp's regexp
   15 |    dg-output-file "m4.out"
      |    ^~~~~~~~~~~~~~
contrib/dg-lint/test-1.c:18:4: warning: directive 'dg-output-file' appears not to match dg.exp's regexp
   18 |    dg-output-file "m4.out" }
      |    ^~~~~~~~~~~~~~
contrib/dg-lint/test-1.c:21:6: warning: directive 'dg-output-file' appears not to match dg.exp's regexp
   21 |    { dg-output-file "m4.out"
      |      ^~~~~~~~~~~~~~
contrib/dg-lint/test-1.c:24:5: warning: directive 'dg-output-file' appears not to match dg.exp's regexp
   24 |    {dg-output-file "m4.out"}
      |     ^~~~~~~~~~~~~~
contrib/dg-lint/test-1.c:27:6: warning: directive 'dg-output-file' appears not to match dg.exp's regexp
   27 |    { dg-output-file, "m4.out" }
      |      ^~~~~~~~~~~~~~
contrib/dg-lint/test-2.c:4:6: warning: 'dg-do' after 'dg-require-effective-target'
    4 | /* { dg-do compile } */
      |      ^~~~~
contrib/dg-lint/test-2.c:3:6: note: 'dg-require-effective-target' was here
    3 | /* { dg-require-effective-target c++11 } */
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~

I don't yet have a way to verify these tests (clearly we can't use
DejaGnu for this).

These Python bindings could be used by other projects, but so far I only
implemented what I needed for dg-lint.

Running the test on the GCC source tree finds dozens of issues, which
followup patches address.

Tested with Python 3.8

contrib/ChangeLog:
PR testsuite/116163
* dg-lint/dg-lint: New file.
* dg-lint/libgdiagnostics.py: New file.
* dg-lint/test-1.c: New file.
* dg-lint/test-2.c: New file.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
4 months agocobol: Incorporate new testcases from the cobolworx UAT tests.
Bob Dubner [Thu, 27 Mar 2025 21:55:53 +0000 (17:55 -0400)] 
cobol: Incorporate new testcases from the cobolworx UAT tests.

The author notes that some of the file names are regrettably lengthy,
which is because they are derived from the descriptive names of the
autom4te tests.

gcc/testsuite

* cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__1_.cob: New testcase.
* cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob: Likewise.
* cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__1_.cob: Likewise.
* cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob: Likewise.
* cobol.dg/group2/COMP-6_arithmetic.cob: Likewise.
* cobol.dg/group2/COMP-6_numeric_test.cob: Likewise.
* cobol.dg/group2/COMP-6_used_with_DISPLAY.cob: Likewise.
* cobol.dg/group2/COMP-6_used_with_MOVE.cob: Likewise.
* cobol.dg/group2/COMPUTE_multiplication_to_FIX4.cob: Likewise.
* cobol.dg/group2/DISPLAY__Sign_ASCII__2_.cob: Likewise.
* cobol.dg/group2/DISPLAY__Sign_ASCII.cob: Likewise.
* cobol.dg/group2/Floating_continuation_indicator__1_.cob: Likewise.
* cobol.dg/group2/floating-point_ADD_FORMAT_1.cob: Likewise.
* cobol.dg/group2/floating-point_ADD_FORMAT_2.cob: Likewise.
* cobol.dg/group2/floating-point_DIVIDE_FORMAT_1.cob: Likewise.
* cobol.dg/group2/floating-point_DIVIDE_FORMAT_2.cob: Likewise.
* cobol.dg/group2/floating-point_literals.cob: Likewise.
* cobol.dg/group2/floating-point_MULTIPLY_FORMAT_1.cob: Likewise.
* cobol.dg/group2/floating-point_MULTIPLY_FORMAT_2.cob: Likewise.
* cobol.dg/group2/floating-point_SUBTRACT_FORMAT_1.cob: Likewise.
* cobol.dg/group2/floating-point_SUBTRACT_FORMAT_2.cob: Likewise.
* cobol.dg/group2/IBM_dialect_COMP_redefined_by_POINTER_as_64-bit.cob: Likewise.
* cobol.dg/group2/Indicators_______________-____D__.cob: Likewise.
* cobol.dg/group2/MULTIPLY_to_FIX4.cob: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_arithmetic.cob: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__1_.cob: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.cob: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_dump.cob: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_numeric_test__1_.cob: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_numeric_test__2_.cob: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_used_with_DISPLAY.cob: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_used_with_INITIALIZE.cob: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_used_with_MOVE.cob: Likewise.
* cobol.dg/group2/POINTER__display.cob: Likewise.
* cobol.dg/group2/Simple_floating-point_MOVE.cob: Likewise.
* cobol.dg/group2/Simple_floating-point_VALUE_and_MOVE.cob: Likewise.
* cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.out: Known-good result.
* cobol.dg/group2/COMP-6_arithmetic.out: Likewise.
* cobol.dg/group2/COMP-6_numeric_test.out: Likewise.
* cobol.dg/group2/COMP-6_used_with_DISPLAY.out: Likewise.
* cobol.dg/group2/COMP-6_used_with_MOVE.out: Likewise.
* cobol.dg/group2/COMPUTE_multiplication_to_FIX4.out: Likewise.
* cobol.dg/group2/DISPLAY__Sign_ASCII__2_.out: Likewise.
* cobol.dg/group2/DISPLAY__Sign_ASCII.out: Likewise.
* cobol.dg/group2/Floating_continuation_indicator__1_.out: Likewise.
* cobol.dg/group2/floating-point_ADD_FORMAT_1.out: Likewise.
* cobol.dg/group2/floating-point_ADD_FORMAT_2.out: Likewise.
* cobol.dg/group2/floating-point_DIVIDE_FORMAT_1.out: Likewise.
* cobol.dg/group2/floating-point_DIVIDE_FORMAT_2.out: Likewise.
* cobol.dg/group2/floating-point_literals.out: Likewise.
* cobol.dg/group2/floating-point_MULTIPLY_FORMAT_1.out: Likewise.
* cobol.dg/group2/floating-point_MULTIPLY_FORMAT_2.out: Likewise.
* cobol.dg/group2/floating-point_SUBTRACT_FORMAT_1.out: Likewise.
* cobol.dg/group2/floating-point_SUBTRACT_FORMAT_2.out: Likewise.
* cobol.dg/group2/IBM_dialect_COMP_redefined_by_POINTER_as_64-bit.out: Likewise.
* cobol.dg/group2/Indicators_______________-____D__.out: Likewise.
* cobol.dg/group2/MULTIPLY_to_FIX4.out: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_arithmetic.out: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__1_.out: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_basic_comp-3_comp-6__2_.out: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_dump.out: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_numeric_test__1_.out: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_numeric_test__2_.out: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_used_with_DISPLAY.out: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_used_with_INITIALIZE.out: Likewise.
* cobol.dg/group2/PACKED-DECIMAL_used_with_MOVE.out: Likewise.
* cobol.dg/group2/POINTER__display.out: Likewise.
* cobol.dg/group2/Simple_floating-point_MOVE.out: Likewise.
* cobol.dg/group2/Simple_floating-point_VALUE_and_MOVE.out: Likewise.

4 months agolibcpp: Add missing configure check for setlocale.
Roland McGrath [Thu, 27 Mar 2025 22:17:06 +0000 (22:17 +0000)] 
libcpp: Add missing configure check for setlocale.

libcpp/
* configure.ac: Check for setlocale.
* configure, config.in: Regenerated.

4 months agoi386: Fix offset calculation in ix86_redzone_clobber
Uros Bizjak [Thu, 27 Mar 2025 20:25:36 +0000 (21:25 +0100)] 
i386: Fix offset calculation in ix86_redzone_clobber

plus_constant expects integer as its third argument, not rtx.

gcc/ChangeLog:

* config/i386/i386.cc (ix86_redzone_clobber): Use integer, not rtx
as the third argument of plus_constant.

4 months agotestsuite: Fix up strub-internal-pr112938.C test for C++2{0,3,6}
Jakub Jelinek [Thu, 27 Mar 2025 20:21:48 +0000 (21:21 +0100)] 
testsuite: Fix up strub-internal-pr112938.C test for C++2{0,3,6}

On Thu, Mar 27, 2025 at 12:05:21AM +0000, Sam James wrote:
> The test was being ignored because dg.exp looks for .C in g++.dg/.
>
> gcc/testsuite/ChangeLog:
>       PR middle-end/112938
>
>       * g++.dg/strub-internal-pr112938.cc: Move to...
>       * g++.dg/strub-internal-pr112938.C: ...here.

This regressed the test for C++20 and higher:
FAIL: g++.dg/strub-internal-pr112938.C  -std=gnu++20 (test for excess errors)
FAIL: g++.dg/strub-internal-pr112938.C  -std=gnu++23 (test for excess errors)
FAIL: g++.dg/strub-internal-pr112938.C  -std=gnu++26 (test for excess errors)

Here is a fix.

2025-03-27  Jakub Jelinek  <jakub@redhat.com>

* g++.dg/strub-internal-pr112938.C: Add dg-warning for c++20.

4 months agoAda: Fix too late initialization of tasking runtime with standalone library
Eric Botcazou [Thu, 27 Mar 2025 19:29:51 +0000 (20:29 +0100)] 
Ada: Fix too late initialization of tasking runtime with standalone library

The Tasking_Runtime_Initialize routine installs the tasking version of the
RTS_Lock manipulation routines and thus needs to be called very early before
the elaboration of all the Ada units of the program, including those of the
runtime itself.

This is guaranteed by the binder when the tasking runtime is explicitly
dragged into the link.  However, for a standalone dynamic library that
does not depend on the tasking runtime and is auto-initialized, no such
guarantee holds, even though the library might be later dragged into a
link that contains the tasking runtime.

This change causes the routine to be called even earlier, in particular
at load time when a (standalone) dynamic library is involved in the link,
so as to meet the requirements.  It will cause the routine to be called
twice if the main subprogram is generated by the binder, but this is
harmless since the routine is idempotent.

ada/
* libgnarl/s-tasini.adb (Tasking_Runtime_Initialize): Add pragma
Linker_Constructor for the procedure.

4 months agotestsuite: fix g++.dg/template/explicit-args6.C
Marek Polacek [Thu, 27 Mar 2025 18:56:44 +0000 (14:56 -0400)] 
testsuite: fix g++.dg/template/explicit-args6.C

gcc/testsuite/ChangeLog:

* g++.dg/template/explicit-args6.C: Remove an extra set of {} in
a dg-message.

4 months agotestsuite: Require effective target sigsetjmp for gcov-31/32
Dimitar Dimitrov [Thu, 27 Mar 2025 18:31:17 +0000 (20:31 +0200)] 
testsuite: Require effective target sigsetjmp for gcov-31/32

The tests call sigsetjmp and use sigjmp_buf type.  Thus the tests
cannot be compiled on baremetal newlib targets which do not have
sigsetjmp.

gcc/testsuite/ChangeLog:

* gcc.misc-tests/gcov-31.c: Require effective target sigsetjmp.
* gcc.misc-tests/gcov-32.c: Ditto.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
4 months agoc++: fix g++.dg/tree-ssa/initlist-opt2.C
Marek Polacek [Thu, 27 Mar 2025 18:10:03 +0000 (14:10 -0400)] 
c++: fix g++.dg/tree-ssa/initlist-opt2.C

This test needs the same fix as g++.dg/tree-ssa/initlist-opt1.C in
r15-8934.

gcc/testsuite/ChangeLog:

* g++.dg/tree-ssa/initlist-opt2.C: Match _M_range_initialize_n
instead of _M_range_initialize.

4 months agotestsuite: revert Fortran change
Sam James [Thu, 27 Mar 2025 17:52:19 +0000 (17:52 +0000)] 
testsuite: revert Fortran change

Revert part of my change from r15-8973-g1307de1b4e7d5e; as Harald points
out, the comment explains why this is there. It's a hack but it needs to
stay for now. (I did have this marked as a TODO in my branch and didn't
leave a proper note as to why, so it's my fault.)

gcc/testsuite/ChangeLog:

* gfortran.dg/cray_pointers_2.f90: Restore whitespace.

4 months agoRISC-V: testsuite: fix syntax error for assembler scan
Edwin Lu [Thu, 27 Mar 2025 17:45:13 +0000 (10:45 -0700)] 
RISC-V: testsuite: fix syntax error for assembler scan

When the dg brackets were added, they forgot to add the brackets for the
scan-assembler-times directive.

Committed as obvious.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/vls/merge-4.c: Fix typo

Signed-off-by: Edwin Lu <ewlu@rivosinc.com>
4 months agotestsuite: aarch64: fix another unbalanced }
Sam James [Thu, 27 Mar 2025 15:36:00 +0000 (15:36 +0000)] 
testsuite: aarch64: fix another unbalanced }

In r15-8956-ge90d6c2639c392, I missed one, so while it did fix a problem,
it also exposed another because the braces were now unbalanced.

There's IMO more to do here with ideally whitespace before the } when
using scan-assembler-times but let's do that later.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/atomic-inst-ldlogic.c: Add another closing brace.

4 months agolibstdc++: Replace use of std::min in ranges::uninitialized_xxx algos [PR101587]
Jonathan Wakely [Wed, 26 Mar 2025 11:47:05 +0000 (11:47 +0000)] 
libstdc++: Replace use of std::min in ranges::uninitialized_xxx algos [PR101587]

Because ranges can have any signed integer-like type as difference_type,
it's not valid to use std::min(diff1, diff2). Instead of calling
std::min with an explicit template argument, this adds a new __mindist
helper that determines the common type and uses that with std::min.

libstdc++-v3/ChangeLog:

PR libstdc++/101587
* include/bits/ranges_uninitialized.h (__detail::__mindist):
New function object.
(ranges::uninitialized_copy, ranges::uninitialized_copy_n)
(ranges::uninitialized_move, ranges::uninitialized_move_n): Use
__mindist instead of std::min.
* testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc:
Check ranges with difference difference types.
* testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc:
Likewise.

4 months agolibstdc++: Use const_cast to workaround tm_zone being non-const
Jonathan Wakely [Wed, 26 Mar 2025 17:45:06 +0000 (17:45 +0000)] 
libstdc++: Use const_cast to workaround tm_zone being non-const

Iain reported that he's seeing this on Darwin:

include/bits/chrono_io.h:914: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

This is because the BSD definition ot tm::tm_zone is a char* (and has
been since 1987) rather than const char* as in Glibc and POSIX.1-2024.

We can fix it by using const_cast<char*> when setting the tm_zone
member. This should be safe because libc doesn't actually write anything
to tm_zone; it's only non-const because the BSD definition predates the
addition of the const keyword to C.

For targets where it's a const char* the cast won't matter because it
will be converted back to const char* on assignment anyway.

libstdc++-v3/ChangeLog:

* include/bits/chrono_io.h (__formatter_chrono::_M_c): Use
const_cast when setting tm.tm_zone.

Reviewed-by: Iain Sandoe <iain@sandoe.co.uk>
4 months agolibstdc++: Update tzdata to 2025b
Jonathan Wakely [Fri, 12 Jan 2024 16:57:41 +0000 (16:57 +0000)] 
libstdc++: Update tzdata to 2025b

Import the new 2025b tzdata.zi file.

libstdc++-v3/ChangeLog:

* src/c++20/tzdata.zi: Import new file from 2025b release.

4 months agotarget/119010 - add znver{4,5}_insn_both to resolve missing reservations
Richard Biener [Thu, 27 Mar 2025 07:40:32 +0000 (08:40 +0100)] 
target/119010 - add znver{4,5}_insn_both to resolve missing reservations

I still was seeing

;;        0--> b  0: i 101 {[sp-0x3c]=[sp-0x3c]+0x1;clobber flags;}:nothing

so the following adds a standard alu insn reservation mimicing that
from the znver.md description allowing both load and store.

PR target/119010
* config/i386/zn4zn5.md (znver4_insn_both, znver5_insn_both):
New reservation for ALU ops with load and store.

4 months agotarget/119010 - more DFmode handling in zn4zn5 reservations
Richard Biener [Thu, 27 Mar 2025 07:21:10 +0000 (08:21 +0100)] 
target/119010 - more DFmode handling in zn4zn5 reservations

The following adds DFmode where V1DFmode and SFmode were handled.
This resolves missing reservations for adds, subs [with memory]
and for FMAs for the testcase I'm looking at.  Resolved cases are

-;;      16--> b  0: i 237 xmm3=xmm3+[r9*0x8+si]                   :nothing
-;;      29--> b  0: i 246 xmm3=xmm3+xmm1                          :nothing
-;;      46--> b  0: i 296 xmm1=xmm1-xmm3                          :nothing

I've done search-and-replace for this, the catched cases look reasonable
though I'm of course not sure all of them can actually happen.

This also fixes the matched type for the znver{4,5}_sse_muladd_load
reservations from sseshuf to ssemuladd, resolving

-;;       1--> b  0: i 161 xmm0={-xmm0*xmm27+[cx+ax]}              :nothing
-;;      22--> b  0: i 229 xmm11={-xmm11*xmm7+[di*0x8+dx]}         :nothing

PR target/119010
* config/i386/zn4zn5.md (znver4_sse_add, znver4_sse_add_load,
znver5_sse_add_load, znver4_sse_add1, znver4_sse_add1_load,
znver5_sse_add1_load, znver4_sse_mul, znver4_sse_mul_load,
znver5_sse_mul_load, znver4_sse_cvt, znver4_sse_cvt_load,
znver5_sse_cvt_load, znver4_sse_shuf, znver5_sse_shuf,
znver4_sse_shuf_load, znver5_sse_shuf_load,
znver4_sse_cmp_avx128, znver5_sse_cmp_avx128,
znver4_sse_cmp_avx128_load, znver5_sse_cmp_avx128_load):
Also handle DFmode.
(znver4_sse_muladd_load, znver5_sse_muladd_load): Use
ssemuladd type.

4 months agotestsuite: fix dg-* typos
Sam James [Thu, 27 Mar 2025 13:26:34 +0000 (13:26 +0000)] 
testsuite: fix dg-* typos

I have a handful more of these left but those introduce FAILs, while
these all introduce new PASSes.

libstdc++-v3/ChangeLog:

* testsuite/std/format/string_neg.cc: Add missing brace for dg-error.

gcc/testsuite/ChangeLog:

* gcc.dg/analyzer/fd-datagram-socket.c: Fix 'dg-message' spelling.
* gcc.dg/analyzer/out-of-bounds-zero.c: Fix whitespace in 'dg-additional-options'.
* gcc.dg/analyzer/strchr-1.c: Fix 'dg-message' whitespace.
* gnat.dg/sso/q11.adb: Fix 'dg-output' whitespace.

4 months agotestsuite: fix typos in comments
Sam James [Thu, 27 Mar 2025 13:23:23 +0000 (13:23 +0000)] 
testsuite: fix typos in comments

This fixes some 'scan-tree-dump-times' (vs '-time') typos and one or
two others I noticed in passing.

gcc/testsuite/ChangeLog:

* g++.dg/warn/Winvalid-memory-model.C: Fix typo in comment.
* gcc.dg/builtin-dynamic-object-size-19.c: Ditto.
* gcc.dg/builtin-object-size-19.c: Ditto.
* gcc.dg/strlenopt-40.c: Ditto.
* gcc.dg/strlenopt-44.c: Ditto.
* gcc.dg/strlenopt-45.c: Ditto.
* gcc.dg/strlenopt-50.c: Ditto.
* gcc.dg/strlenopt-51.c: Ditto.
* gcc.dg/strlenopt-52.c: Ditto.
* gcc.dg/strlenopt-53.c: Ditto.
* gcc.dg/strlenopt-54.c: Ditto.
* gcc.dg/strlenopt-55.c: Ditto.
* gcc.dg/strlenopt-58.c: Ditto.
* gcc.dg/strlenopt-59.c: Ditto.
* gcc.dg/strlenopt-62.c: Ditto.
* gcc.dg/strlenopt-65.c: Ditto.
* gcc.dg/strlenopt-70.c: Ditto.
* gcc.dg/strlenopt-72.c: Ditto.
* gcc.dg/strlenopt-73.c: Ditto.
* gcc.dg/strlenopt-77.c: Ditto.
* gcc.dg/strlenopt-82.c: Ditto.
* gcc.dg/tree-ssa/builtin-snprintf-4.c: Ditto.
* gcc.dg/tree-ssa/builtin-snprintf-6.c: Ditto.
* gcc.dg/tree-ssa/builtin-snprintf-7.c: Ditto.
* gcc.dg/tree-ssa/builtin-sprintf-10.c: Ditto.
* gcc.dg/tree-ssa/builtin-sprintf-9.c: Ditto.
* gcc.dg/tree-ssa/phi-opt-value-5.c: Ditto.
* lib/multiline.exp: Ditto.
* lib/target-supports.exp: Ditto.

4 months agotestsuite: harmless dg-* whitespace fixes
Sam James [Thu, 27 Mar 2025 13:19:51 +0000 (13:19 +0000)] 
testsuite: harmless dg-* whitespace fixes

These just fix inconsistent/unusual style to avoid noise when grepping
and also people picking up bad habits when they see it (as similar
mistakes can be harmful).

gcc/testsuite/ChangeLog:

* c-c++-common/goacc/pr69916.c: Fix unusual whitespace in dg-*.
* g++.old-deja/g++.abi/vtable2.C: Ditto.
* g++.old-deja/g++.bugs/900330_02.C: Ditto.
* g++.old-deja/g++.bugs/900406_02.C: Ditto.
* g++.old-deja/g++.bugs/900519_13.C: Ditto.
* g++.old-deja/g++.mike/p9068.C: Ditto.
* gcc.dg/20040203-1.c: Ditto.
* gcc.dg/980502-1.c: Ditto.
* gcc.dg/ipa/ipa-sra-14.c: Ditto.
* gcc.dg/pr35468.c: Ditto.
* gcc.dg/pr82597.c: Ditto.
* gcc.dg/tree-ssa/phi-opt-7.c: Ditto.
* gfortran.dg/assumed_charlen_in_main.f90: Ditto.
* gfortran.dg/cray_pointers_2.f90: Ditto.

4 months agoOpenMP: Fix C++ template handling with append_args' prefer_type modifier
Tobias Burnus [Thu, 27 Mar 2025 13:09:20 +0000 (14:09 +0100)] 
OpenMP: Fix C++ template handling with append_args' prefer_type modifier

It is possible but not very sensible to use C++ templates with in the
prefer_type modifier to the 'append_args' clause of 'declare variant'.

The commit r15-6336-g12dd892b1a3ad7 added substitution support in pt.cc,
but missed to update afterward the actual data in decl.cc.
As gimplification support was only added in r15-8898-gf016ee89955ab4,
this could not be tested back then. The latter commit added a sorry
for it gimplify.cc and the existing testcase, which this commit now removes.

gcc/cp/ChangeLog:

* cp-tree.h (cp_finish_omp_init_prefer_type): Add.
* decl.cc (omp_declare_variant_finalize_one): Call it.
* pt.cc (tsubst_attribute): Minor rebustification for OpenMP
append_args handling.
* semantics.cc (cp_omp_init_prefer_type_update): Rename to ...
(cp_finish_omp_init_prefer_type): ... this; remove static attribute
and return modified tree. Move clause handling to ...
(finish_omp_clauses): ... the caller.

gcc/ChangeLog:

* gimplify.cc (modify_call_for_omp_dispatch): Remove sorry.

gcc/testsuite/ChangeLog:

* g++.dg/gomp/append-args-1.C: Remove expected dg-sorry.
* g++.dg/gomp/append-args-8.C: New test.

4 months agolibstdc++: re-bump the feature-test macro for P2562R1 [PR119488]
Giuseppe D'Angelo [Thu, 27 Mar 2025 11:48:26 +0000 (12:48 +0100)] 
libstdc++: re-bump the feature-test macro for P2562R1 [PR119488]

Now that the algorithms have been merged we can advertise full support
for P2562R1. This effectively reverts r15-8933-ga264c270fde292.

libstdc++-v3/ChangeLog:

PR libstdc++/119488
* include/bits/version.def (constexpr_algorithms): Bump
the feature-testing macro.
* include/bits/version.h: Regenerate.
* testsuite/25_algorithms/cpp_lib_constexpr.cc: Test the
bumped value for the feature-testing macro.

4 months agolibstdc++: add constexpr stable_partition
Giuseppe D'Angelo [Fri, 14 Mar 2025 23:15:36 +0000 (00:15 +0100)] 
libstdc++: add constexpr stable_partition

This completes the implementation of P2562R1 for C++26.

Unlike the other constexpr algorithms of the same family,
stable_partition does not have a constexpr-friendly version "ready to
use" during constant evaluation. In fact, it is not even available on
freestanding, because it always allocates a temporary memory buffer.

This commit implements the simplest possible strategy: during constant
evaluation allocate a buffer of length 1 on the stack, and use that as
a working area.

libstdc++-v3/ChangeLog:

* include/bits/algorithmfwd.h (stable_partition): Mark it
as constexpr for C++26.
* include/bits/ranges_algo.h (__stable_partition_fn): Likewise.
* include/bits/stl_algo.h (stable_partition): Mark it as
constexpr for C++26; during constant evaluation use a new
codepath where a temporary buffer of 1 element is used.
* testsuite/25_algorithms/headers/algorithm/synopsis.cc
(stable_partition): Add constexpr.
* testsuite/25_algorithms/stable_partition/constexpr.cc: New test.

4 months agolibstdc++: add constexpr inplace_merge
Giuseppe D'Angelo [Fri, 14 Mar 2025 14:47:10 +0000 (15:47 +0100)] 
libstdc++: add constexpr inplace_merge

This commit adds support for constexpr inplace_merge, added by P2562R1
for C++26. The implementation strategy is the same as for constexpr
stable_sort: use if consteval to detect if we're in constant evaluation,
and dispatch to a suitable path (same one as freestanding).

libstdc++-v3/ChangeLog:

* include/bits/algorithmfwd.h (inplace_merge): Mark it as
constexpr for C++26.
* include/bits/ranges_algo.h (__inplace_merge_fn): Likewise.
* include/bits/stl_algo.h (inplace_merge): Mark it as constexpr;
during constant evaluation, dispatch to the non-allocating
codepath.
* testsuite/25_algorithms/headers/algorithm/synopsis.cc
(inplace_merge): Add constexpr.
* testsuite/25_algorithms/inplace_merge/constexpr.cc: New test.

4 months agoc++/modules: Handle conflicting ABI tags [PR118920]
Nathaniel Shead [Wed, 26 Mar 2025 12:43:36 +0000 (23:43 +1100)] 
c++/modules: Handle conflicting ABI tags [PR118920]

The ICE in the linked PR is caused because out_ptr_t inherits an ABI tag
in a module that it does not in the importing module.  When we try to
build a qualified 'const out_ptr_t' during stream-in, we find the
existing 'const out_ptr_t' variant type that has been built, but discard
it due to having a mismatching attribute list.  This causes us to build
a new copy of this variant, and ultimately fail a checking assertion due
to this being an identical type with different TYPE_CANONICAL.

This patch adds checking that ABI tags between an imported and existing
declaration match, and errors if they are incompatible.  We make use of
'equal_abi_tags' from mangle.cc to determine if we should error; in the
case in the PR, because the ABI tag was an implicit tag that doesn't
affect name mangling, we don't need to error.  To fix the ICE we ensure
that (regardless of whether we errored or not) later processing
considers the ABI tags as equivalent.

PR c++/118920

gcc/cp/ChangeLog:

* cp-tree.h (equal_abi_tags): Declare.
* mangle.cc (equal_abi_tags): Make external, fix comparison.
(tree_string_cmp): Make internal.
* module.cc (trees_in::check_abi_tags): New function.
(trees_in::decl_value): Use it.
(trees_in::is_matching_decl): Likewise.

gcc/testsuite/ChangeLog:

* g++.dg/modules/attrib-3_a.H: New test.
* g++.dg/modules/attrib-3_b.C: New test.
* g++.dg/modules/pr118920.h: New test.
* g++.dg/modules/pr118920_a.H: New test.
* g++.dg/modules/pr118920_b.H: New test.
* g++.dg/modules/pr118920_c.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
4 months agoc++/modules: Fix tsubst of global module friend classes [PR118920]
Nathaniel Shead [Wed, 26 Mar 2025 13:23:24 +0000 (00:23 +1100)] 
c++/modules: Fix tsubst of global module friend classes [PR118920]

When doing tsubst_friend_class, we need to first check if any imported
module has already created a (hidden) declaration for the class so that
we don't end up with conflicting declarations.  Currently we do this
using DECL_MODULE_IMPORT_P, but this is not set in cases where the class
is in the global module and matches an existing GM declaration we've
seen (via an include, for example).

This patch fixes this by checking DECL_MODULE_ENTITY_P instead, which is
set on all entities that have been seen from a module import.  We also
use the 'for_mangle' version of get_originating_module so that we don't
treat imported GM entities as attached to the module we imported them
from.  And rename that parameter to something more general.

And dump_module_suffix is another place where we want to treat global module
entities as not coming from a module.

PR c++/118920

gcc/cp/ChangeLog:

* name-lookup.cc (lookup_imported_hidden_friend): Check for
module entity rather than just module import.
* module.cc (get_originating_module): Rename for_mangle parm to
global_m1.
* error.cc (dump_module_suffix): Don't decorate global module decls.

gcc/testsuite/ChangeLog:

* g++.dg/modules/tpl-friend-17.h: New test.
* g++.dg/modules/tpl-friend-17_a.C: New test.
* g++.dg/modules/tpl-friend-17_b.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Co-authored-by: Jason Merrill <jason@redhat.com>
4 months agolibstdc++: Fix std::ranges::iter_move for function references [PR119469]
Jonathan Wakely [Wed, 26 Mar 2025 11:21:32 +0000 (11:21 +0000)] 
libstdc++: Fix std::ranges::iter_move for function references [PR119469]

The result of std::move (or a cast to an rvalue reference) on a function
reference is always an lvalue. Because std::ranges::iter_move was using
the type std::remove_reference_t<X>&& as the result of std::move, it was
giving the wrong type for function references. Use a decltype-specifier
with declval<remove_reference_t<X>>() instead of just using the
remove_reference_t<X>&& type directly. This gives the right result,
while still avoiding the cost of doing overload resolution for
std::move.

libstdc++-v3/ChangeLog:

PR libstdc++/119469
* include/bits/iterator_concepts.h (_IterMove::__result): Use
decltype-specifier instead of an explicit type.
* testsuite/24_iterators/customization_points/iter_move.cc:
Check results for function references.

Reviewed-by: Tomasz KamiƄski <tkaminsk@redhat.com>
4 months agoarm: don't vectorize fmaxf() unless unsafe math opts are enabled
Richard Earnshaw [Wed, 26 Mar 2025 15:56:18 +0000 (15:56 +0000)] 
arm: don't vectorize fmaxf() unless unsafe math opts are enabled

This test has presumably been failing since vectorization was enabled
at -O2.  I suspect part of the reason this wasn't picked up sooner is
that the test is a hybrid execution/scan-assembler test and the
execution part requires appropriate hardware.

The problem is that we are vectorizing an expansion of fmaxf() when
the vector version of the instruction does not preserve denormal
values.  This means we should only apply this optimization when
-funsafe-math-optimizations is enabled.

This fix does a few things:

- Moves the expand pattern to vec-common.md.  Although I haven't changed
its behaviour (beyond fixing the bug), this should really be enabled for
MVE as well (but that will need to wait for gcc-16 since the MVE code
needs some additional changes first).
- Adds support for HF mode vectors.
- splits the test that was exposing the bug into two parts: an executable
test and a scan-assembler test.  The scan-assembler version is more
widely enabled, since it does not require a suitable executable environment.

gcc/ChangeLog:

* config/arm/neon.md (<fmaxmin><mode>3): Move pattern from here...
* config/arm/vec-common.md (<fmaxmin><mode>3): ... to here.  Convert
to define_expand and disable the pattern when denormal values might
get truncated to zero.  Iterate on VF to add V4HF and V8HF variants.

gcc/testsuite/ChangeLog:

* gcc.target/arm/fmaxmin.c: Move scan-assembler checks to ...
* gcc.target/arm/fmaxmin-2.c: ... here.  New test.

4 months agoi386: Set attr "addr" as "gpr16" for constraint "jm". [PR 119425]
Hu, Lin1 [Mon, 24 Mar 2025 07:36:13 +0000 (15:36 +0800)] 
i386: Set attr "addr" as "gpr16" for constraint "jm". [PR 119425]

"jm" should with "gpr16", otherwise maybe raise ICE in reload pass.

gcc/ChangeLog:

PR target/119425
* config/i386/sse.md:
(vec_set<mode>_0): Set the alternative with constraint "jm"'s
attribute "addr" to "gpr16".
(<mask_codefor>avx512dq_shuf_<shuffletype>64x2_1<mask_name>):
Ditto.
(avx512vl_shuf_<shuffletype>32x4_1<mask_name>): Ditto.
(avx2_pblendd<mode>): Ditto.
(aesenc): Ditto.
(aesenclast): Ditto.
(aesdec): Ditto.
(aesdeclast): Ditto.
(vaesdec_<mode>): Ditto.
(vaesdeclast_<mode>): Ditto.
(vaesenc_<mode>):: Ditto.
(vaesenclast_<mode>):: Ditto.
(aes<aesklvariant>u8): Ditto.
(*aes<aeswideklvariant>u8): Ditto.

gcc/testsuite/ChangeLog:

PR target/119425
* gcc.target/i386/pr119425.c: New test.

Co-authered-by: Hongyu Wang <hongyu.wang@intel.com>
4 months agoc: Fix tagname confusion for typedef redefinitions [PR118765]
Martin Uecker [Sun, 16 Mar 2025 09:54:17 +0000 (10:54 +0100)] 
c: Fix tagname confusion for typedef redefinitions [PR118765]

When we redefine a typedef for a tagged type that has just been
redefined, merge_decls may produce invalid TYPE_DECLS that are not
consistent with what set_underlying_type produces.  This is fixed
by updating DECL_ORIGINAL_TYPE.

PR c/118765

gcc/c/ChangeLog:
* c-decl.cc (merge_decls): For TYPE_DECLS copy
DECL_ORIGINAL_TYPE from the old declaration.
* c-typeck.cc (tagged_types_tu_compatible_p): Add
checking assertions.

gcc/testsuite/ChangeLog:
* gcc.dg/pr118765-2.c: New test.
* gcc.dg/pr118765-3.c: New test.
* gcc.dg/typedef-redecl3.c: New test.

4 months agoLoongArch: Support Q suffix for __float128.
Lulu Cheng [Sat, 22 Mar 2025 06:37:01 +0000 (14:37 +0800)] 
LoongArch: Support Q suffix for __float128.

In r14-3635 supports `__float128`, but does not support the 'q/Q' suffix.

PR target/119408

gcc/ChangeLog:

* config/loongarch/loongarch.cc
(loongarch_c_mode_for_suffix): New.
(TARGET_C_MODE_FOR_SUFFIX): Define.

gcc/testsuite/ChangeLog:

* gcc.target/loongarch/pr119408.c: New test.

4 months agoOpenMP: Fix declaration in append-args-interop.c test case
Sandra Loosemore [Thu, 27 Mar 2025 00:59:37 +0000 (00:59 +0000)] 
OpenMP: Fix declaration in append-args-interop.c test case

I ran into this while backporting my declare variant/dispatch/interop
patch f016ee89955ab4da5fe7ef89368e9437bb5ffb13 to the og14 development
branch.  In C dialects prior to C23 (the default on mainline),
functions declared "float f()" and "float g(void)" aren't considered
equivalent for the purpose of the C front end code that checks whether
a type of a variant matches the base function after accounting for the
added interop arguments.  Using "(void)" instead of "()" works in all
C dialects as well as C++, so do that.

gcc/testsuite/ChangeLog
* c-c++-common/gomp/append-args-interop.c: Fix declaration of base
function to be correct for pre-C23 dialects.

4 months agotestsuite: fixup tree scan syntax for strub-internal-pr112938.C
Sam James [Thu, 27 Mar 2025 01:25:40 +0000 (01:25 +0000)] 
testsuite: fixup tree scan syntax for strub-internal-pr112938.C

This wasn't being run before my r15-8949-g6b21f7969241cf so went unnoticed.

Match [0-9+] instead of [0-9][0-9] and escape the parentheses around 'D'.

gcc/testsuite/ChangeLog:
PR testsuite/119489

* g++.dg/strub-internal-pr112938.C: Adjust pattern.

4 months agotestsuite: assorted targets: add missing braces to dg-* directives
Sam James [Thu, 27 Mar 2025 00:38:10 +0000 (00:38 +0000)] 
testsuite: assorted targets: add missing braces to dg-* directives

These get ignored otherwise.

gcc/testsuite/ChangeLog:

* gcc.target/arc/taux-1.c: Add missing brace.
* gcc.target/arc/taux-2.c: Ditto.
* gcc.target/i386/addr-space-1.c: Ditto.
* gcc.target/ia64/mfused-madd-vect.c: Ditto.
* gcc.target/ia64/mfused-madd.c: Ditto.
* gcc.target/ia64/mno-fused-madd-vect.c: Ditto.
* gcc.target/ia64/mno-fused-madd.c: Ditto.
* gcc.target/riscv/rvv/autovec/vls-vlmax/merge-4.c: Ditto.
* gcc.target/riscv/rvv/autovec/vls/merge-4.c: Ditto.
* gcc.target/s390/target-attribute/tattr-1.c: Ditto.
* gcc.target/s390/target-attribute/tattr-2.c: Ditto.

4 months agotestsuite: fix more dg-* whitespace issues
Sam James [Thu, 27 Mar 2025 00:32:23 +0000 (00:32 +0000)] 
testsuite: fix more dg-* whitespace issues

A handful of cosmetic ones in here but most meant the directive wasn't
doing anything.

gcc/testsuite/ChangeLog:
PR target/98743
PR tree-optimization/105820

* g++.dg/cpp0x/udlit-namespace-ambiguous.C: Fix whitespace.
* g++.dg/cpp2a/constexpr-init21.C: Ditto.
* g++.dg/diagnostic/wrong-tag-1.C: Ditto.
* g++.dg/init/self1.C: Ditto.
* g++.dg/opt/pr98743.C: Add missing '}' to terminate dg directive.
* g++.dg/parse/error8.C: Fix whitespace.
* g++.dg/template/explicit-args6.C: Add missing '{' to begin dg directive.
* g++.dg/template/unify9.C: Fix whitespace.
* g++.dg/tree-ssa/pr105820.C: Ditto.
* g++.dg/warn/Wmismatched-tags-8.C: Add missing braces.
* gcc.dg/cpp/cmdlne-dM-M.c: Ditto.
* gcc.dg/tree-ssa/reassoc-32.c: Ditto.
* gcc.dg/tree-ssa/reassoc-33.c: Ditto.
* gcc.dg/tree-ssa/reassoc-34.c: Ditto.
* gcc.dg/tree-ssa/reassoc-35.c: Ditto.
* gcc.dg/tree-ssa/reassoc-36.c: Ditto.
* gcc.dg/tree-ssa/reassoc-39.c: Ditto.
* gcc.dg/tree-ssa/reassoc-41.c: Ditto.

4 months agotestsuite: fix dg-message typos
Sam James [Fri, 2 Aug 2024 05:37:04 +0000 (06:37 +0100)] 
testsuite: fix dg-message typos

gcc/testsuite/ChangeLog:

* g++.dg/diagnostic/unclosed-extern-c.C: Fix 'dg-message' typo.
* g++.dg/warn/Wno-attributes-1.C: Ditto.

4 months agotestsuite: more (mostly cosmetic) dg- whitespace fixes
Sam James [Thu, 27 Mar 2025 00:21:43 +0000 (00:21 +0000)] 
testsuite: more (mostly cosmetic) dg- whitespace fixes

Some of these are harmless but still inconsistent (and asking for trouble
given it may give people the wrong idea about similar "style").

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/gen-attrs-6.C: Surround 'target' by whitespace.
* gcc.target/aarch64/atomic-inst-ldlogic.c: Fix 'dg-final' whitespace.
* gcc.target/arm/short-vfp-1.c: Ditto.
* gcc.target/bfin/l2.c: Fix 'dg-bfin-processors' whitespace.
* gcc.target/i386/avx512fp16-vmovw-1b.c: Surround 'target' by whitespace.
* gcc.target/i386/sse2-float16-5.c: Ditto.
* gcc.target/powerpc/fold-vec-perm-longlong.c: Ditto.

4 months agotestsuite: fix dg-bogus typo
Sam James [Thu, 31 Oct 2024 02:52:41 +0000 (02:52 +0000)] 
testsuite: fix dg-bogus typo

The dg-bogus directive here is trying to match -Warray-bounds or
-Wstringop-overflow, but it got the casing wrong on the latter.

gcc.dg/pr89350.c gets this right.

gcc/testsuite/ChangeLog:
PR middle-end/93437

* g++.dg/warn/Wstringop-overflow-5.C: Fix -Wstringop-overflow casing.