1 .\" Sparse manpage by Josh Triplett
5 sparse \- Semantic Parser for C
9 [\fIWARNING OPTIONS\fR]... \fIfile.c\fR
12 Sparse parses C source and looks for errors, producing warnings on standard
15 Sparse accepts options controlling the set of warnings to generate. To turn
16 on warnings Sparse does not issue by default, use the corresponding warning
17 option \fB\-Wsomething\fR. Sparse issues some warnings by default; to turn
18 off those warnings, pass the negation of the associated warning option,
19 \fB\-Wno\-something\fR.
24 Turn on all sparse warnings, except for those explicitly disabled via
25 \fB\-Wno\-something\fR.
28 Turn all sparse warnings into errors.
31 Warn about code which mixes pointers to different address spaces.
33 Sparse allows an extended attribute
34 .BI __attribute__((address_space( num )))
35 on pointers, which designates a pointer target in address space \fInum\fR (a
36 constant integer). With \fB\-Waddress\-space\fR, Sparse treats pointers with
37 identical target types but different address spaces as distinct types. To
38 override this warning, such as for functions which convert pointers between
39 address spaces, use a type that includes \fB__attribute__((force))\fR.
41 Sparse issues these warnings by default. To turn them off, use
42 \fB\-Wno\-address\-space\fR.
46 Warn about unsupported operations or type mismatches with restricted integer
49 Sparse supports an extended attribute, \fB__attribute__((bitwise))\fR, which
50 creates a new restricted integer type from a base integer type, distinct from
51 the base integer type and from any other restricted integer type not declared
52 in the same declaration or \fBtypedef\fR. For example, this allows programs
53 to create \fBtypedef\fRs for integer types with specific endianness. With
54 \fB-Wbitwise\fR, Sparse will warn on any use of a restricted type in
55 arithmetic operations other than bitwise operations, and on any conversion of
56 one restricted type into another, except via a cast that includes
57 \fB__attribute__((force))\fR.
59 __bitwise ends up being a "stronger integer separation". That one
60 doesn't allow you to mix with non-bitwise integers, so now it's much
61 harder to lose the type by mistake.
63 __bitwise is for *unique types* that cannot be mixed with other
64 types, and that you'd never want to just use as a random integer (the
65 integer 0 is special, though, and gets silently accepted iirc - it's
66 kind of like "NULL" for pointers). So "gfp_t" or the "safe endianness"
67 types would be __bitwise: you can only operate on them by doing
68 specific operations that know about *that* particular type.
70 Generally, you want bitwise if you are looking for type safety. Sparse
71 does not issue these warnings by default.
75 Warn about casts which add an address space to a pointer type.
77 A cast that includes \fB__attribute__((force))\fR will suppress this warning.
79 Sparse does not issue these warnings by default.
83 Warn about casts that truncate constant values.
85 Sparse issues these warnings by default. To turn them off, use
86 \fB\-Wno\-cast\-truncate\fR.
90 Warn about potential errors in synchronization or other delimited contexts.
92 Sparse supports several means of designating functions or statements that
93 delimit contexts, such as synchronization. Functions with the extended
95 .BI __attribute__((context( expression , in_context , out_context ))
96 require the context \fIexpression\fR (for instance, a lock) to have the value
97 \fIin_context\fR (a constant nonnegative integer) when called, and return with
98 the value \fIout_context\fR (a constant nonnegative integer). For APIs
99 defined via macros, use the statement form
100 .BI __context__( expression , in_value , out_value )
101 in the body of the macro.
103 With \fB-Wcontext\fR Sparse will warn when it sees a function change the
104 context without indicating this with a \fBcontext\fR attribute, either by
105 decreasing a context below zero (such as by releasing a lock without acquiring
106 it), or returning with a changed context (such as by acquiring a lock without
107 releasing it). Sparse will also warn about blocks of code which may
108 potentially execute with different contexts.
110 Sparse issues these warnings by default. To turn them off, use
111 \fB\-Wno\-context\fR.
115 Warn about any non-\fBstatic\fR variable or function definition that has no
116 previous declaration.
118 Private symbols (functions and variables) internal to a given source file
119 should use \fBstatic\fR, to allow additional compiler optimizations, allow
120 detection of unused symbols, and prevent other code from relying on these
121 internal symbols. Public symbols used by other source files will need
122 declarations visible to those other source files, such as in a header file.
123 All declarations should fall into one of these two categories. Thus, with
124 \fB-Wdecl\fR, Sparse warns about any symbol definition with neither
125 \fBstatic\fR nor a declaration. To fix this warning, declare private symbols
126 \fBstatic\fR, and ensure that the files defining public symbols have the
127 symbol declarations available first (such as by including the appropriate
130 Sparse issues these warnings by default. To turn them off, use
134 .B \-Wdeclaration-after-statement
135 Warn about declarations that are not at the start of a block.
137 These declarations are permitted in C99 but not in C89.
139 Sparse issues these warnings by default only when the C dialect is
140 C89 (i.e. -ansi or -std=c89). To turn them off, use
141 \fB\-Wno\-declaration\-after\-statement\fR.
144 .B \-Wdefault\-bitfield\-sign
145 Warn about any bitfield with no explicit signedness.
147 Bitfields have no standard-specified default signedness. (C99 6.7.2) A
148 bitfield without an explicit \fBsigned\fR or \fBunsigned\fR creates a
149 portability problem for software that relies on the available range of values.
150 To fix this, specify the bitfield type as \fBsigned\fR or \fBunsigned\fR
153 Sparse does not issue these warnings by default.
156 .B \-Wdesignated\-init
157 Warn about positional initialization of structs marked as requiring designated
160 Sparse allows an attribute
161 .BI __attribute__((designated_init))
162 which marks a struct as requiring designated initializers. Sparse will warn
163 about positional initialization of a struct variable or struct literal of a
164 type that has this attribute.
166 Requiring designated initializers for a particular struct type will insulate
167 code using that struct type from changes to the layout of the type, avoiding
168 the need to change initializers for that type unless they initialize a removed
169 or incompatibly changed field.
171 Common examples of this type of struct include collections of function pointers
172 for the implementations of a class of related operations, for which the default
173 NULL for an unmentioned field in a designated initializer will correctly
174 indicate the absence of that operation.
176 Sparse issues these warnings by default. To turn them off, use
177 \fB\-Wno\-designated\-init\fR.
181 Warn about do-while loops that do not delimit the loop body with braces.
183 Sparse does not issue these warnings by default.
187 Warn about the use of an expression of an incorrect \fBenum\fR type when
188 initializing another \fBenum\fR type, assigning to another \fBenum\fR type, or
189 passing an argument to a function which expects another \fBenum\fR type.
191 Sparse issues these warnings by default. To turn them off, use
192 \fB\-Wno\-enum\-mismatch\fR.
196 Warn about initialization of a char array with a too long constant C string.
198 If the size of the char array and the length of the string is the same,
199 there is no space for the last nul char of the string in the array:
205 If the array is used as a byte array, not as C string, this
206 warning is just noise. However, if the array is passed to functions
207 dealing with C string like printf(%s) and strcmp, it may cause a
210 Sparse does not issue these warnings by default.
213 .B \-Wmemcpy\-max\-count
214 Warn about call of \fBmemcpy()\fR, \fBmemset()\fR, \fBcopy_from_user()\fR, or
215 \fBcopy_to_user()\fR with a large compile-time byte count.
217 Sparse issues these warnings by default. To turn them off, use
218 \fB\-Wno\-memcpy\-max\-count\fR.
220 The limit can be changed with \fB\-fmemcpy\-max\-count=COUNT\fR,
221 the default being \fB100000\fR.
224 .B \-Wnon\-pointer\-null
225 Warn about the use of 0 as a NULL pointer.
227 0 has integer type. NULL has pointer type.
229 Sparse issues these warnings by default. To turn them off, use
230 \fB\-Wno\-non\-pointer\-null\fR.
233 .B \-Wold\-initializer
234 Warn about the use of the pre-C99 GCC syntax for designated initializers.
236 C99 provides a standard syntax for designated fields in \fBstruct\fR or
237 \fBunion\fR initializers:
240 struct structname var = { .field = value };
243 GCC also has an old, non-standard syntax for designated initializers which
247 struct structname var = { field: value };
250 Sparse will warn about the use of GCC's non-standard syntax for designated
251 initializers. To fix this warning, convert designated initializers to use the
254 Sparse issues these warnings by default. To turn them off, use
255 \fB\-Wno\-old\-initializer\fR.
258 .B \-Wone\-bit\-signed\-bitfield
259 Warn about any one-bit \fBsigned\fR bitfields.
261 A one-bit \fBsigned\fR bitfield can only have the values 0 and -1, or with
262 some compilers only 0; this results in unexpected behavior for programs which
263 expected the ability to store 0 and 1.
265 Sparse issues these warnings by default. To turn them off, use
266 \fB\-Wno\-one\-bit\-signed\-bitfield\fR.
270 Warn about the use of a parenthesized string to initialize an array.
272 Standard C syntax does not permit a parenthesized string as an array
273 initializer. GCC allows this syntax as an extension. With
274 \fB\-Wparen\-string\fR, Sparse will warn about this syntax.
276 Sparse does not issue these warnings by default.
279 .B \-Wptr\-subtraction\-blows
280 Warn when subtracting two pointers to a type with a non-power-of-two size.
282 Subtracting two pointers to a given type gives a difference in terms of the
283 number of items of that type. To generate this value, compilers will usually
284 need to divide the difference by the size of the type, an potentially
285 expensive operation for sizes other than powers of two.
287 Code written using pointer subtraction can often use another approach instead,
288 such as array indexing with an explicit array index variable, which may allow
289 compilers to generate more efficient code.
291 Sparse does not issue these warnings by default.
295 Warn if a function with return type void returns a void expression.
297 C99 permits this, and in some cases this allows for more generic code in
298 macros that use typeof or take a type as a macro argument. However, some
299 programs consider this poor style, and those programs can use
300 \fB\-Wreturn\-void\fR to get warnings about it.
302 Sparse does not issue these warnings by default.
306 Warn when declaring a symbol which shadows a declaration with the same name in
309 Such declarations can lead to error-prone code.
311 Sparse does not issue these warnings by default.
315 Warn when checking the sizeof a _Bool.
317 C99 does not specify the sizeof a _Bool. gcc uses 1.
319 Sparse does not issue these warnings by default.
322 .B \-Wtransparent\-union
323 Warn about any declaration using the GCC extension
324 \fB__attribute__((transparent_union))\fR.
326 Sparse issues these warnings by default. To turn them off, use
327 \fB\-Wno\-transparent\-union\fR.
331 Warn when converting a pointer to an integer type into a pointer to an integer
332 type with different signedness.
334 Sparse does not issue these warnings by default.
338 Warn about preprocessor conditionals that use the value of an undefined
341 Standard C (C99 6.10.1) permits using the value of an undefined preprocessor
342 symbol in preprocessor conditionals, and specifies it has have a value of 0.
343 However, this behavior can lead to subtle errors.
345 Sparse does not issue these warnings by default.
349 .B \-gcc-base-dir \fIdir\fR
350 Look for compiler-provided system headers in \fIdir\fR/include/ and \fIdir\fR/include-fixed/.
353 .B \-multiarch-dir \fIdir\fR
354 Look for system headers in the multiarch subdirectory \fIdir\fR.
355 The \fIdir\fR name would normally take the form of the target's
356 normalized GNU triplet. (e.g. i386-linux-gnu).
360 .B \-fdump-linearize[=only]
361 Dump the IR code of a function directly after its linearization,
362 before any simplifications is made. If the argument \fB=only\fR is
363 also given no further processing is done on the function.
366 Report some statistics about memory allocation used by the tool.
370 .B \-fmemcpy-max-count=COUNT
371 Set the limit for the warnings given by \fB-Wmemcpy-max-count\fR.
372 A COUNT of 0, useless in itself, will effectively disable the warning.
373 The default limit is 100000.
377 Set the distance between tab stops. This helps sparse report correct
378 column numbers in warnings or errors. If the value is less than 1 or
379 greater than 100, the option is ignored. The default is 8.
385 http://www.kernel.org/pub/software/devel/sparse/
388 linux-sparse@vger.kernel.org
391 Christopher Li <sparse@chrisli.org>