From mboxrd@z Thu Jan 1 00:00:00 1970 From: dewar@gnat.com To: Anshil@gmx.net, aoliva@redhat.com Cc: gcc@gcc.gnu.org Subject: Re: Is this a gcc bug? Date: Fri, 12 Jan 2001 18:21:00 -0000 Message-id: <20010113022149.AFA5534D80@nile.gnat.com> X-SW-Source: 2001-01/msg00836.html <> That's probably OK in practice, but it is of course a lie, at least one of omission, the sentence after the colon does represent a possible outcome. But we could also write: undefined behavior: expression may not modify x at all. Now both are equally correct semantically, though of course the first one is more likely to represent what the code does EXCEPT that clever optimizers can make all sorts of assumptions that result in strange behavior. For example: x = y[4]++ + y[j]++; the optimizer is allowed to conclude that j!=4, and to propagate this information both forwards and backwards. The backwards propagation can be especially surprising. Suppose that just before is the statement: if (j != 4) delete_system_disk(); then the compiler could in theory call delete system disk without testing the value of j at all :-) So the question is, should an error message like this try to educate, or just take the simple minded non-determinstic viewpoint. One of the things that happens as C compilers optimize more, is that people who make improper assumptions can run into serious trouble, so I think there is some argument for education here.