[Bug tree-optimization/56210] invalid -Warray-bounds warning
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Feb 5 09:15:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56210
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Keywords| |missed-optimization
Last reconfirmed| |2013-02-05
Component|middle-end |tree-optimization
AssignedTo|unassigned at gcc dot |rguenth at gcc dot gnu.org
|gnu.org |
Ever Confirmed|0 |1
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> 2013-02-05 09:14:35 UTC ---
We warn for MEM[(void *)";" + 3B]:
f ()
{
static char key[4] = "abc";
int _5;
<bb 2>:
_5 = strncmp (";", &key, 3);
if (_5 == 0)
goto <bb 3>;
else
goto <bb 4>;
<bb 3>:
__builtin_puts (&MEM[(void *)";" + 3B]);
<bb 4>:
return;
which is of course in an unexecuted block (";" is not equal to "abc").
Which points to a missed folding of the strncmp, respectively of a missed
promotion of 'key' to const.
We are cleverly optimizing away the loop as we can see it executes at
most once. CCP3 figures this out but fails to fold strncmp because
ipa-reference does not figure it is constant - it seems to not handle
builtin calls very well (puts makes it consider all vars are written to).
Also points-to computes
# PT =
p_3 = ";";
# PT = nonlocal escaped
p_9 = p_1 + 3;
# PT = nonlocal escaped
# USE = nonlocal escaped
p_7 = __builtin_strchr (p_1, 59);
# PT = nonlocal escaped
p_8 = p_7 + 1;
# PT = nonlocal escaped
# p_1 = PHI <";"(2), p_8(6)>
because strchr is not handled.
Let me have a look.
More information about the Gcc-bugs
mailing list