------- Additional Comments From joseph at codesourcery dot com 2005-06-09 20:13 ------- Subject: Re: GCC should combine adjacent stdio calls
On Thu, 9 Jun 2005, dnovillo at redhat dot com wrote: > Gah, so we'll need to parse the format string then. Oh, well. We'll need to parse the format string anyway to know if there are excess arguments to the first printf which should not be printed, and if %n or operand numbers appear. For the other issues, it's the arguments to the second printf and anything else evaluated between the two printfs that matter: If anything evaluated might change the contents of the FILE * or anything pointed to therein (e.g. local buffers passed to setvbuf) then you can't merge. Effectively, any change to any object whose address might have escaped should stop merging. If anything evaluated might change what is pointed to by an argument to the first printf then you can't merge. For example, char buf[] = "abc"; printf("%s", buf); buf[0] = "d"; printf("%s", buf); cannot be merged. If an argument or anything pointed to by an argument which is dereferenced and printed (e.g. %s) might have been changed by the first printf - if its address or the address it points to could have escaped - then you can't merge. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21982