On 14/07/2026 19:30, Torbjörn SVENSSON wrote:
> Ok for trunk, releases/gcc-16 and releases/gcc-15?
>
> Do I need to pick this for GCC14 and GCC13 too in order to close the ticket?
>
> Kind regards,
> Torbjörn
>
> --
>
> On MVE or NEON capable targers and thumb1 targets, I see these:
>
> XPASS: gcc.dg/Wstringop-overflow-47.c pr97027 (test for warnings, line 72)
> XPASS: gcc.dg/Wstringop-overflow-47.c pr97027 (test for warnings, line 77)
> XPASS: gcc.dg/Wstringop-overflow-47.c pr97027 note (test for warnings, line
> 68)
>
> gcc/testsuite/ChangeLog:
>
> PR target/124364
> * gcc.dg/Wstringop-overflow-47.c: Remove xfail.
>
> Signed-off-by: Torbjörn SVENSSON <[email protected]>
> ---
> gcc/testsuite/gcc.dg/Wstringop-overflow-47.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/testsuite/gcc.dg/Wstringop-overflow-47.c
> b/gcc/testsuite/gcc.dg/Wstringop-overflow-47.c
> index 6fb64ae96e2..c243b26390d 100644
> --- a/gcc/testsuite/gcc.dg/Wstringop-overflow-47.c
> +++ b/gcc/testsuite/gcc.dg/Wstringop-overflow-47.c
> @@ -65,15 +65,15 @@ void warn_i16_64 (int16_t i)
> like x86_64 it's a series of BIT_FIELD_REFs. The overflow by
> the former is detected but the latter is not yet. */
>
> - extern char warn_a64[64]; // { dg-message "at offset (1|128) into
> destination object 'warn_a64' of size (63|64)" "pr97027 note" { xfail { ! {
> aarch64-*-* } } } }
> + extern char warn_a64[64]; // { dg-message "at offset (1|128) into
> destination object 'warn_a64' of size (63|64)" "pr97027 note" { xfail { ! {
> aarch64-*-* || { arm_neon || { arm_mve || arm_thumb1 } } } } } }
>
I think it's ok to write:
{ arm_neon || arm_mve || arm_thumb1 }
Rather than
{ arm_neon || { arm_mve || arm_thumb1 } }
since all the boolean operations are the same. It's only if you mix || and &&
that you need explicit nesting.
If you really wanted to avoid ambiguity, though, it might be better to write
{ aarch64*-*-* || { arm*-*-* && { arm_neon || arm_mve || arm_thumb1 } } }
since this makes it completely clear that these operators apply to the arm*
targets, not aarch64.
Otherwise, OK.
R.
> void *p = warn_a64 + 1;
> I16_64 *q = (I16_64*)p;
> - *q = (I16_64){ i }; // { dg-warning "writing (1 byte|64 bytes)
> into a region of size (0|63)" "pr97027" { xfail { ! { aarch64-*-* } } } }
> + *q = (I16_64){ i }; // { dg-warning "writing (1 byte|64 bytes)
> into a region of size (0|63)" "pr97027" { xfail { ! { aarch64-*-* || {
> arm_neon || { arm_mve || arm_thumb1 } } } } } }
>
> char a64[64];
> p = a64 + 1;
> q = (I16_64*)p;
> - *q = (I16_64){ i }; // { dg-warning "writing (1 byte|64 bytes)
> into a region of size (0|63)" "pr97027" { xfail { ! { aarch64-*-* } } } }
> + *q = (I16_64){ i }; // { dg-warning "writing (1 byte|64 bytes)
> into a region of size (0|63)" "pr97027" { xfail { ! { aarch64-*-* || {
> arm_neon || { arm_mve || arm_thumb1 } } } } } }
> sink (p);
> }