[Bug tree-optimization/92155] strlen(a) not folded after memset(a, 0, sizeof a)
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Oct 18 21:10:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92155
--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> ---
Actually, the memcpy is transformed to MEM_REF and the strlen pass knows how to
deal with a subset of those (small powers of 2). What it doesn't know how to
do yet is deal with other sizes like in the test case below:
extern char a5[5];
int g (void)
{
__builtin_memcpy (a5, (char[sizeof a5]){ }, sizeof a5);
return __builtin_strlen (a5);
}
which results in
D.1933 = {};
MEM <unsigned char[5]> [(char * {ref-all})&a5] = MEM <unsigned char[5]>
[(char * {ref-all})&D.1933];
_1 = __builtin_strlen (&a5);
and that's not folded yet either. Handling it is among the outstanding
optimizations mentioned in pr92128.
More information about the Gcc-bugs
mailing list