[net.bugs] some bugs in Vax Tartan C compiler

wls@astrovax.UUCP (William L. Sebok) (01/27/85)

The following two programs illustrate two bugs I have found in the Vax Tartan C
compiler (Version CV(bsd)-1.0).

bug #1
-----------------
struct s {
	int s1;
	int s2;
} st = { 6537, 0 };

int b[] = { 123, 6537, 4567 };
int v = 2;

main() {
	if (tstbug(&st))
		printf("The bug is present.\n");
}

tstbug(ps)
	struct s *ps;
{
	int *p;
	for(p = b; p < &b[v]; p++) {
		if(*p == ps->s1) {
			if(ps->s2)
				printf("This function call seems necessary\n");
			return(0);
		}
	}
	return(1);
}
---------------------
What is happening here is that &b[v] is being evaluated into the same register
(r11) in which ps is kept.  Thus the second time around the loop when the
test should have succeeded it is actually comparing *p against
((struct s *)&b[v])->s1 rather than ps->s1.

This bug was originally found in the compilation of function onbill() in the
file hack.shk.c of the source to the game "hack" recently posted to net.sources.
The above mini-program was an attempt to find the smallest program that showed
this bug.
==============================
Bug #2
---------------
short n = 100;

main()
{
	if (++n > 100)
		n = 200;
	if (n == 101)
		printf("Bug is present.\n");
}
----------
The test is being compiled into an acbw instruction, which unfortunately
is off by one.  It is as if they thought that it would branch on less than
rather than less than or equal to as is the case.  If "n" is a char it also
shows this bug. Then the test is compiled into a acbb instruction.  However
if n is an int or a long there is no bug.  Then the test is compiled into
an aoblss instruction which actually does branch on less than. 

This bug was originally found in the compilation of function doinv() in
file hack.invent.c of the source to the game "hack" recently posted to
net.sources.  The above mini-program was an attempt to find the smallest
program that showed this bug.

Hack seems to have been an excellent workout for this compiler.  Other than
these two things I haven't had any problems so far.
-- 
Bill Sebok			Princeton University, Astrophysics
{allegra,akgua,burl,cbosgd,decvax,ihnp4,noao,princeton,vax135}!astrovax!wls