chris@contex.UUCP (Chris Anderson) (11/22/89)
The following program, when compiled on the DecStation 3100, produces d=0, when it should be d=1: unsigned a = 2, d; int b = 1, c = 1; d = (c >= (b - a + 1)); What happens is that the whole expression is promoted to unsigned as expected, but then the comparison is changed to ">" and the +1 operation is "optimized" out. (Note, this happens even without -O). Voila! Bad code. Beware of unsigned IFs with +1 in them somewhere... Chris Anderson (contex!chris@uunet.uu.net) Xyvision, Inc.
mccoy@pixar.UUCP (Daniel McCoy) (11/23/89)
In article <473@contex.UUCP> chris@contex.UUCP (Chris Anderson) writes: >The following program, when compiled on the DecStation 3100, >produces d=0, when it should be d=1: > > unsigned a = 2, d; > int b = 1, c = 1; > > d = (c >= (b - a + 1)); ... >(Note, this happens even without -O). Voila! Bad code. It is the optimizer. The default optimization level is -O1 The program produces d=1 when compiled with -O0 to turn off all optimization. Dan McCoy Pixar {ucbvax,sun}!pixar!mccoy