Bug 25014 - seems to be a bug in optimization on sparc systems.
Summary: seems to be a bug in optimization on sparc systems.
Status: RESOLVED DUPLICATE of bug 16372
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 3.4.1
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-11-24 10:29 UTC by David Obermann
Modified: 2005-11-25 20:23 UTC (History)
6 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description David Obermann 2005-11-24 10:29:51 UTC
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
Comment 1 Andrew Pinski 2005-11-25 20:23:01 UTC
This is a dup of bug 16372 which was fixed in 3.4.2.

*** This bug has been marked as a duplicate of 16372 ***