> Am 03.12.2022 um 09:16 schrieb Alexandre Oliva via Gcc-patches 
> <gcc-patches@gcc.gnu.org>:
> 
> 
> The bogus Wstringop-overflow warnings conditionally issued for
> Warray-bounds-48.c and -Wzero-length-array-bounds-2.c are expected
> under conditions that depend on the availability of certain vector
> patterns, but that don't take cost analysis into account, which
> leads to omitted expected warnings and to unexpected warnings.
> 
> On riscv64-elf and arm-eabi/-mcpu=cortex-r5, for example, though the
> Warray-bounds-48.c condition passes, we don't issue warnings because
> we decide not to vectorize the assignments.
> 
> On riscv64, for Wzero-length-array-bounds-2.c, we issue the expected
> warning in test_C_global_buf, but we also issue a warning for
> test_C_local_buf under the same conditions, that would be expected on
> other platforms but that is not issued on them.  On
> arm-eabi/-mcpu=cortex-r5, the condition passes so we'd expect the
> warning in both functions, but we don't warn on either.
> 
> Instead of further extending the effective target tests, introduced to
> temporarily tolerate these expected bogus warnings, so as to capture
> the cost analyses that lead to the mismatched decisions, I'm disabling
> the undesired warnings for these two tests.
> 
> Regstrapping on x86_64-linux-gnu, also tested with crosses to
> riscv64-elf and arm-eabi.  Ok to install?

If it’s cost can you try-fno-vect-cost-model? If that works it might be better? 
Otherwise OK.

Richard 


> 
> for  gcc/testsuite/ChangeLog
> 
>    PR tree-optimization/102706
>    * gcc.dg/Warray-bounds-48.c: Disable -Wstringop-overflow.
>    * gcc.dg/Wzero-length-array-bounds-2.c: Likewise.
> ---
> gcc/testsuite/gcc.dg/Warray-bounds-48.c            |   11 +++++++++--
> gcc/testsuite/gcc.dg/Wzero-length-array-bounds-2.c |   11 +++++++++--
> 2 files changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/gcc/testsuite/gcc.dg/Warray-bounds-48.c 
> b/gcc/testsuite/gcc.dg/Warray-bounds-48.c
> index 775b301e37537..e9203140a274a 100644
> --- a/gcc/testsuite/gcc.dg/Warray-bounds-48.c
> +++ b/gcc/testsuite/gcc.dg/Warray-bounds-48.c
> @@ -4,6 +4,11 @@
>    { dg-options "-O2 -Wall" }
>    { dg-require-effective-target alloca } */
> 
> +/* pr102706: disabled warnings because the now-disabled conditions for the
> +   bogus warnings to come up do not take cost analysis into account, and 
> often
> +   come up wrong.  */
> +/* { dg-additional-options "-Wno-stringop-overflow" } */
> +
> typedef __INT16_TYPE__ int16_t;
> typedef __INT32_TYPE__ int32_t;
> 
> @@ -30,7 +35,8 @@ static void nowarn_ax_extern (struct AX *p)
> 
> static void warn_ax_local_buf (struct AX *p)
> {
> -  p->ax[0] = 4; p->ax[1] = 5;  // { dg-warning "\\\[-Wstringop-overflow" 
> "pr102706" { target { vect_slp_v2hi_store_align &&  { ! 
> vect_slp_v4hi_store_unalign } } } }
> +  p->ax[0] = 4; p->ax[1] = 5;  // { dg-bogus "\\\[-Wstringop-overflow" 
> "pr102706" }
> +                               //   { xfail { vect_slp_v2hi_store_align &&  
> { ! vect_slp_v4hi_store_unalign } } }
> 
>   p->ax[2] = 6;     // { dg-warning "\\\[-Warray-bounds" }
>   p->ax[3] = 7;     // { dg-warning "\\\[-Warray-bounds" }
> @@ -130,7 +136,8 @@ static void warn_a0_extern (struct A0 *p)
> 
> static void warn_a0_local_buf (struct A0 *p)
> {
> -  p->a0[0] = 4; p->a0[1] = 5;  // { dg-warning "\\\[-Wstringop-overflow" 
> "pr102706" { target { vect_slp_v2hi_store_align && { ! 
> vect_slp_v4hi_store_unalign } } } }
> +  p->a0[0] = 4; p->a0[1] = 5;  // { dg-bogus "\\\[-Wstringop-overflow" 
> "pr102706" }
> +                               //   { xfail { vect_slp_v2hi_store_align && { 
> ! vect_slp_v4hi_store_unalign } } }
> 
>   p->a0[2] = 6;     // { dg-warning "\\\[-Warray-bounds" }
>   p->a0[3] = 7;     // { dg-warning "\\\[-Warray-bounds" }
> diff --git a/gcc/testsuite/gcc.dg/Wzero-length-array-bounds-2.c 
> b/gcc/testsuite/gcc.dg/Wzero-length-array-bounds-2.c
> index 2ef5ccd564ac4..19932d05a315f 100644
> --- a/gcc/testsuite/gcc.dg/Wzero-length-array-bounds-2.c
> +++ b/gcc/testsuite/gcc.dg/Wzero-length-array-bounds-2.c
> @@ -4,6 +4,11 @@
>    { dg-do compile }
>    { dg-options "-O2 -Wall" } */
> 
> +/* pr102706: disabled warnings because the now-disabled conditions for the
> +   bogus warnings to come up do not take cost analysis into account, and 
> often
> +   come up wrong.  */
> +/* { dg-additional-options "-Wno-stringop-overflow" } */
> +
> void sink (void*);
> 
> struct A { int i; };
> @@ -87,7 +92,8 @@ void test_C_global_buf (void)
>   p->b1.a[ 1].i = 0;     // { dg-warning "\\\[-Wzero-length-bounds" }
>   sink (p);
> 
> -  p->b2.a[ 0].i = 0;    // { dg-warning "\\\[-Wstringop-overflow" "pr102706" 
> { target { vect_slp_v2si_store_align &&  { ! vect_slp_v4si_store_unalign } } 
> } }
> +  p->b2.a[ 0].i = 0;    // { dg-bogus "\\\[-Wstringop-overflow" "pr102706" }
> +                        //   { xfail { vect_slp_v2si_store_align &&  { ! 
> vect_slp_v4si_store_unalign } } }
>   p->b2.a[ 1].i = 0;
>   p->b2.a[ 2].i = 0;     // { dg-warning "\\\[-Warray-bounds" }
>   p->b2.a[ 3].i = 0;     // { dg-warning "\\\[-Warray-bounds" }
> @@ -117,7 +123,8 @@ void test_C_local_buf (void)
>   p->b1.a[ 1].i = 8;     // { dg-warning "\\\[-Wzero-length-bounds" }
>   sink (p);
> 
> -  p->b2.a[ 0].i = 9;
> +  p->b2.a[ 0].i = 9;    // { dg-bogus "\\\[-Wstringop-overflow" "pr102706" }
> +                        //   { xfail { vect_slp_v2si_store_align &&  { ! 
> vect_slp_v4si_store_unalign } } }
>   p->b2.a[ 1].i = 10;
>   p->b2.a[ 2].i = 11;    // { dg-warning "\\\[-Warray-bounds" }
>   p->b2.a[ 3].i = 12;    // { dg-warning "\\\[-Warray-bounds" }
> 
> -- 
> Alexandre Oliva, happy hacker                https://FSFLA.org/blogs/lxo/
>   Free Software Activist                       GNU Toolchain Engineer
> Disinformation flourishes because many people care deeply about injustice
> but very few check the facts.  Ask me about <https://stallmansupport.org>

Reply via email to