The following bug occurs only if -O (or higher optimization) is switched on. I did not find out which of the single optimization switches is responsible for it. The complete if statement is true, although none of each boolean value is true. If I replace the enum variable "Type" by an int, the code works correct even with optimization. Please let me know if this bug is already known or even fixed.
Compiler: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls Thread model: posix gcc version 3.4.1 System (uname -a) SunOS sun2 5.9 Generic_112233-12 sun4u sparc SUNW,Sun-Blade-1500 //gcc -O enumtest.cpp (has the bug) //gcc -O enumtest.cpp -lsupc++ (has the bug) //or: gcc enumtest.cpp -lsupc++ (is correct) //output is(if used -O ): //>inside //>done //output is(if not used -O ): //>done //(as I expect) #include <stdio.h> enum ETestType { e_Zero = 0 , e_One , e_Two , e_Three , e_Four }; int main () { ETestType Type= e_Four; if( ( Type == e_One ) || ( Type == e_Two ) || ( Type == e_Three ) ) { printf("inside\n"); } printf("done\n"); return 0; } David -- Summary: seems to be a bug in optimization on sparc systems. Product: gcc Version: 3.4.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: d dot obermann at callassoftware dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25014