[comp.lang.c++] Locally declared anonymous union bug

matth@tekred.CNA.TEK.COM (Matthew S. Harcourt) (03/30/89)

I don't recall seeing this in previous postings...

    It seems that cfront version 1.2.1 incorrectly declares and/or
accesses locally declared anonymous unions.  The following code
segment demonstrates the incorrect behavior.  Cfront automatically
declares an instance of the locally defined anonymous union with 
the name "_au<digit>__O<digit>"  (note the "_au<digit>_" prefix
as with other locally declared variables).  However, in the
statement which accesses a member of the union, the instance is
referenced by the name "_auto__O<digit>" (prefixed with "_auto_"
the way locally defined variable names were prefixed in previous
versions of cfront).


C++ Source code...
--------------------
void foo()
{
	union {		// local anonymous union
		int y;
		char z;
	};

	y = 1;		// access local anonymous union
}
--------------------


cfront output...
--------------------
/* <<cfront 1.2.1 2/16/87>> */
/* < foo.c */
char *_new(); char _delete(); char *_vec_new(); char _vec_delete();

char foo ()
{ 
union _C1 {	/* sizeof _C1 == 4 */

int __C1_y ;
char __C1_z ;
};
union _C1 _au1__O1 ;

_auto__O1.__C1_y = 1 ;
}
;

/* the end */
--------------------