re PR tree-optimization/71433 (-Warray-bounds false positive with -O2)
2017-01-17 Richard Biener <rguenther@suse.de> PR tree-optimization/71433 * tree-vrp.c (register_new_assert_for): Merge same asserts on all incoming edges. (process_assert_insertions_for): Handle insertions at the beginning of BBs. * gcc.dg/Warray-bounds-20.c: New testcase. From-SVN: r244520
This commit is contained in:
parent
a23e48df45
commit
12314dc989
|
@ -1,3 +1,11 @@
|
||||||
|
2017-01-17 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/71433
|
||||||
|
* tree-vrp.c (register_new_assert_for): Merge same asserts
|
||||||
|
on all incoming edges.
|
||||||
|
(process_assert_insertions_for): Handle insertions at the
|
||||||
|
beginning of BBs.
|
||||||
|
|
||||||
2017-01-17 Gerald Pfeifer <gerald@pfeifer.com>
|
2017-01-17 Gerald Pfeifer <gerald@pfeifer.com>
|
||||||
|
|
||||||
* config/i386/cygwin.h (LIBGCJ_SONAME): Remove.
|
* config/i386/cygwin.h (LIBGCJ_SONAME): Remove.
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2017-01-17 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/71433
|
||||||
|
* gcc.dg/Warray-bounds-20.c: New testcase.
|
||||||
|
|
||||||
2017-01-17 Richard Biener <rguenther@suse.de>
|
2017-01-17 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR testsuite/52563
|
PR testsuite/52563
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O2 -Warray-bounds" } */
|
||||||
|
|
||||||
|
int t[1];
|
||||||
|
int fct (int r, long e)
|
||||||
|
{
|
||||||
|
int d = 0;
|
||||||
|
if (r == 4)
|
||||||
|
r = 1;
|
||||||
|
if (e < -52)
|
||||||
|
d = r == 0 ? 1 : 2;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i, n = 53;
|
||||||
|
if (__builtin_expect (e < 0, 0))
|
||||||
|
n += e;
|
||||||
|
for (i = 1 ; i < n / 64 + 1 ; i++)
|
||||||
|
t[i] = 0; /* { dg-bogus "array bounds" } */
|
||||||
|
}
|
||||||
|
return d;
|
||||||
|
}
|
|
@ -5032,6 +5032,17 @@ register_new_assert_for (tree name, tree expr,
|
||||||
loc->si = si;
|
loc->si = si;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
/* If we have the same assertion on all incoming edges of a BB
|
||||||
|
instead insert it at the beginning of it. */
|
||||||
|
if (e && loc->e
|
||||||
|
&& dest_bb == loc->e->dest
|
||||||
|
&& EDGE_COUNT (dest_bb->preds) == 2)
|
||||||
|
{
|
||||||
|
loc->bb = dest_bb;
|
||||||
|
loc->e = NULL;
|
||||||
|
loc->si = gsi_none ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update the last node of the list and move to the next one. */
|
/* Update the last node of the list and move to the next one. */
|
||||||
|
@ -6429,6 +6440,15 @@ process_assert_insertions_for (tree name, assert_locus *loc)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the stmt iterator points at the end then this is an insertion
|
||||||
|
at the beginning of a block. */
|
||||||
|
if (gsi_end_p (loc->si))
|
||||||
|
{
|
||||||
|
gimple_stmt_iterator si = gsi_after_labels (loc->bb);
|
||||||
|
gsi_insert_before (&si, assert_stmt, GSI_SAME_STMT);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
/* Otherwise, we can insert right after LOC->SI iff the
|
/* Otherwise, we can insert right after LOC->SI iff the
|
||||||
statement must not be the last statement in the block. */
|
statement must not be the last statement in the block. */
|
||||||
stmt = gsi_stmt (loc->si);
|
stmt = gsi_stmt (loc->si);
|
||||||
|
|
Loading…
Reference in New Issue