This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: -funsafe-loop-optimizations
- From: Robert Dewar <dewar at adacore dot com>
- To: Geoffrey Keating <geoffk at geoffk dot org>
- Cc: Robert Dewar <dewar at gnat dot com>, dberlin at dberlin dot org,dje at watson dot ibm dot com, galibert at pobox dot com, gcc at gcc dot gnu dot org,rth at redhat dot com
- Date: Tue, 04 Jan 2005 22:27:05 -0500
- Subject: Re: -funsafe-loop-optimizations
- References: <20050101171307.D95EB9611@nile.gnat.com> <m2fz1kaep3.fsf@greed.local>
Geoffrey Keating wrote:
>>But how useful? I would guess that virtually 100% of such warnings would
>> be false positives, in the sense that they are not warning of situations
>> in which the standard semantics would be fine. Let's take the example
void foo (unsigned int n)
> {
> for (i = 0; i <= n; i++)
> bar ();
> }
I simply don't believe that anyone would write this code, expecting that
in the case where n was the max value, an infinite loop would occur, and
that's just what the programmer wants.
They might not expect an infinite loop, but they might very well
expect that the last case gets executed; for instance, if bar does
if (a[i] == i)
exit (0);
and 'a' happens to be an array with exactly 256 elements, and 'i' is
of type 'unsigned char'.
Yes, of course, that's the buggy case.
IMO, this kind of thing is a really slippery slope.
We are talking about warnings here, so I don't see any slippery slope
> There are
> probably hundreds of optimisations that are much easier to do if you
> just assume some apparently-trivial condition like "this procedure
> terminates
Then they are not optimizations, they are examples of wrong code!
But we are talking warnings here, so this seems an irrelevant comment
anyway