Bug report in egcs 1.1.2
Olivier Baudron
Olivier.Baudron@ens.fr
Sat Mar 20 14:55:00 GMT 1999
Ok, I can know provide a short program that show a bug in egcs (with
optimization -O2).
essai.c:
/* ----------------------- CUT HERE ---------------------------*/
#include <stdio.h>
unsigned short in_cksum(unsigned short *addr, int len) {
register int sum = 0;
unsigned short answer = 0;
register unsigned short *w = addr;
register int nleft = len;
while ( nleft > 1 ) {
sum += *w++;
nleft -= 2;
}
if ( nleft == 1 ) {
*(unsigned char *)(&answer) = *(unsigned char *)w ;
sum += answer;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
printf ("answer=%hu\n", answer);
return answer;
}
int main (int argc, char **argv) {
unsigned short
a[170]={0,0,0,0,4352,16129,50900,337,50900,64849,17152,17408,16129,26693,258,262,25564,25946,1280,0,0,0,50900,64849,50900,593,50900,337,16384,57861,30512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33379,25427,309,13826,54276,198,13126,4,7168,14880,4,3584,15120,4,6144,412,65284,65535,768,54276,20934,1537,54280,198,54338,198,3907,25357,25209,29285,24931,27746,11877,29286,1052,50900,65361,255};
unsigned short b;
b = in_cksum (a, 339);
return 0;
}
/* ----------------------- CUT HERE ----------------------------------- */
The results are:
% gcc -O2 -Wall -o essai2 essai2.c
% essai2
answer=255
% gcc -Wall -o essai2 essai2.c
% essai2
answer=0
The correct result is 0.
Olivier.
More information about the Gcc-bugs
mailing list