blob: 6239ca71396036a076533df68afa652a1e4f88c8 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim compiler file
2" Compiler: splint/lclint (C source code checker)
3" Maintainer: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
4" Splint Home: http://www.splint.org/
Bram Moolenaar8fef2ad2005-04-23 20:42:23 +00005" Last Change: 2005 Apr 21
Bram Moolenaar5c736222010-01-06 20:54:52 +01006" $Revision: 1.3 $
Bram Moolenaar071d4272004-06-13 20:20:40 +00007
8if exists("current_compiler")
9 finish
10endif
11let current_compiler = "splint"
12
13if exists(":CompilerSet") != 2 " older Vim always used :setlocal
14 command -nargs=* CompilerSet setlocal <args>
15endif
16
17let s:cpo_save = &cpo
18set cpo-=C
19
20" adapt this if you want to check more than one file at a time.
21" put command line options in .splintrc or ~/.splintrc
22CompilerSet makeprg=splint\ %
23
24" Note: when using the new array bounds checking flags: Each warning
25" usually has several lines and several references to source code mostly
26" within one or two lines (see sample warning below). The easiest way
27" not to mess up file name detection and not to jump to all positions is
28" to add something like
29" -linelen 500 +boundscompacterrormessages
30" to your .splintrc and 'set cmdheight=4' or more.
31" TODO: reliable way to distinguish file names and constraints.
32"
33" sample warning (generic):
34"
35"foo.c:1006:12: Clauses exit with var referencing local storage in one
36" case, fresh storage in other case
37" foo.c:1003:2: Fresh storage var allocated
38"
39" sample warning (bounds checking):
40"
41"bounds.c: (in function updateEnv)
42"bounds.c:10:5: Possible out-of-bounds store:
43" strcpy(str, tmp)
44" Unable to resolve constraint:
45" requires maxSet(str @ bounds.c:10:13) >= maxRead(getenv("MYENV") @
46" bounds.c:6:9)
47" needed to satisfy precondition:
48" requires maxSet(str @ bounds.c:10:13) >= maxRead(tmp @ bounds.c:10:18)
49" derived from strcpy precondition: requires maxSet(<parameter 1>) >=
50" maxRead(<parameter 2>)
51" A memory write may write to an address beyond the allocated buffer. (Use
52" -boundswrite to inhibit warning)
53
54CompilerSet errorformat=%OLCLint*m,
55 \%OSplint*m,
Bram Moolenaar8fef2ad2005-04-23 20:42:23 +000056 \%f(%l\\,%c):\ %m,
Bram Moolenaar071d4272004-06-13 20:20:40 +000057 \%*[\ ]%f:%l:%c:\ %m,
58 \%*[\ ]%f:%l:\ %m,
59 \%*[^\"]\"%f\"%*\\D%l:\ %m,
60 \\"%f\"%*\\D%l:\ %m,
61 \%A%f:%l:%c:\ %m,
62 \%A%f:%l:%m,
63 \\"%f\"\\,
64 \\ line\ %l%*\\D%c%*[^\ ]\ %m,
65 \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
66 \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
67 \%DMaking\ %*\\a\ in\ %f,
Bram Moolenaare5f258e2004-10-07 20:45:47 +000068 \%C\ %#%m
Bram Moolenaar071d4272004-06-13 20:20:40 +000069
70let &cpo = s:cpo_save
71unlet s:cpo_save