Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!utgpu!water!watmath!clyde!rutgers!labrea!jade!ucbvax!BFLY-VAX.BBN.COM!aking
From: aking@BFLY-VAX.BBN.COM.UUCP
Newsgroups: comp.sys.atari.st
Subject: Alcyon C Bug N++
Message-ID: <8712051307.AA12109@ucbvax.Berkeley.EDU>
Date: Sat, 5-Dec-87 07:58:28 EST
Article-I.D.: ucbvax.8712051307.AA12109
Posted: Sat Dec  5 07:58:28 1987
Date-Received: Thu, 10-Dec-87 04:53:53 EST
Sender: daemon@ucbvax.BERKELEY.EDU
Organization: The ARPA Internet
Lines: 46

Has anybody seen the following bug in version 4.14 of Alcyon C? 

Neil: Is there a bug list for 4.14? This bug cost me 6 hours to find,
and I've found many others.  When is the next rev going to be out?
Will it fix this?

/*
 * The Alcyon C compiler (Version 4.14) gets confused with the following 
 * fragment, thinking that "y" in the assignment to F->y (line 10) is of 
 * type "struct in".
 *
 * The fault seems to require that the same names be used in the two structs,
 * and that the two seemingless senseless compound statements are present.
 * (Why put them there? Well this is boiled down from a 300+ line program
 * which exhibited the same funnyness).
 *
 * A fragment of the .s file is shown below
 */
main ()
{	register struct fl {float x, y;} *F;
	register struct in {int x, y;} *I;

	{
		{
			I += 2;
		}
		F->y = F->y - 3.0;	/* line 10 */
	}	
}

------------------------------ produces: --------------------

~I=R12						| yep, they're register based
~F=R13
*line 8
	add.l #8,R12
*line 10
	move.l #$c00000c2,-(sp)			| -3.0
	move.l $4(R13),-(sp)			| F->y
	jsr _fpadd
	addq.l #8,sp
	move.l R0,-(sp)
	jsr _fpftol				| Floating Point to Long !
	addq.l #4,sp
	move R0,$2(R13)				| offset looks like "struct in"
						|  to me