This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Is this a gcc bug?
- To: Anshil at gmx dot net, aoliva at redhat dot com
- Subject: Re: Is this a gcc bug?
- From: dewar at gnat dot com
- Date: Fri, 12 Jan 2001 21:21:49 -0500 (EST)
- Cc: gcc at gcc dot gnu dot org
<<undefined behavior: expression may modify `x' multiple times
>>
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.