.\" This file is distributed under the University of Illinois Open Source
.\" License. See LICENSE.TXT for details.
.\" $Id$
.Dd May 25, 2012
.Dt SCAN-BUILD 1
.Os "clang" "3.5"
.Sh NAME
.Nm scan-build
.Nd Clang static analyzer
.Sh SYNOPSIS
.Nm
.Op Fl ohkvV
.Op Fl analyze-headers
.Op Fl enable-checker Op Ar checker_name
.Op Fl disable-checker Op Ar checker_name
.Op Fl Fl help
.Op Fl Fl help-checkers
.Op Fl Fl html-title Op Ar =title
.Op Fl Fl keep-going
.Op Fl plist
.Op Fl plist-html
.Op Fl Fl status-bugs
.Op Fl Fl use-c++ Op Ar =compiler_path
.Op Fl Fl use-cc Op Ar =compiler_path
.Op Fl Fl view
.Op Fl constraints Op Ar model
.Op Fl maxloop Ar N
.Op Fl no-failure-reports
.Op Fl stats
.Op Fl store Op Ar model
.Ar build_command
.Op build_options
.\"
.\" Sh DESCRIPTION
.Sh DESCRIPTION
.Nm
is a Perl script that invokes the Clang static analyzer.  Options used by
.Nm
or by the analyzer appear first, followed by the
.Ar build_command
and any
.Ar build_options
normally used to build the target system.
.Pp
The static analyzer employs a long list of checking algorithms, see
.Sx CHECKERS .
Output can be written in standard
.Li .plist
and/or HTML format.
.Pp
The following options are supported:
.Bl -tag -width indent
.It Fl analyze-headers
Also analyze functions in #included files.
.It Fl enable-checker Ar checker_name , Fl disable-checker Ar checker_name
Enable/disable
.Ar checker_name .
See
.Sx CHECKERS .
.It Fl h , Fl Fl help
Display this message.
.It Fl Fl help-checkers
List default checkers, see
.Sx CHECKERS .
.It Fl Fl html-title Ns Op = Ns Ar title
Specify the title used on generated HTML pages.
A default title is generated if
.Ar title
is not specified.
.It Fl k , Fl Fl keep-going
Add a
.Dq keep on going
option to
.Ar build_command .
Currently supports make and xcodebuild. This is a convenience option;
one can specify this behavior directly using build options.
.It Fl o
Target directory for HTML report files.  Subdirectories will be
created as needed to represent separate invocations
of the analyzer.  If this option is not specified, a directory is
created in /tmp (TMPDIR on Mac OS X) to store the reports.
.It Fl plist
Output the results as a set of
.Li .plist
files. (By default the output of
.Nm
is a set of HTML files.)
.It Fl plist-html
Output the results as a set of HTML and .plist files
.It Fl Fl status-bugs
Set exit status to 1 if it found potential bugs and 0 otherwise. By
default the exit status of
.Nm
is that returned by
.Ar build_command .
.It Fl Fl use-c++ Ns Op = Ns Ar compiler_path
Guess the default compiler for your C++ and Objective-C++ code. Use this
option to specify an alternate compiler.
.It Fl Fl use-cc Ns Op = Ns Ar compiler_path
Guess the default compiler for your C and Objective-C code. Use this
option to specify an alternate compiler.
.It Fl v
Verbose output from
.Nm
and the analyzer. A second and
third
.Ar v
increases verbosity.
.It Fl V , Fl Fl view
View analysis results in a web browser when the build completes.
.It Fl constraints Op Ar model
Specify the contraint engine used by the analyzer.  By default the
.Ql range
model is used.  Specifying
.Ql basic
uses a simpler, less powerful constraint model used by checker-0.160
and earlier.
.It Fl maxloop Ar N
Specifiy the number of times a block can be visited before giving
up. Default is 4. Increase for more comprehensive coverage at a
cost of speed.
.It Fl no-failure-reports
Do not create a
.Ql failures
subdirectory that includes analyzer crash reports and preprocessed
source files.
.It Fl stats
Generates visitation statistics for the project being analyzed.
.It Fl store Op Ar model
Specify the store model used by the analyzer. By default, the
.Ql region
store model is used.
.Ql region
specifies a field-
sensitive store model. Users can also specify
.Ql basic
which is far less precise but can more quickly analyze code.
.Ql basic
was the default store model for checker-0.221 and earlier.
.\"
.El
.Sh EXIT STATUS
.Nm
returns the value returned by
.Ar build_command
unless
.Fl Fl status-bugs
or
.Fl Fl keep-going
is used.
.\"
.\" Other sections not yet used ...
.\" .Sh ENVIRONMENT
.\" .Sh FILES
.\" .Sh DIAGNOSTICS
.\" .Sh COMPATIBILITY
.\" .Sh HISTORY
.\" .Sh BUGS
.\"
.Sh CHECKERS
The checkers listed below may be enabled/disabled using the
.Fl enable-checker
and
.Fl disable-checker
options.
A default group of checkers is run unless explicitly disabled.
Exactly which checkers constitute the default group is a function
of the operating system in use; they are listed with
.Fl Fl help-checkers .
.Bl -tag -width indent.
.It core.AdjustedReturnValue
Check to see if the return value of a function call is different than
the caller expects (e.g., from calls through function pointers).
.It core.AttributeNonNull
Check for null pointers passed as arguments to a function whose arguments are marked with the
.Ql nonnull
attribute.
.It core.CallAndMessage
Check for logical errors for function calls and Objective-C message expressions (e.g., uninitialized arguments, null function pointers).
.It core.DivideZero
Check for division by zero.
.It core.NullDereference
Check for dereferences of null pointers.
.It core.StackAddressEscape
Check that addresses to stack memory do not escape the function.
.It core.UndefinedBinaryOperatorResult
Check for undefined results of binary operators.
.It core.VLASize
Check for declarations of VLA of undefined or zero size.
.It core.builtin.BuiltinFunctions
Evaluate compiler builtin functions, e.g.
.Fn alloca .
.It core.builtin.NoReturnFunctions
Evaluate
.Ql panic
functions that are known to not return to the caller.
.It core.uninitialized.ArraySubscript
Check for uninitialized values used as array subscripts.
.It core.uninitialized.Assign
Check for assigning uninitialized values.
.It core.uninitialized.Branch
Check for uninitialized values used as branch conditions.
.It core.uninitialized.CapturedBlockVariable
Check for blocks that capture uninitialized values.
.It core.uninitialized.UndefReturn
Check for uninitialized values being returned to the caller.
.It deadcode.DeadStores
Check for values stored to variables that are never read afterwards.
.It debug.DumpCFG
Display Control-Flow Graphs.
.It debug.DumpCallGraph
Display Call Graph.
.It debug.DumpDominators
Print the dominance tree for a given Control-Flow Graph.
.It debug.DumpLiveVars
Print results of live variable analysis.
.It debug.Stats
Emit warnings with analyzer statistics.
.It debug.TaintTest
Mark tainted symbols as such.
.It debug.ViewCFG
View Control-Flow Graphs using
.Ic GraphViz .
.It debug.ViewCallGraph
View Call Graph using
.Ic GraphViz .
.It llvm.Conventions
Check code for LLVM codebase conventions.
.It osx.API
Check for proper uses of various Mac OS X APIs.
.It osx.AtomicCAS
Evaluate calls to
.Vt OSAtomic
functions.
.It osx.SecKeychainAPI
Check for proper uses of Secure Keychain APIs.
.It osx.cocoa.AtSync
Check for null pointers used as mutexes for @synchronized.
.It osx.cocoa.ClassRelease
Check for sending
.Ql retain ,
.Ql release,
or
.Ql autorelease
directly to a Class.
.It osx.cocoa.IncompatibleMethodTypes
Warn about Objective-C method signatures with type incompatibilities.
.It osx.cocoa.NSAutoreleasePool
Warn for suboptimal uses of
.Vt NSAutoreleasePool
in Objective-C GC mode.
.It osx.cocoa.NSError
Check usage of NSError** parameters.
.It osx.cocoa.NilArg
Check for prohibited nil arguments to Objective-C method calls.
.It osx.cocoa.RetainCount
Check for leaks and improper reference count management.
.It osx.cocoa.SelfInit
Check that
.Ql self
is properly initialized inside an initializer method.
.It osx.cocoa.UnusedIvars
Warn about private ivars that are never used.
.It osx.cocoa.VariadicMethodTypes
Check for passing non-Objective-C types to variadic methods that expect only Objective-C types.
.It osx.coreFoundation.CFError
Check usage of CFErrorRef* parameters.
.It osx.coreFoundation.CFNumber
Check for proper uses of
.Fn CFNumberCreate .
.It osx.coreFoundation.CFRetainRelease
Check for null arguments to
.Fn CFRetain ,
.Fn CFRelease ,
and
.Fn CFMakeCollectable .
.It osx.coreFoundation.containers.OutOfBounds
Checks for index out-of-bounds when using the
.Vt CFArray
API.
.It osx.coreFoundation.containers.PointerSizedValues
Warns if
.Vt CFArray ,
.Vt CFDictionary ,
or
.Vt CFSet
are created with non-pointer-size values.
.It security.FloatLoopCounter
Warn on using a floating point value as a loop counter (CERT: FLP30-C, FLP30-CPP).
.It security.insecureAPI.UncheckedReturn
Warn on uses of functions whose return values must be always checked.
.It security.insecureAPI.getpw
Warn on uses of
.Fn getpw .
.It security.insecureAPI.gets
Warn on uses of
.Fn gets .
.It security.insecureAPI.mkstemp
Warn when
.Fn mkstemp
is passed fewer than 6 X's in the format string.
.It security.insecureAPI.mktemp
Warn on uses of
.Fn mktemp .
.It security.insecureAPI.rand
Warn on uses of
.Fn rand ,
.Fn random ,
and related functions.
.It security.insecureAPI.strcpy
Warn on uses of
.Fn strcpy
and
.Fn strcat .
.It security.insecureAPI.vfork
Warn on uses of
.Fn vfork .
.It unix.API
Check calls to various UNIX/Posix functions.
.It unix.Malloc
Check for memory leaks, double free, and use-after-free.
.It unix.cstring.BadSizeArg
Check the size argument passed into C string functions for common
erroneous patterns.
.It unix.cstring.NullArg
Check for null pointers being passed as arguments to C string functions.
.El
.\"
.Sh EXAMPLE
.Ic scan-build -o /tmp/myhtmldir make -j4
.Pp
The above example causes analysis reports to be deposited into
a subdirectory of
.Pa /tmp/myhtmldir
and to run
.Ic make
with the
.Fl j4
option.
A different subdirectory is created each time
.Nm
analyzes a project.
The analyzer should support most parallel builds, but not distributed builds.
.Sh AUTHORS
.Nm
was written by
.An "Ted Kremenek" .
Documentation contributed by
.An "James K. Lowden" Aq jklowden@schemamania.org .
