[gnu.gcc.bug] BUG in GCC/G++ 1.34 - unnamed fields

rfg@MCC.COM (Ron Guilmette) (03/29/89)

It is often nice that GCC/G++ have a superset of ANSI-C
features.  In this case, it is not so nice.

I recently reported in these newsgroups that GCC/G++ seem
to support the notion of "unnamed" fields, even when these
fields are *not* bitfields (as required by ANSI C).  Well
perhaps I spoke too soon.

The following program exits with a non-zero exit code because
unnamed fields can be declared but are apparently ignored by
the compiler(s) when allocating space in a structure.

I hope that this will be fixed *not* be deleting the (extension)
feature (which I find very useful) but rather by making it work
for both bitfields and non-bitfields.

----------------------------------------------------------------------
extern void printf (const char*, ...);
extern void exit (int);

int test ();
int errors = 0;

void main ()
{
	exit ( (test () || errors) ? 1 : 0);
}

struct struct_1 {
	int	;
	int	;
	int	;
	int	field1;
};

struct struct_1 structure_var;
int offset;

int test ()
{
	offset = (int) &structure_var.field1 - (int) &structure_var;
	if (offset == 12 && sizeof (struct struct_1) == 16)
		return 0;
	else
		return -1;
}
-----------------------------------------------------------------------

// Ron Guilmette  -  MCC  -  Experimental (parallel) Systems Kit Project
// 3500 West Balcones Center Drive,  Austin, TX  78759  -  (512)338-3740
// ARPA: rfg@mcc.com
// UUCP: {rutgers,uunet,gatech,ames,pyramid}!cs.utexas.edu!pp!rfg