Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!SUN.COM!cirrusl!jayaram From: cirrusl!jayaram@SUN.COM (Jayaram Kalpathy) Newsgroups: gnu.gcc.bug Subject: Bug in gcc version 1.27 Message-ID: <8906092340.AA12966@sun602.CIRRUSLOGIC.uucp> Date: 9 Jun 89 23:40:45 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 70 /* From: Jayaram Kalpathy oliveb!cirrusl!jayaram@sun.com */ #include /* 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 ------------------------------------------------------------- */