46 lines
926 B
C
46 lines
926 B
C
|
/* 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
|
||
|
}
|
||
|
}
|