This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/25014] New: seems to be a bug in optimization on sparc systems.
- From: "d dot obermann at callassoftware dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 24 Nov 2005 10:29:52 -0000
- Subject: [Bug c++/25014] New: seems to be a bug in optimization on sparc systems.
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
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