[comp.unix.xenix] Wierdness in SCO 386 'cc' -O option

trebor@biar.UUCP (Robert J Woodhead) (03/13/89)

Ran into a wierd problem this weekend when I tried to use the -Ox compiler
option.  Previously, I was using -O, which optimizes for speed.  -Ox
does this, plus 'Reduces restrictions on aliases' (?), 'eliminates common
subexpressions' and 'loop optimizations'.

Consider the following fragment, from a project I am writing (no "you
could write this easier", this was actually one of the first 'c' programs
I ever wrote, being a pascaholic, etc, etc):

   i=0;

   i=i || ( (c1=='U') && (c2=='I') );
   i=i || ( (c1=='A') && (c2=='C') );
   i=i || ( (c1=='B') && (c2=='I') );
   i=i || ( (c1=='C') && (c2=='H') );
   i=i || ( (c1=='A') && (c2=='L') );
   i=i || ( (c1=='L') && (c2=='O') );
   i=i || ( (c1=='X') && (c2=='B') );

The meaning is clear; if c1&c2 are UI, AC, BI, CH, AL, LO or XB, i
should be set to TRUE (nonzero).  If not, FALSE (zero).

And, when compiled with the -O option, this is the case.  It works
fine.  But when compiled with -Ox it breaks.  It returns TRUE no
matter what c1 and c2 are!

This is with SCO Xenix System V 2.2.4 for the Tandy 4000.

I assume there is a middling chance that the problem is a subtle (or
not so subtle) point about C and logical expressions that I have
missed, but either way, I'd like to know what's going on so I don't
go through the agonizing trackdown process again.

-- 
* Robert J Woodhead * The true meaning of life is cunningly encrypted and *
* uunet!biar!trebor * hidden somewhere in this signature...               *
* Biar Games, Inc.  *                       ...no, go back and look again *