https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56955
--- Comment #12 from Paul Eggert <eggert at gnu dot org> --- (In reply to Rich Felker from comment #10) > This assumption only aids > optimization in the case where a pointer residing in the obtained memory is > used (e.g. dereferenced or compared with another pointer) before anything is > stored to it. No, it also aids optimization because GCC can infer lack of aliasing elsewhere, even if no pointer in the newly allocated memory is used-before-set. Consider the contrived example am.c (which I've added as an attachment to this report). It has two functions f and g that differ only in that f calls m which has __attribute__ ((malloc)) whereas g calls n which does not. With the weaker assumption you're suggesting, GCC could not optimize away the reload from a->next in f, because of the intervening assignment '*p = q'. I've compiled this with both GCC 4.9.0 and Clang 3.4 on x86-64 with -O2. Both compile g to essentially the same 15 instructions. Clang, which I suspect uses the weaker assumption, compiles f to 14 instructions; GCC compiles f to 11 instructions.