]> git.ipfire.org Git - thirdparty/openssl.git/blob - bugs/dggccbug.c
30e07a60ea4a0d526fe96648227463db1d94492c
[thirdparty/openssl.git] / bugs / dggccbug.c
1 /* NOCW */
2 /* dggccbug.c */
3 /* bug found by Eric Young (eay@cryptsoft.com) - May 1995 */
4
5 #include <stdio.h>
6
7 /* There is a bug in
8 * gcc version 2.5.8 (88open OCS/BCS, DG-2.5.8.3, Oct 14 1994)
9 * as shipped with DGUX 5.4R3.10 that can be bypassed by defining
10 * DG_GCC_BUG in my code.
11 * The bug manifests itself by the vaule of a pointer that is
12 * used only by reference, not having it's value change when it is used
13 * to check for exiting the loop. Probably caused by there being 2
14 * copies of the valiable, one in a register and one being an address
15 * that is passed. */
16
17 /* compare the out put from
18 * gcc dggccbug.c; ./a.out
19 * and
20 * gcc -O dggccbug.c; ./a.out
21 * compile with -DFIXBUG to remove the bug when optimising.
22 */
23
24 void inc(a)
25 int *a;
26 {
27 (*a)++;
28 }
29
30 main()
31 {
32 int p=0;
33 #ifdef FIXBUG
34 int dummy;
35 #endif
36
37 while (p<3)
38 {
39 fprintf(stderr,"%08X\n",p);
40 inc(&p);
41 #ifdef FIXBUG
42 dummy+=p;
43 #endif
44 }
45 }