Morten Welinder  wrote on 28/06/2005 19:59:10:

> > In particular, a very large number of C and C++ programs are written
> > with the assumptions:
>
> >- signed and unsigned types are modulo, except in loop induction
> > variables where it's bad taste
>
> Well, as demonstrated by INT_MIN/-1, gcc has NEVER fulfilled such
assumptions
> on i86 and, quite likely, neither has or will any other compiler.
> The runtime
> penalty would be too big and hurt performance numbers.
>
> What I believe you can find examples of is that the more restricted claim
of
> "addition and perhaps subtraction of signed numbers is modulo" is being
> assumed.  That's cheap since (for 2-complement) signed addition is the
same
> operation as unsigned addition.
>
> Morten

This is problematic as Joe Buck has shown:
;    /* int a, b, c; */
;    if (b > 0) {
;            a = b + c;
;            int count=0;
;            for (int i = c; i <= a; i++)
;                count++;
;            some_func(count);
;    }

Can be optimized to
;    if (b > 0)
;            some_func(b+1);

Only if you assume int never overflows. Requiring operator++
to overflow will prohibit this optimization.

Reply via email to