[gnu.gcc.bug] Bug in gcc version 1.27

jayaram@SUN.COM (Jayaram Kalpathy) (06/10/89)

/* From: Jayaram Kalpathy      oliveb!cirrusl!jayaram@sun.com */

#include <stdio.h>

/* try running with > echo hello | a.out */
    
main() {
    int i = 0;
    while (i != EOF) {
	i = getchar();
	printf("(%c %d)", i, i);
    }
}

/* ---------------------------------------------------------

 Bug: generates erroneous assembly code. The following two similar cases
      generate correct code:

    1. Change "int i.." to "char i.."
    2. Change the while line and the next to:
         while ((i = getchar()) != EOF)


 Here's what the assembly code looks like:

#NO_APP
.text
LC0:
	.ascii "(%c %d)\0"
	.even
.globl _main
_main:
	link a6,#-4
	clrl a6@(-4)
L2:
	moveq #-1,d1
	cmpl a6@(-4),d1
	jeq L3
	subql #1,__iob
	tstl __iob
	jlt L4
	movel __iob+4,a0
	moveb a0@,d0
	clrl a6@(-4)
	movel a6@(-4),d1
	moveb d0,d1
	movel d1,d1
                             ## needs a line: movel d1,a6@(-4)  here
	addql #1,__iob+4
	jra L5
L4:
	pea __iob
	jbsr __filbuf
	addqw #4,sp
	movel d0,a6@(-4)
L5:
	movel a6@(-4),sp@-
	movel a6@(-4),sp@-
	pea LC0
	jbsr _printf
	addw #12,sp
	jra L2
L3:
L1:
	unlk a6
	rts

------------------------------------------------------------- */