You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
962 B
45 lines
962 B
/* NOCW */ |
|
/* dggccbug.c */ |
|
/* bug found by Eric Young (eay@cryptsoft.com) - May 1995 */ |
|
|
|
#include <stdio.h> |
|
|
|
/* |
|
* There is a bug in gcc version 2.5.8 (88open OCS/BCS, DG-2.5.8.3, Oct 14 |
|
* 1994) as shipped with DGUX 5.4R3.10 that can be bypassed by defining |
|
* DG_GCC_BUG in my code. The bug manifests itself by the vaule of a pointer |
|
* that is used only by reference, not having it's value change when it is |
|
* used to check for exiting the loop. Probably caused by there being 2 |
|
* copies of the valiable, one in a register and one being an address that is |
|
* passed. |
|
*/ |
|
|
|
/*- |
|
* compare the out put from |
|
* gcc dggccbug.c; ./a.out |
|
* and |
|
* gcc -O dggccbug.c; ./a.out |
|
* compile with -DFIXBUG to remove the bug when optimising. |
|
*/ |
|
|
|
void inc(a) |
|
int *a; |
|
{ |
|
(*a)++; |
|
} |
|
|
|
main() |
|
{ |
|
int p = 0; |
|
#ifdef FIXBUG |
|
int dummy; |
|
#endif |
|
|
|
while (p < 3) { |
|
fprintf(stderr, "%08X\n", p); |
|
inc(&p); |
|
#ifdef FIXBUG |
|
dummy += p; |
|
#endif |
|
} |
|
}
|
|
|