1998-12-21 11:00:56 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
|
2015-01-16 09:21:50 +00:00
|
|
|
/*-
|
|
|
|
* This is a cc optimiser bug for ultrix 4.3, mips CPU.
|
1998-12-21 11:00:56 +00:00
|
|
|
* What happens is that the compiler, due to the (a)&7,
|
|
|
|
* does
|
|
|
|
* i=a&7;
|
|
|
|
* i--;
|
|
|
|
* i*=4;
|
|
|
|
* Then uses i as the offset into a jump table.
|
|
|
|
* The problem is that a value of 0 generates an offset of
|
|
|
|
* 0xfffffffc.
|
|
|
|
*/
|
|
|
|
|
|
|
|
main()
|
2015-01-22 03:29:12 +00:00
|
|
|
{
|
|
|
|
f(5);
|
|
|
|
f(0);
|
|
|
|
}
|
1998-12-21 11:00:56 +00:00
|
|
|
|
|
|
|
int f(a)
|
|
|
|
int a;
|
2015-01-22 03:29:12 +00:00
|
|
|
{
|
|
|
|
switch (a & 7) {
|
|
|
|
case 7:
|
|
|
|
printf("7\n");
|
|
|
|
case 6:
|
|
|
|
printf("6\n");
|
|
|
|
case 5:
|
|
|
|
printf("5\n");
|
|
|
|
case 4:
|
|
|
|
printf("4\n");
|
|
|
|
case 3:
|
|
|
|
printf("3\n");
|
|
|
|
case 2:
|
|
|
|
printf("2\n");
|
|
|
|
case 1:
|
|
|
|
printf("1\n");
|
1998-12-21 11:00:56 +00:00
|
|
|
#ifdef FIX_BUG
|
2015-01-22 03:29:12 +00:00
|
|
|
case 0:
|
|
|
|
;
|
1998-12-21 11:00:56 +00:00
|
|
|
#endif
|
2015-01-22 03:29:12 +00:00
|
|
|
}
|
|
|
|
}
|