driver and manual page added
This commit is contained in:
		
							parent
							
								
									e66f3adc06
								
							
						
					
					
						commit
						c08c3e5cf6
					
				
					 2 changed files with 320 additions and 0 deletions
				
			
		
							
								
								
									
										166
									
								
								lang/cem/lint/lpass2/lint
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										166
									
								
								lang/cem/lint/lpass2/lint
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,166 @@ | |||
| #!/bin/sh | ||||
| # (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
| # See the copyright notice in the ACK home directory, in the file "Copyright". | ||||
| # | ||||
| # $Header$ | ||||
| 
 | ||||
| #	L I N T   D R I V E R | ||||
| 
 | ||||
| PATH=/bin:/usr/bin | ||||
| 
 | ||||
| EMLINT=/usr/dick/lint | ||||
| 
 | ||||
| LPASS1="$EMLINT/lpass1/lnt -Dmc68000" | ||||
| LPASS2="$EMLINT/lpass2/lpass2" | ||||
| LINTLIB=${LINTLIB-$EMLINT/llib} | ||||
| 
 | ||||
| TMP=/usr/tmp/lint1.$$ | ||||
| NEW=/usr/tmp/lint2.$$ | ||||
| 
 | ||||
| trap "rm -f $TMP $NEW; exit 1" 1 2 15 | ||||
| trap "rm -f $TMP $NEW; exit 0" 0 | ||||
| 
 | ||||
| set dummy $LINTFLAGS $@			# dummy as a shield for $LINTFLAGS | ||||
| shift					# remove dummy | ||||
| 
 | ||||
| LIBRARY=no | ||||
| 
 | ||||
| # get the non-library options | ||||
| while	test -n "$1" | ||||
| do | ||||
| 	case "$1" in | ||||
| 	-l*)	# library parameter; start pass 1 | ||||
| 		break | ||||
| 		;; | ||||
| 	-KR)	# strictly Kernighan & Ritchie, pass 1 | ||||
| 		PARAMS1="$PARAMS1 -R" | ||||
| 		shift | ||||
| 		;; | ||||
| 	-[DUI]*)# Define, Undef and Include; for pass 1 only | ||||
| 		PARAMS1="$PARAMS1 $1" | ||||
| 		shift | ||||
| 		;; | ||||
| 	-L*)	# make a lint library | ||||
| 		LIBRARY=`expr "$1" : '-L\(llib-l.*\)'` | ||||
| 		shift | ||||
| 		;; | ||||
| 	-*)	# for pass 1 or pass 2 | ||||
| 		PARAMS1="$PARAMS1 $1" | ||||
| 		PARAMS2="$PARAMS2 $1" | ||||
| 		shift | ||||
| 		;; | ||||
| 	*)	# input file; start pass 1 | ||||
| 		break | ||||
| 		;; | ||||
| 	esac | ||||
| done | ||||
| 
 | ||||
| case "$LIBRARY" in | ||||
| no)	# normal lint; we want its messages on stdout; this takes some doing | ||||
| 	(	# intermediate file has to go to stdout for pipe connection | ||||
| 		(	# pass 1: messages to stderr | ||||
| 			LIBC=true	# true if llib-lc to be included | ||||
| 			STATNR=0	# static scope number | ||||
| 
 | ||||
| 			for F in $* | ||||
| 			do | ||||
| 				case $F in | ||||
| 				-l)	# do NOT include llib-lc | ||||
| 					LIBC= | ||||
| 					;; | ||||
| 				-lc)	# do include llib-lc | ||||
| 					LIBC=true | ||||
| 					;; | ||||
| 				-l*)	# include special lint library | ||||
| 					cat $LINTLIB/llib$F | ||||
| 					;; | ||||
| 				*.c)	# a real C-file | ||||
| 					STATNR=` expr $STATNR + 1 ` | ||||
| 					$LPASS1 -S$STATNR -Dlint $PARAMS1 $F | ||||
| 					;; | ||||
| 				*)	# a lint library? | ||||
| 					case `basename $F` in | ||||
| 					llib-l*)	# yes, it is | ||||
| 						cat $F | ||||
| 						;; | ||||
| 					*) | ||||
| 						echo $0: unknown input $F >&2 | ||||
| 						;; | ||||
| 					esac | ||||
| 					;; | ||||
| 				esac | ||||
| 			done | ||||
| 
 | ||||
| 			case "$LIBC" in | ||||
| 			true)	# append llib-lc | ||||
| 				cat $LINTLIB/llib-lc | ||||
| 				;; | ||||
| 			esac | ||||
| 		) | | ||||
| 		sort -u | | ||||
| 		tee /tmp/\#lint.debug | | ||||
| 		(	# pass 2: divert messages to avoid interleaving | ||||
| 			$LPASS2 $PARAMS2 2>$TMP | ||||
| 		) | ||||
| 	) 2>&1				# messages pass 1 to stdout | ||||
| 
 | ||||
| 	# append messages pass 2 | ||||
| 	cat $TMP | ||||
| 	;; | ||||
| 
 | ||||
| *)	# making a lint library | ||||
| 	set -e				# stop at first sign of trouble | ||||
| 
 | ||||
| 	case $LIBRARY in | ||||
| 	llib-l*)	# OK | ||||
| 		;; | ||||
| 	*) | ||||
| 		echo "Lint library name does not start with 'llib-l'" >&2 | ||||
| 		exit 1 | ||||
| 		;; | ||||
| 	esac | ||||
| 
 | ||||
| 	if	/bin/test ! -r $LIBRARY | ||||
| 	then	cp /dev/null $LIBRARY | ||||
| 	fi | ||||
| 
 | ||||
| 	# collect pass 1 intermediate output for all input files | ||||
| 	for F in $@ | ||||
| 	do | ||||
| 		case $F in | ||||
| 		*.c)	# a C file | ||||
| 			(	echo "/* LINTLIBRARY */" | ||||
| 				echo "#line 1 \"$F\"" | ||||
| 				cat $F | ||||
| 			) >$TMP | ||||
| 			$LPASS1 $PARAMS1 -Dlint -v $TMP | ||||
| 			;; | ||||
| 		*)	# a library? | ||||
| 			case `basename $F` in | ||||
| 			llib-l*)	# yes, it is | ||||
| 				cat $F | ||||
| 				;; | ||||
| 			*) | ||||
| 				echo $0: unknown input $F >&2 | ||||
| 				;; | ||||
| 			esac | ||||
| 			;; | ||||
| 		esac | ||||
| 	done >$NEW | ||||
| 
 | ||||
| 	# get the last line for each name and sort them | ||||
| 	cat $LIBRARY $NEW | | ||||
| 	awk -F: ' | ||||
| 		{	entry[$1] = $0; | ||||
| 		} | ||||
| 	END	{	for (e in entry) {print entry[e];} | ||||
| 		} | ||||
| 	' | | ||||
| 	sort >$TMP | ||||
| 
 | ||||
| 	cp $TMP $LIBRARY | ||||
| 
 | ||||
| esac | ||||
| 
 | ||||
| rm -f $TMP $NEW | ||||
| 
 | ||||
							
								
								
									
										154
									
								
								lang/cem/lint/lpass2/lint.1
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								lang/cem/lint/lpass2/lint.1
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,154 @@ | |||
| .TH LINT 1 88/2/22 | ||||
| .SH NAME | ||||
| lint \- a C program checker | ||||
| .SH SYNOPSIS | ||||
| .B lint | ||||
| [ | ||||
| .B \-abhuvx \-KR | ||||
| ] | ||||
| [file | libname | ||||
| .BR \-l xxx | ||||
| ] ... | ||||
| .br | ||||
| .B lint | ||||
| .BR \-L libname | ||||
| [file | libname2 ] ... | ||||
| .br | ||||
| .SH DESCRIPTION | ||||
| .I Lint | ||||
| does an extensive consistency and plausibility check on a set of C | ||||
| program files. | ||||
| When it detects a doubtful construction | ||||
| (which need not be an error) it gives a warning. | ||||
| .I Lint | ||||
| does a full flow-of-control check, except that | ||||
| .BR goto s | ||||
| are not followed and non-termination of functions is not propagated. | ||||
| If, however, no | ||||
| .BR goto s | ||||
| are used, each call to a non-terminating function is followed by | ||||
| /*NOTREACHED*/ and each switch has a default clause (possibly consisting | ||||
| of /*NOTREACHED*/), the initialization state of all local variables will | ||||
| be checked correctly. | ||||
| .PP | ||||
| The second command is used to maintain lint libraries; these are ASCII files | ||||
| that contain the output of the first pass. | ||||
| A library name must start with | ||||
| .B llib\-l | ||||
| and cannot end in | ||||
| .BR .c . | ||||
| A lint user library can be created and updated by using the | ||||
| .B \-L | ||||
| option.  The | ||||
| .I libname | ||||
| must be a local file and can be passed to | ||||
| .I lint | ||||
| again as a normal argument. | ||||
| .PP | ||||
| Standard libraries are searched using the | ||||
| .B \-l | ||||
| option; their format is identical to that of the user library files. | ||||
| Possibilities are | ||||
| .BR \-lm , | ||||
| .B \-ltermcap | ||||
| and  | ||||
| .BR \-lcurses . | ||||
| .B \-lc | ||||
| is default; a single | ||||
| .B \-l | ||||
| tells | ||||
| .I lint | ||||
| not to use the standard C library. | ||||
| .PP | ||||
| The | ||||
| .BR \-D , | ||||
| .B \-U | ||||
| and | ||||
| .B \-I | ||||
| options are recognized as separate arguments.  The | ||||
| .B \-KR | ||||
| option tells | ||||
| .I lint | ||||
| to check strictly according to Kernighan & Ritchie; since | ||||
| .I lint | ||||
| is trying to be helpful rather than obnoxious, this is not the default. | ||||
| .PP | ||||
| .I Lint | ||||
| understands the following additional options: | ||||
| .TP | ||||
| .B a | ||||
| Warn about conversions that may cause a loss of precision. | ||||
| .TP | ||||
| .B b | ||||
| Do not report not-reachable  | ||||
| .I break | ||||
| statements. | ||||
| This flag may be useful when | ||||
| .I lint | ||||
| is run on a generated source file. | ||||
| .TP | ||||
| .B h | ||||
| Signal "null effects", possible pointer alignment problems and unexpected | ||||
| constructs.  Report definitions of variables that have a scope wider than | ||||
| necessary: extern variables that are used in one file only, automatic | ||||
| variables that could be more local. | ||||
| .TP | ||||
| .B u | ||||
| Do not complain about unused and undefined functions and global variables. | ||||
| .TP | ||||
| .B v | ||||
| Do not warn about unused arguments of functions. | ||||
| .TP | ||||
| .B x | ||||
| Complain about unused external variables. | ||||
| .PP | ||||
| In some cases where the programmer knows that a construction is questionable | ||||
| but nevertheless correct, a pseudo-comment can be used to silence | ||||
| .IR lint ; | ||||
| the comments recognized are: | ||||
| .TP | ||||
| /* VARARGS\fIn\fR */ | ||||
| The next function can be called with a variable number of | ||||
| arguments. | ||||
| Only check the types of the first \fIn\fR arguments. | ||||
| The \fIn\fR must follow the word VARARGS immediately. | ||||
| .TP | ||||
| /* VARARGS */ | ||||
| Same as /* VARARGS0 */ | ||||
| .TP | ||||
| /* ARGSUSED */ | ||||
| Do not warn about arguments not used in the next function | ||||
| (see also the \-\fBv\fR option). | ||||
| .TP | ||||
| /* NOTREACHED */ | ||||
| This tells | ||||
| .I lint | ||||
| that the flow of control "cannot reach" this comment. | ||||
| This is a way to tell | ||||
| .I lint | ||||
| that a statement never "returns". | ||||
| .TP | ||||
| /* LINTLIBRARY */ | ||||
| The following definitions are assumed to be part of a library. | ||||
| It suppresses complaints about unused functions and variables | ||||
| and is used in the creation of lint libraries. | ||||
| .SH FILES | ||||
| .IP ???/lnt 35 | ||||
| first pass | ||||
| .IP ???/lpass2/lpass2 | ||||
| second pass | ||||
| .IP ???/llib/llib\-l* | ||||
| lint libraries | ||||
| .SH SEE ALSO | ||||
| cem(1) | ||||
| .br | ||||
| Frans Kunst, | ||||
| .I Lint, a C Program Checker | ||||
| .SH BUGS | ||||
| Conflicting options in the command line are not detected. | ||||
| .br | ||||
| After a label, all automatic variables are assumed initialized. | ||||
| .br | ||||
| Initializations hidden inside for statements are sometimes overlooked. | ||||
| .SH AUTHOR | ||||
| Frans Kunst, Vrije Universiteit, Amsterdam. | ||||
		Loading…
	
	Add table
		
		Reference in a new issue