This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Mixed mode arithmetic - GCC 3.3.3-3 bug?


Hi,

I'm really new to this - hope this is the right place to post this:

Can somebody please explain how this program:

main()
{
short DDN;
short FORTYTHOU = 40000;

printf("Integer Subtraction\n");
DDN = FORTYTHOU;
printf("DDN = %d\n", DDN);
DDN = DDN - 10000;
printf("DDN = %d\n", DDN);

printf("Real Subtraction\n");
DDN = FORTYTHOU;
printf("DDN = %d\n", DDN);
DDN = DDN - 10000.0;
printf("DDN = %d\n", DDN);
}

Gives this result with GCC 3.3.3-3 on RH9 (and also with GCC gcc-3.2.2-5):

Integer Subtraction
DDN = -25536
DDN = 30000
Real Subtraction
DDN = -25536
DDN = -32768

Whereas on Solaris9 with Forte 2 Update 6 compiler I get this (which is what
I would expect):

Integer Subtraction
DDN = -25536
DDN = 30000
Real Subtraction
DDN = -25536
DDN = 30000

Is this a bug in GCC or I am not understanding its behaviour properly ?

Thanks.

--Rick Murphy


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]