aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <oliva@adacore.com>2022-12-08 07:50:33 -0300
committerAlexandre Oliva <oliva@gnu.org>2022-12-08 07:50:33 -0300
commit4505270128ef70538ea345f292e3eb85a5369eaf (patch)
tree6e2fe6db5049c77a2ed2a812e7a51fd0faedbf43
parenta82c119b1e9e45861ac04df8736917f396e1b740 (diff)
downloadgcc-4505270128ef70538ea345f292e3eb85a5369eaf.zip
gcc-4505270128ef70538ea345f292e3eb85a5369eaf.tar.gz
gcc-4505270128ef70538ea345f292e3eb85a5369eaf.tar.bz2
[PR102706] [testsuite] -Wno-stringop-overflow vs Warray-bounds
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 seem to model the conditions under which the warnings are expected. On riscv64-elf and arm-eabi/-mcpu=cortex-r5, for example, though the Warray-bounds-48.c condition passes, we don't issue warnings. On riscv64-elf, we decide not to vectorize the assignments; on cortex-r5, we do vectorize pairs of assignments, but that doesn't yield the expected warning, even though assignments that should trigger the bogus warning are vectorized and associated with the earlier line where the bogus warning would be expected. 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 vectorizer analyses that lead to the mismatched decisions, I'm disabling the undesired warnings for these two tests. 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.
-rw-r--r--gcc/testsuite/gcc.dg/Warray-bounds-48.c11
-rw-r--r--gcc/testsuite/gcc.dg/Wzero-length-array-bounds-2.c11
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 775b301..e920314 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 2ef5ccd..19932d0 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" }