re PR tree-optimization/56273 (Bogus -Warray-bounds warning)
2015-01-27 Richard Biener <rguenther@suse.de> PR tree-optimization/56273 PR tree-optimization/59124 PR tree-optimization/64277 * tree-vrp.c (vrp_finalize): Emit array-bound warnings only from the first VRP pass. * g++.dg/warn/Warray-bounds-6.C: New testcase. * gcc.dg/Warray-bounds-12.c: Likewise. * gcc.dg/Warray-bounds-13.c: Likewise. From-SVN: r220157
This commit is contained in:
parent
4eaf52aabb
commit
f101c4b47a
6 changed files with 88 additions and 1 deletions
|
@ -1,3 +1,11 @@
|
|||
2015-01-27 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/56273
|
||||
PR tree-optimization/59124
|
||||
PR tree-optimization/64277
|
||||
* tree-vrp.c (vrp_finalize): Emit array-bound warnings only
|
||||
from the first VRP pass.
|
||||
|
||||
2015-01-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR ipa/64776
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
2015-01-27 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/56273
|
||||
PR tree-optimization/59124
|
||||
PR tree-optimization/64277
|
||||
* g++.dg/warn/Warray-bounds-6.C: New testcase.
|
||||
* gcc.dg/Warray-bounds-12.c: Likewise.
|
||||
* gcc.dg/Warray-bounds-13.c: Likewise.
|
||||
|
||||
2015-01-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/61058
|
||||
|
|
26
gcc/testsuite/g++.dg/warn/Warray-bounds-6.C
Normal file
26
gcc/testsuite/g++.dg/warn/Warray-bounds-6.C
Normal file
|
@ -0,0 +1,26 @@
|
|||
// { dg-do compile }
|
||||
// { dg-options "-O3 -Warray-bounds" }
|
||||
|
||||
struct type {
|
||||
bool a, b;
|
||||
bool get_b() { return b; }
|
||||
};
|
||||
|
||||
type stuff[9u];
|
||||
|
||||
void bar();
|
||||
|
||||
void foo()
|
||||
{
|
||||
for(unsigned i = 0u; i < 9u; i++)
|
||||
{
|
||||
if(!stuff[i].a)
|
||||
continue;
|
||||
|
||||
bar();
|
||||
|
||||
for(unsigned j = i + 1u; j < 9u; j++)
|
||||
if(stuff[j].a && stuff[j].get_b()) // { dg-bogus "above array bounds" }
|
||||
return;
|
||||
}
|
||||
}
|
26
gcc/testsuite/gcc.dg/Warray-bounds-12.c
Normal file
26
gcc/testsuite/gcc.dg/Warray-bounds-12.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 -Warray-bounds" } */
|
||||
/* { dg-additional-options "-mssse3" { target x86_64-*-* i?86-*-* } } */
|
||||
|
||||
void foo(short a[], short m)
|
||||
{
|
||||
int i, j;
|
||||
int f1[10];
|
||||
short nc;
|
||||
|
||||
nc = m + 1;
|
||||
if (nc > 3)
|
||||
{
|
||||
for (i = 0; i <= nc; i++)
|
||||
{
|
||||
f1[i] = f1[i] + 1;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0, j = m; i < nc; i++, j--)
|
||||
{
|
||||
a[i] = f1[i]; /* { dg-bogus "above array bounds" } */
|
||||
a[j] = i;
|
||||
}
|
||||
return;
|
||||
}
|
18
gcc/testsuite/gcc.dg/Warray-bounds-13.c
Normal file
18
gcc/testsuite/gcc.dg/Warray-bounds-13.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 -Warray-bounds" } */
|
||||
|
||||
extern char *bar[17];
|
||||
|
||||
int foo(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
int n = 0;
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
n++;
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
argv[i] = bar[i + n]; /* { dg-bogus "above array bounds" } */
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -10229,7 +10229,7 @@ vrp_finalize (void)
|
|||
substitute_and_fold (op_with_constant_singleton_value_range,
|
||||
vrp_fold_stmt, false);
|
||||
|
||||
if (warn_array_bounds)
|
||||
if (warn_array_bounds && first_pass_instance)
|
||||
check_all_array_refs ();
|
||||
|
||||
/* We must identify jump threading opportunities before we release
|
||||
|
|
Loading…
Add table
Reference in a new issue