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(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org