[gnu.gcc.bug] bug in common subexpression elimination

jhh%sprite.Berkeley.EDU@GINGER.BERKELEY.EDU (John H. Hartman) (04/05/89)

I've enclosed a file that causes cc1 to crash when compiled for the spur.
cc -O -mspur -mlong-jumps -c foo.c" will do it. I tried to
debug it but didn't get very far and decided to leave it for the
experts. I did track it down to equiv_constant() indexing the mode_size
array by a bogus value. Omitting the "-O" option avoids the problem.

John H. Hartman



--- cut here ---
# 1 "vfprintf.c"
static char rcsid[] = "$Header: /sprite/src/lib/c/stdio/RCS/vfprintf.c,v 1.5 88/10/23 15:39:51 ouster Exp $ SPRITE (Berkeley)";
# 1 "/sprite/lib/include/ctype.h"
extern int	isalnum();
extern int	isalpha();
extern int	isascii();
extern int	iscntrl();
extern int	isdigit();
extern int	isgraph();
extern int	islower();
extern int	isprint();
extern int	ispunct();
extern int	isspace();
extern int	isupper();
extern int	isxdigit();
extern int	tolower();
extern int	toupper();
extern char _ctype_bits[];
# 20 "vfprintf.c"
# 1 "/sprite/lib/include/stdio.h"
typedef int *ClientData;
typedef struct _file {
    unsigned char *lastAccess;	 
    int readCount;		 
    int writeCount;		 
    unsigned char *buffer;	 
    int bufSize;		 
    void (*readProc)();		 
    void (*writeProc)();	 
    int (*closeProc)();		 
    ClientData clientData;	 
    int status;			 
    int flags;			 
    struct _file *nextPtr;	 
} FILE;



extern FILE stdioInFile, stdioOutFile, stdioErrFile;

extern void	clearerr();
extern int	fclose();
extern FILE *	fdopen();
extern int	fflush();
extern int	fgetc();
extern char *	fgets();
extern int	fileno();
extern FILE *	fopen();
extern int	fprintf();
extern int	fputc();
extern int	fputs();
extern int	fread();
extern FILE *	freopen();
extern int	fscanf();
extern long	fseek();
extern long	ftell();
extern int	fwrite();
extern char *	gets();
extern int	getw();
extern void	perror();
extern int	printf();
extern int	puts();
extern int	putw();
extern void	rewind();
extern int	scanf();
extern void	setbuf();
extern void	setbuffer();
extern void	setlinebuf();
extern int	setvbuf();
extern char *	sprintf();
extern int	sscanf();
extern FILE *	tmpfile();
extern char *	tmpnam();
extern char *	tempnam();
extern int	ungetc();
extern int	vfprintf();
extern int	vfscanf();
extern int	vprintf();
extern char *	vsprintf();
extern void	_cleanup();
extern void	Stdio_Setup();
# 21 "vfprintf.c"
# 1 "/sprite/lib/include/stdlib.h"
extern double		atof();
extern int		atoi();
extern long int		atol();
extern double		strtod();
extern long int		strtol();
extern unsigned long	strtoul();
extern char *	alloca();
extern char *	calloc();
extern char *	malloc();
extern char *	realloc();
extern void	Mem_Bin();
extern char *	Mem_CallerPC();
extern void	Mem_DumpTrace();
extern void	Mem_PrintConfig();
extern void	Mem_PrintInUse();
extern void	Mem_PrintStats();
extern void	Mem_PrintStatsInt();
extern void	Mem_SetPrintProc();
extern void	Mem_SetTraceSizes();
extern int	Mem_Size();
# 66 "/sprite/lib/include/stdlib.h"
extern		free();
typedef struct {
    int		size;	 
    int		flags;	 
} Mem_TraceInfo;
extern int	mem_SmallMinNum;
extern int	mem_LargeMinNum;
extern int	mem_LargeMaxSize;
extern int	mem_NumAllocs;
extern int	mem_NumFrees;
typedef struct div_t {
    int quot;
    int rem;
} div_t;
typedef struct {
    long int quot;
    long int rem;
} ldiv_t;
extern int	abs();
extern div_t	div();
extern long int	labs();
extern ldiv_t	ldiv();
extern void	abort();
extern int	atexit();
extern 		exit();
extern char *	getenv();
extern void	qsort();
extern int	rand();
extern long	random();
extern void	setenv();
extern 		srand();
extern		srandom();
extern int	system();
# 22 "vfprintf.c"
# 1 "/sprite/lib/include/string.h"
extern char *	memchr();
extern int	memcmp();
extern char *	memcpy();
extern char *	memset();
extern char *	strcat();
extern char *	strchr();
extern int	strcmp();
extern char *	strcpy();
extern int	strcspn();
extern char *	strerror();
extern int	strlen();
extern char *	strncat();
extern int	strncmp();
extern char *	strncpy();
extern char *	strpbrk();
extern char *	strrchr();
extern int	strspn();
extern char *	strstr();
extern char *   strtok();
extern char	*index();
extern char	*rindex();
# 23 "vfprintf.c"
# 1 "/sprite/lib/include/spur.md/varargs.h"
struct va_struct { char regs[20]; };
typedef struct {
	int	pnt;		 
	char    *regs;		 
	char	*stack;		 
} va_list;
# 128 "/sprite/lib/include/spur.md/varargs.h"
# 24 "vfprintf.c"

static char *
CvtUtoA(i, base, buf, lengthPtr)
    register unsigned i;	 
    register int base;		 
    register char *buf;		 
    int *lengthPtr;		 
{
    register char *p;
    if (i == 0) {
	buf[0] = '0';
	buf[1] = 0;
	*lengthPtr = 1;
	return buf;
    }
    p = &buf[33 -1];
    *p = 0;
    switch (base) {
	case 2:
	    while (i != 0) {
		p -= 1;
		*p = '0' + (i & 01);
		i >>= 1;
	    }
	    break;
	case 8:
	    while (i != 0) {
		p -= 1;
		*p = '0' + (i & 07);
		i >>= 3;
	    }
	    break;
	case 16:
	    while (i !=0) {
		p -= 1;
		*p = '0' + (i & 0xf);
		if (*p > '9') {
		    *p += 'a' - '9' - 1;
		}
		i >>= 4;
	    }
	    break;
	default:
	    while (i != 0) {
		p -= 1;
		*p = '0' + (i % base);
		if (*p > '9') {
		    *p += 'a' - '9' - 1;
		}
		i /= base;
	    }
	    break;
    }
    *lengthPtr = (&buf[33 -1] - p);
    return p;
}

static int
CvtFtoA(value, numDigits, afterPoint, pointPtr, signPtr, buf)
    double value;		 
    int numDigits;		 
    int afterPoint;		 
    int *pointPtr;		 
    int *signPtr;		 
    char *buf;			 
{
    extern double modf();
    register char *p;
    double fraction, intPart;
    int i, numDigits2;
    char tmpBuf[320 ];
    if (value < 0.0) {
	*signPtr = 1 ;
	value = -value;
    } else {
	*signPtr = 0 ;
    }
    fraction = modf(value, &intPart);
    *pointPtr = 0;
    for (p = &tmpBuf[320 -1]; intPart != 0; p -= 1) {
	double tmp;
	char digit;
	tmp = modf(intPart/10.0, &intPart);
	digit = (tmp * 10.0) + .2;
	*p = digit + '0';
	*pointPtr += 1;
    }
    p++;
    for (i = 0; (i <= numDigits) && (p <= &tmpBuf[320 -1]);
	    i++, p++) {
	buf[i] = *p;
    }
    if (value == 0.0) {
	buf[0] = '0';
	i = 1;
	*pointPtr = 1;
    }
    if ((i == 0) && (fraction > 0)) {
	while (fraction < .1) {
	    fraction *= 10.0;
	    *pointPtr -= 1;
	};
    }
    numDigits2 = afterPoint + *pointPtr;
    if ((afterPoint < 0) || (numDigits2 > numDigits)) {
	numDigits2 = numDigits;
    }
    for ( ; i <= numDigits2; i++) {
	double tmp;
	char digit;
	fraction = modf(fraction*10.0, &tmp);
	digit = tmp;
	buf[i] = digit + '0';
    }
    if ((numDigits2 >= 0) && (buf[numDigits2] >= '5')) {
	for (i = numDigits2-1; ; i--) {
	    if (i < 0) {
		int j;
		for (j = numDigits2; j > 0; j--) {
		    buf[j] = buf[j-1];
		}
		if (numDigits2 < numDigits) {
		    numDigits2++;
		}
		(*pointPtr)++;
		buf[0] = '1';
		break;
	    }
	    buf[i] += 1;
	    if (buf[i] <= '9') {
		break;
	    }
	    buf[i] = '0';
	}
    }
    if (numDigits2 <= 0) {
	numDigits2 = 0;
	*pointPtr = -afterPoint;
    }
    buf[numDigits2] = 0;
    return numDigits2;
}

int
vfprintf(stream, format, args)
    register FILE *stream;	 
    register char *format;	 
    va_list args;		 
{
    int leftAdjust;		 
    int minWidth;		 
    int precision;		 
    int altForm;		 
    register char c;		 
    char pad;			 
    char buf[320 +10];
    char expBuf[33 ];
    char *prefix;		 
    register char *field;	 
    int actualLength;		 
    int point;			 
    int sign;			 
    int i, tmp;
    int charsPrinted = 0;	 
    char *end;
    for (c = *format; c != 0; format++, c = *format) {
	if (c != '%') {
	    (((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc(c,  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = c)) ;
	    charsPrinted += 1;
	    continue;
	}
	leftAdjust	= 0 ;
	pad		= ' ';
	minWidth	= 0;
	precision	= -1;
	altForm		= 0 ;
	prefix		= "";
	format++;  
	c = *format;
	while (1 ) {
	    if (c == '-') {
		leftAdjust = 1 ;
	    } else if (c == '0') {
		pad = '0';
	    } else if (c == '#') {
		altForm = 1 ;
	    } else {
		break;
	    }
	    format++;
	    c = *format;
	}
	if (((_ctype_bits+1)[c] & 0x04 ) ) {
	    minWidth = strtoul(format, &end, 10);
	    format = end;
	    c = *format;
	} else if (c == '*') {
	    minWidth = ({   int va_result; if ((args).pnt >= 20) { va_result = *( ( int *) ((args).stack + (args).pnt - 20)); (args).pnt += (sizeof( int) + 7) & ~7; } else if ((args).pnt + sizeof( int) > 20) { va_result = * ( int *) (args).stack; (args).pnt = 20 + ( (sizeof( int) + 7) & ~7); } else if (sizeof( int) == 8) { union {double d; int i[2];} u; u.i[0] = *(int *) ((args).regs + (args).pnt); u.i[1] = *(int *) ((args).regs + (args).pnt + 4); va_result = * ( int *) &u; (args).pnt += 8; } else { va_result = *

 ( int *) ((args).regs + (args).pnt); (args).pnt += (sizeof( int) + 3) & ~3; } va_result; }) ;
	    format++; 
	    c = *format;
	}
	if (c == '.') {
	    format++; 
	    c = *format;
	}
	if (((_ctype_bits+1)[c] & 0x04 ) ) {
	    precision = strtoul(format, &end, 10);
	    format = end;
	    c = *format;
	} else if (c == '*') {
	    precision = ({   int va_result; if ((args).pnt >= 20) { va_result = *( ( int *) ((args).stack + (args).pnt - 20)); (args).pnt += (sizeof( int) + 7) & ~7; } else if ((args).pnt + sizeof( int) > 20) { va_result = * ( int *) (args).stack; (args).pnt = 20 + ( (sizeof( int) + 7) & ~7); } else if (sizeof( int) == 8) { union {double d; int i[2];} u; u.i[0] = *(int *) ((args).regs + (args).pnt); u.i[1] = *(int *) ((args).regs + (args).pnt + 4); va_result = * ( int *) &u; (args).pnt += 8; } else { va_result = 

* ( int *) ((args).regs + (args).pnt); (args).pnt += (sizeof( int) + 3) & ~3; } va_result; }) ;
	    format++; 
	    c = *format;
	}
	if (c == 'l') {			 
	    format++; 
	    c = *format;
	}
	field = buf;
	actualLength = 0;
	switch (c) {
	    case 'D':
	    case 'd':
		i = ({   int va_result; if ((args).pnt >= 20) { va_result = *( ( int *) ((args).stack + (args).pnt - 20)); (args).pnt += (sizeof( int) + 7) & ~7; } else if ((args).pnt + sizeof( int) > 20) { va_result = * ( int *) (args).stack; (args).pnt = 20 + ( (sizeof( int) + 7) & ~7); } else if (sizeof( int) == 8) { union {double d; int i[2];} u; u.i[0] = *(int *) ((args).regs + (args).pnt); u.i[1] = *(int *) ((args).regs + (args).pnt + 4); va_result = * ( int *) &u; (args).pnt += 8; } else { va_result = * ( int *) 

((args).regs + (args).pnt); (args).pnt += (sizeof( int) + 3) & ~3; } va_result; }) ;
		if (i < 0) {
		    prefix = "-";
		    i = -i;
		    actualLength = 1;
		}
		field = CvtUtoA((unsigned) i, 10, buf, &tmp);
		actualLength += tmp;
		break;
	    case 'O':
	    case 'o':
		i = ({   int va_result; if ((args).pnt >= 20) { va_result = *( ( int *) ((args).stack + (args).pnt - 20)); (args).pnt += (sizeof( int) + 7) & ~7; } else if ((args).pnt + sizeof( int) > 20) { va_result = * ( int *) (args).stack; (args).pnt = 20 + ( (sizeof( int) + 7) & ~7); } else if (sizeof( int) == 8) { union {double d; int i[2];} u; u.i[0] = *(int *) ((args).regs + (args).pnt); u.i[1] = *(int *) ((args).regs + (args).pnt + 4); va_result = * ( int *) &u; (args).pnt += 8; } else { va_result = * ( int *) 

((args).regs + (args).pnt); (args).pnt += (sizeof( int) + 3) & ~3; } va_result; }) ;
		if (altForm && (i != 0)) {
		    prefix = "0";
		    actualLength = 1;
		}
		field = CvtUtoA((unsigned) i, 8, buf, &tmp);
		actualLength += tmp;
		break;
	    case 'X':
	    case 'x':
		i = ({   int va_result; if ((args).pnt >= 20) { va_result = *( ( int *) ((args).stack + (args).pnt - 20)); (args).pnt += (sizeof( int) + 7) & ~7; } else if ((args).pnt + sizeof( int) > 20) { va_result = * ( int *) (args).stack; (args).pnt = 20 + ( (sizeof( int) + 7) & ~7); } else if (sizeof( int) == 8) { union {double d; int i[2];} u; u.i[0] = *(int *) ((args).regs + (args).pnt); u.i[1] = *(int *) ((args).regs + (args).pnt + 4); va_result = * ( int *) &u; (args).pnt += 8; } else { va_result = * ( int *) 

((args).regs + (args).pnt); (args).pnt += (sizeof( int) + 3) & ~3; } va_result; }) ;
		field = CvtUtoA((unsigned) i, 16, buf, &actualLength);
		if (altForm) {
		    char *p;
		    if (c == 'X') {
			if (i != 0) {
			    prefix = "0X";
			    actualLength += 2;
			}
			for (p = field; *p != 0; p++) {
			    if (*p >= 'a') {
				*p += 'A' - 'a';
			    }
			}
		    } else if (i != 0) {
			prefix = "0x";
			actualLength += 2;
		    }
		}
		break;
	    case 'U':
	    case 'u':
		field = CvtUtoA(({   unsigned va_result; if ((args).pnt >= 20) { va_result = *( ( unsigned *) ((args).stack + (args).pnt - 20)); (args).pnt += (sizeof( unsigned) + 7) & ~7; } else if ((args).pnt + sizeof( unsigned) > 20) { va_result = * ( unsigned *) (args).stack; (args).pnt = 20 + ( (sizeof( unsigned) + 7) & ~7); } else if (sizeof( unsigned) == 8) { union {double d; int i[2];} u; u.i[0] = *(int *) ((args).regs + (args).pnt); u.i[1] = *(int *) ((args).regs + (args).pnt + 4); va_result = * ( unsigned *) &

u; (args).pnt += 8; } else { va_result = * ( unsigned *) ((args).regs + (args).pnt); (args).pnt += (sizeof( unsigned) + 3) & ~3; } va_result; }) , 10, buf,
			&actualLength);
		break;
	    case 's':
		field = ({   char * va_result; if ((args).pnt >= 20) { va_result = *( ( char * *) ((args).stack + (args).pnt - 20)); (args).pnt += (sizeof( char *) + 7) & ~7; } else if ((args).pnt + sizeof( char *) > 20) { va_result = * ( char * *) (args).stack; (args).pnt = 20 + ( (sizeof( char *) + 7) & ~7); } else if (sizeof( char *) == 8) { union {double d; int i[2];} u; u.i[0] = *(int *) ((args).regs + (args).pnt); u.i[1] = *(int *) ((args).regs + (args).pnt + 4); va_result = * ( char * *) &u; (args).pnt += 8; } el

se { va_result = * ( char * *) ((args).regs + (args).pnt); (args).pnt += (sizeof( char *) + 3) & ~3; } va_result; }) ;
		if (field == (char *) 0 ) {
		    field = "(NULL)";
		} 
		actualLength = strlen(field);
		if ((precision > 0) && (precision < actualLength)) {
		    actualLength = precision;
		}
		pad = ' ';
		break;
	    case 'c':
		buf[0] = ({   int va_result; if ((args).pnt >= 20) { va_result = *( ( int *) ((args).stack + (args).pnt - 20)); (args).pnt += (sizeof( int) + 7) & ~7; } else if ((args).pnt + sizeof( int) > 20) { va_result = * ( int *) (args).stack; (args).pnt = 20 + ( (sizeof( int) + 7) & ~7); } else if (sizeof( int) == 8) { union {double d; int i[2];} u; u.i[0] = *(int *) ((args).regs + (args).pnt); u.i[1] = *(int *) ((args).regs + (args).pnt + 4); va_result = * ( int *) &u; (args).pnt += 8; } else { va_result = * ( in

t *) ((args).regs + (args).pnt); (args).pnt += (sizeof( int) + 3) & ~3; } va_result; }) ;
		actualLength = 1;
		pad = ' ';
		break;
	    case 'F':
	    case 'f':
		if (precision < 0) {
		    precision = 6;
		} else if (precision > 320 ) {
		    precision = 320 ;
		}
		actualLength = CvtFtoA(({   double va_result; if ((args).pnt >= 20) { va_result = *( ( double *) ((args).stack + (args).pnt - 20)); (args).pnt += (sizeof( double) + 7) & ~7; } else if ((args).pnt + sizeof( double) > 20) { va_result = * ( double *) (args).stack; (args).pnt = 20 + ( (sizeof( double) + 7) & ~7); } else if (sizeof( double) == 8) { union {double d; int i[2];} u; u.i[0] = *(int *) ((args).regs + (args).pnt); u.i[1] = *(int *) ((args).regs + (args).pnt + 4); va_result = * ( double *) &u; (args)

pnt += 8; } else { va_result = * ( double *) ((args).regs + (args).pnt); (args).pnt += (sizeof( double) + 3) & ~3; } va_result; }) ,
			320 , precision, &point, &sign, field);
		if (point <= 0) {
		    actualLength += 1 - point;
		}
		if ((precision != 0) || (altForm)) {
		    actualLength += 1;
		}
		if (sign) {
		    prefix = "-";
		    actualLength += 1;
		}
		c = 'f';
		break;
	    case 'E':
	    case 'e':
		if (precision < 0) {
		    precision = 6;
		} else if (precision > 320 -1) {
		    precision = 320 -1;
		}
		(void) CvtFtoA(({   double va_result; if ((args).pnt >= 20) { va_result = *( ( double *) ((args).stack + (args).pnt - 20)); (args).pnt += (sizeof( double) + 7) & ~7; } else if ((args).pnt + sizeof( double) > 20) { va_result = * ( double *) (args).stack; (args).pnt = 20 + ( (sizeof( double) + 7) & ~7); } else if (sizeof( double) == 8) { union {double d; int i[2];} u; u.i[0] = *(int *) ((args).regs + (args).pnt); u.i[1] = *(int *) ((args).regs + (args).pnt + 4); va_result = * ( double *) &u; (args).pnt += 

8; } else { va_result = * ( double *) ((args).regs + (args).pnt); (args).pnt += (sizeof( double) + 3) & ~3; } va_result; }) , precision+1, -1,
			&point, &sign, &buf[1]);
		eFromG:
		buf[0] = buf[1];
		buf[1] = '.';
		if ((precision != 0) || (altForm)) {
		    field = buf + precision + 2;
		} else {
		    field = &buf[1];
		}
		*field = c;
	    	field++;
		point--;	 
		if (point < 0) {
		    *field = '-';
		    point = -point;
		} else {
		    *field = '+';
		}
		field++;
		if (point < 10) {
		    *field = '0';
		    field++;
		}
		strcpy(field, CvtUtoA((unsigned) point, 10, expBuf, &i));
		actualLength = (field - buf) + i;
		field = buf;
		if (sign) {
		    prefix = "-";
		    actualLength += 1;
		}
		break;
	    case 'G':
	    case 'g': {
		int eLength, fLength;
		if (precision < 0) {
		    precision = 6;
		} else if (precision > 320 -1) {
		    precision = 320 -1;
		} else if (precision == 0) {
		    precision = 1;
		}
		actualLength = CvtFtoA(({   double va_result; if ((args).pnt >= 20) { va_result = *( ( double *) ((args).stack + (args).pnt - 20)); (args).pnt += (sizeof( double) + 7) & ~7; } else if ((args).pnt + sizeof( double) > 20) { va_result = * ( double *) (args).stack; (args).pnt = 20 + ( (sizeof( double) + 7) & ~7); } else if (sizeof( double) == 8) { union {double d; int i[2];} u; u.i[0] = *(int *) ((args).regs + (args).pnt); u.i[1] = *(int *) ((args).regs + (args).pnt + 4); va_result = * ( double *) &u; (args)

pnt += 8; } else { va_result = * ( double *) ((args).regs + (args).pnt); (args).pnt += (sizeof( double) + 3) & ~3; } va_result; }) , precision,
			-1, &point, &sign, &buf[1]);
		if (!altForm) {
		    for ( ; actualLength > 1; actualLength--) {
			if (buf[actualLength] != '0') {
			    break;
			}
		    }
		}
		if ((actualLength > 1) || altForm) {
		    eLength = actualLength + 5;
		} else {
		    eLength = actualLength + 4;
		}
		if (point <= 0) {
		    fLength = actualLength + 2 - point;
		} else {
		    fLength = actualLength;
		    if (point < actualLength) {
			fLength += 1;
		    } else if (altForm) {
			fLength = point + 1;
		    } else {
			fLength = point;
		    }
		}
		if ((eLength < fLength) || (point > precision)) {
		    c += 'E' - 'G';
		    precision = actualLength-1;
		    goto eFromG;
		}
		c = 'f';
		field = &buf[1];
		actualLength = fLength;
		if (sign) {
		    prefix = "-";
		    actualLength += 1;
		}
		break;
	    }
	    case '%':
		(((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc('%',  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = '%')) ;
		charsPrinted += 1;
		goto endOfField;
	    case 0:
		return charsPrinted;
	    default:
		(((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc(c,  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = c)) ;
		charsPrinted += 1;
		goto endOfField;
	}
	if (!leftAdjust) {
	    if (pad == '0') {
		for ( ; *prefix != 0; prefix++) {
		    (((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc(*prefix,  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = *prefix)) ;
		    charsPrinted += 1;
		    actualLength--;
		    minWidth--;
		}
	    }
	    while (minWidth > actualLength) {
		(((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc(pad,  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = pad)) ;
		charsPrinted += 1;
		minWidth --;
	    }
	}
	minWidth -= actualLength;
	for ( ; *prefix != 0; prefix++) {
	    (((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc(*prefix,  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = *prefix)) ;
	    charsPrinted += 1;
	    actualLength--;
	}
	if (c == 'f') {
	    if (point <= 0) {
		if (actualLength > 0) {
		    (((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc('0',  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = '0')) ;
		    charsPrinted += 1;
		    point++;
		    actualLength--;
		}
		if (actualLength > 0) {
		    charsPrinted += 1;
		    (((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc('.',  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = '.')) ;
		    actualLength--;
		}
		while ((point <= 0) && (actualLength > 0)) {
		    (((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc('0',  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = '0')) ;
		    charsPrinted += 1;
		    point++;
		    actualLength--;
		}
	    } else {
		while ((point > 0) && (actualLength > 0)) {
		    (((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc(*field,  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = *field)) ;
		    charsPrinted += 1;
		    field++;
		    point--;
		    actualLength--;
		}
		if (actualLength > 0) {
		    (((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc('.',  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = '.')) ;
		    charsPrinted += 1;
		    actualLength--;
		}
	    }
	}
	charsPrinted += actualLength;
	for ( ; actualLength > 0; actualLength--, field++) {
	    (((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc(*field,  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = *field)) ;
        }
	while (minWidth > 0) {
	    (((( stream)->writeCount <= 1) || (( stream)->flags & 	8 )) ? fputc(' ',  stream) : (( stream)->writeCount -= 1,	( stream)->lastAccess += 1,	*( stream)->lastAccess = ' ')) ;
	    charsPrinted += 1;
	    minWidth --;
	}
	endOfField: continue;
    }
    return charsPrinted;
}