[comp.bugs.4bsd] lint2 bug +FIX

jeff@voder.UUCP (Jeff Gilliam) (05/06/88)

Subject: lint2 bug +FIX
Index:	usr.bin/lint/{Makefile,hash.c} 4.3BSD

Description:
	The 4.3 lint wastes enormous amounts of CPU time needlessly,
	because of a "broken" hashing function.  Sometime before the
	4.3 release someone reorganized the lint sources, with the
	result that most of lint gets compiled with FLEXNAMES defined,
	but hash.c gets compiled without FLEXNAMES being defined.  This
	results in a hashstr() function that always returns 0!  So,
	lint's pass2 spends most of its time in hash() searching the
	hash tables.  Pass 1 uses a slightly different hash function
	defined in a different place, and so doesn't suffer from this
	problem.

Repeat-By:
	Lint any large program.  The 4.3 kernel is handy.  Watch
	lint take a *long* time.

Fix:
	The following patches make lint2 about 10 times faster, as
	measured by linting the kernel.

RCS file: RCS/Makefile,v
retrieving revision 1.1
diff -c -r1.1 Makefile
*** /tmp/,RCSt1007336	Thu May  5 14:06:00 1988
--- Makefile	Thu May  5 13:41:24 1988
***************
*** 93,98 ****
--- 93,101 ----
  lpass2.o: $M/manifest.h lmanifest.h pcclocal.h macdefs.h
  	${CC} ${CFLAGS} -c -I$M -I. lpass2.c
  	
+ hash.o: $M/config.h
+ 	$(CC) -c $(CFLAGS) -I$M -I. hash.c
+ 
  lintall:
  	lint -hpv -I. -I$M  $M/cgram.c $M/xdefs.c $M/scan.c \
  		$M/pftn.c $M/trees.c $M/optim.c lint.c

RCS file: RCS/hash.c,v
retrieving revision 1.1
diff -c -r1.1 hash.c
*** /tmp/,RCSt1007341	Thu May  5 14:06:07 1988
--- hash.c	Thu May  5 13:38:46 1988
***************
*** 2,7 ****
--- 2,9 ----
  static char sccsid[] = "@(#)hash.c	1.1	(Berkeley)	3/29/83";
  #endif lint
  
+ #include "config.h"
+ 
  /*
   * Hash function.  Used for pass 2 symbol table and string table,
   * and structure/union name passing between passes.
-- 

Jeff Gilliam	{ucbvax,pyramid,nsc}!voder!jeff