Using built-in specs. Target: i686-pc-linux-gnu Configured with: ../configure --enable-languages=c,c++,objc --prefix=/software/linux/gcc/4.0.3 Thread model: posix gcc version 4.0.3
The bug shows up with options -Os or -Ox (x >= 1). Here is the source file: main () { unsigned char t1[1]; t1[0] = 128; if (((unsigned char) (t1 [0] & 128) != 128) || ((unsigned char) (t1 [0] & 128) != 128) ) printf ("Not Ok\n"); else printf ("Ok\n"); } The bug also occurs in 3.4.6, but does not occur in 3.2.3. I have not tested it on a compiler newer than 4.0.3. -- Summary: Incorrect optimization of redundant expressions in || expression Product: gcc Version: 4.0.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: Paul dot F dot Dietz at motorola dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29023