
On 04/13/2012 03:39 AM, Daniel P. Berrange wrote:
On Fri, Apr 13, 2012 at 11:12:54AM +0200, Michal Privoznik wrote:
Since compilers are trying to optimize code they are allowed to reorder evaluation of conditions in if statement (okay, not in all cases, but they can in this one). Therefore if we do: if (stat(file, &st) == 0 && unlink(file) < 0) after compiler chews this it may get feeling that swapping order is a good idea. However, we obviously don't want to call stat() on just unlink()-ed file.
Really ? I'm not sure I believe that. IIRC in-order short-circuit evaluation is a part of the C standard. Compilers can't do any optimization which changes the order of evalation without breaking countless C programs.
I concur - NACK to this patch. Any C compiler that violates short-circuiting semantics is too severely broken to be worth working around in our code. -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org