summaryrefslogtreecommitdiff
path: root/src/lib/libssl/src/bugs/ultrixcc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/src/bugs/ultrixcc.c')
-rw-r--r--src/lib/libssl/src/bugs/ultrixcc.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/lib/libssl/src/bugs/ultrixcc.c b/src/lib/libssl/src/bugs/ultrixcc.c
new file mode 100644
index 0000000000..7ba75b140f
--- /dev/null
+++ b/src/lib/libssl/src/bugs/ultrixcc.c
@@ -0,0 +1,45 @@
1#include <stdio.h>
2
3/* This is a cc optimiser bug for ultrix 4.3, mips CPU.
4 * What happens is that the compiler, due to the (a)&7,
5 * does
6 * i=a&7;
7 * i--;
8 * i*=4;
9 * Then uses i as the offset into a jump table.
10 * The problem is that a value of 0 generates an offset of
11 * 0xfffffffc.
12 */
13
14main()
15 {
16 f(5);
17 f(0);
18 }
19
20int f(a)
21int a;
22 {
23 switch(a&7)
24 {
25 case 7:
26 printf("7\n");
27 case 6:
28 printf("6\n");
29 case 5:
30 printf("5\n");
31 case 4:
32 printf("4\n");
33 case 3:
34 printf("3\n");
35 case 2:
36 printf("2\n");
37 case 1:
38 printf("1\n");
39#ifdef FIX_BUG
40 case 0:
41 ;
42#endif
43 }
44 }
45