mirror of https://github.com/openssl/openssl.git
				
				
				
			
		
			
				
	
	
		
			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
 | 
						|
		}
 | 
						|
	}
 |