http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56888
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |NEW AssignedTo|rguenth at gcc dot gnu.org |unassigned at gcc dot | |gnu.org --- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> 2013-04-11 11:29:39 UTC --- -fno-builtin-XXX does not prevent GCC from emitting calls to XXX. It only makes GCC not assume anything about existing calls to XXX. For example to avoid transforming printf to puts in extern int printf(const char *, ...); int main() { printf ("Hello World\n"); return 0; } it does not work to specify -fno-builtin-puts, but instead you need to provide -fno-builtin-printf. Note that -fno-builtin only prevents the C family parsers from recognizing XXX as builtin decls. The fact that -fno-builtin was specified or not cannot be queried in any way from the middle-end. I consider the inability to specify this to the GCC middle-end as bug but I am not going to work on it. The requirement to be able to generate calls to memset. memcpy and memmove is deep-rooted into code-expansion as well for aggregate init and assignment.