http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59642
--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> --- I've noticed the same in other PRs, normally we manage to track the actual value of *p, but we don't manage that when *p was written by __builtin_mem*, which should still be doable: int f(int*p){ __builtin_memset(p,0,4); return *p; } gives the following .optimized: __builtin_memset (p_2(D), 0, 4); _4 = *p_2(D); return _4; (RTL fixes things later in this simple case)