[net.unix-wizards] Bug in 4.2Bsd C compiler

thomas@utah-gr.UUCP (Spencer W. Thomas) (07/16/84)

Index:	lib/ccom 4.2BSD

Description:
	When casting an unsigned bit field to a signed integer, sign extension
	is done.

Repeat-By:
	cc -S the following program.  Note the ext instructions.  Note also that
	this problem does not appear for full size unsigned ints.

main()
{
	int i;
	unsigned short j;
	struct {
		unsigned int a : 3;
	} a;

	i = a.a;
	i = (int)a.a;
	i = j;
	i = (int)j;
}
The (edited) output follows:

_main:
	extzv	$0,$3,_a,-4(fp)
	extv	$0,$3,_a,-4(fp)
	movzwl	-6(fp),-4(fp)
	movzwl	-6(fp),-4(fp)
	ret