Path: utzoo!attcan!uunet!husc6!ukma!tut.cis.ohio-state.edu!osu-cis!att!cbnews!lvc From: lvc@cbnews.ATT.COM (Lawrence V. Cipriani) Newsgroups: comp.lang.c Subject: Does your compiler get this program right? Keywords: float, increment Message-ID: <2298@cbnews.ATT.COM> Date: 23 Nov 88 14:16:58 GMT Organization: AT&T Bell Laboratories, Columbus Lines: 69 A friend of mine found a bug in his C compiler. He found the bug on a VAX; it also exists in some 3B compilers. The compiler on this SVR3 3b2 does it right and is shown at the end. The bug was that the increment to the float pointer was happening twice; see the /* miscompiled line */ below. I suspect other pcc derived compilers get it wrong too. Larry Cipriani, AT&T Network Systems, Columbus OH, Path: att!cbnews!lvc Domain: lvc@cbnews.ATT.COM ----------------------fbug.c----------------------- float list1[30], list2[10]; main() { int i; float *f, *g; for (i = 0; i < 10; ++i) { list1[i] = (float) i; list2[i] = (float) 2 * i; } printf("List 1 is: "); pr_list(list1,10); printf("List 2 is: "); pr_list(list2,10); f = list1; g = list2; for (i = 0; i < 10; ++i) { *f++ += *g++; /* miscompiled line */ } printf("List 1 is: "); pr_list(list1,10); printf("List 2 is: "); pr_list(list2,10); } pr_list(list,num) float list[]; int num; { int i; for (i = 0; i < num; ++i) { if (i % 5 == 0) printf("\n"); printf("%7.2f\t",list[i]); } printf("\n\n"); } -------------------fbug.out------------------ List 1 is: 0.00 1.00 2.00 3.00 4.00 5.00 6.00 7.00 8.00 9.00 List 2 is: 0.00 2.00 4.00 6.00 8.00 10.00 12.00 14.00 16.00 18.00 List 1 is: 0.00 3.00 6.00 9.00 12.00 15.00 18.00 21.00 24.00 27.00 List 2 is: 0.00 2.00 4.00 6.00 8.00 10.00 12.00 14.00 16.00 18.00