1.\" This file is distributed under the University of Illinois Open Source 2.\" License. See LICENSE.TXT for details. 3.\" $Id$ 4.Dd May 25, 2012 5.Dt SCAN-BUILD 1 6.Os "clang" "3.5" 7.Sh NAME 8.Nm scan-build 9.Nd Clang static analyzer 10.Sh SYNOPSIS 11.Nm 12.Op Fl ohkvV 13.Op Fl analyze-headers 14.Op Fl enable-checker Op Ar checker_name 15.Op Fl disable-checker Op Ar checker_name 16.Op Fl Fl help 17.Op Fl Fl help-checkers 18.Op Fl Fl html-title Op Ar =title 19.Op Fl Fl keep-going 20.Op Fl plist 21.Op Fl plist-html 22.Op Fl Fl status-bugs 23.Op Fl Fl use-c++ Op Ar =compiler_path 24.Op Fl Fl use-cc Op Ar =compiler_path 25.Op Fl Fl view 26.Op Fl constraints Op Ar model 27.Op Fl maxloop Ar N 28.Op Fl no-failure-reports 29.Op Fl stats 30.Op Fl store Op Ar model 31.Ar build_command 32.Op build_options 33.\" 34.\" Sh DESCRIPTION 35.Sh DESCRIPTION 36.Nm 37is a Perl script that invokes the Clang static analyzer. Options used by 38.Nm 39or by the analyzer appear first, followed by the 40.Ar build_command 41and any 42.Ar build_options 43normally used to build the target system. 44.Pp 45The static analyzer employs a long list of checking algorithms, see 46.Sx CHECKERS . 47Output can be written in standard 48.Li .plist 49and/or HTML format. 50.Pp 51The following options are supported: 52.Bl -tag -width indent 53.It Fl analyze-headers 54Also analyze functions in #included files. 55.It Fl enable-checker Ar checker_name , Fl disable-checker Ar checker_name 56Enable/disable 57.Ar checker_name . 58See 59.Sx CHECKERS . 60.It Fl h , Fl Fl help 61Display this message. 62.It Fl Fl help-checkers 63List default checkers, see 64.Sx CHECKERS . 65.It Fl Fl html-title Ns Op = Ns Ar title 66Specify the title used on generated HTML pages. 67A default title is generated if 68.Ar title 69is not specified. 70.It Fl k , Fl Fl keep-going 71Add a 72.Dq keep on going 73option to 74.Ar build_command . 75Currently supports make and xcodebuild. This is a convenience option; 76one can specify this behavior directly using build options. 77.It Fl o 78Target directory for HTML report files. Subdirectories will be 79created as needed to represent separate invocations 80of the analyzer. If this option is not specified, a directory is 81created in /tmp (TMPDIR on Mac OS X) to store the reports. 82.It Fl plist 83Output the results as a set of 84.Li .plist 85files. (By default the output of 86.Nm 87is a set of HTML files.) 88.It Fl plist-html 89Output the results as a set of HTML and .plist files 90.It Fl Fl status-bugs 91Set exit status to 1 if it found potential bugs and 0 otherwise. By 92default the exit status of 93.Nm 94is that returned by 95.Ar build_command . 96.It Fl Fl use-c++ Ns Op = Ns Ar compiler_path 97Guess the default compiler for your C++ and Objective-C++ code. Use this 98option to specify an alternate compiler. 99.It Fl Fl use-cc Ns Op = Ns Ar compiler_path 100Guess the default compiler for your C and Objective-C code. Use this 101option to specify an alternate compiler. 102.It Fl v 103Verbose output from 104.Nm 105and the analyzer. A second and 106third 107.Ar v 108increases verbosity. 109.It Fl V , Fl Fl view 110View analysis results in a web browser when the build completes. 111.It Fl constraints Op Ar model 112Specify the contraint engine used by the analyzer. By default the 113.Ql range 114model is used. Specifying 115.Ql basic 116uses a simpler, less powerful constraint model used by checker-0.160 117and earlier. 118.It Fl maxloop Ar N 119Specifiy the number of times a block can be visited before giving 120up. Default is 4. Increase for more comprehensive coverage at a 121cost of speed. 122.It Fl no-failure-reports 123Do not create a 124.Ql failures 125subdirectory that includes analyzer crash reports and preprocessed 126source files. 127.It Fl stats 128Generates visitation statistics for the project being analyzed. 129.It Fl store Op Ar model 130Specify the store model used by the analyzer. By default, the 131.Ql region 132store model is used. 133.Ql region 134specifies a field- 135sensitive store model. Users can also specify 136.Ql basic 137which is far less precise but can more quickly analyze code. 138.Ql basic 139was the default store model for checker-0.221 and earlier. 140.\" 141.El 142.Sh EXIT STATUS 143.Nm 144returns the value returned by 145.Ar build_command 146unless 147.Fl Fl status-bugs 148or 149.Fl Fl keep-going 150is used. 151.\" 152.\" Other sections not yet used ... 153.\" .Sh ENVIRONMENT 154.\" .Sh FILES 155.\" .Sh DIAGNOSTICS 156.\" .Sh COMPATIBILITY 157.\" .Sh HISTORY 158.\" .Sh BUGS 159.\" 160.Sh CHECKERS 161The checkers listed below may be enabled/disabled using the 162.Fl enable-checker 163and 164.Fl disable-checker 165options. 166A default group of checkers is run unless explicitly disabled. 167Exactly which checkers constitute the default group is a function 168of the operating system in use; they are listed with 169.Fl Fl help-checkers . 170.Bl -tag -width indent. 171.It core.AdjustedReturnValue 172Check to see if the return value of a function call is different than 173the caller expects (e.g., from calls through function pointers). 174.It core.AttributeNonNull 175Check for null pointers passed as arguments to a function whose arguments are marked with the 176.Ql nonnull 177attribute. 178.It core.CallAndMessage 179Check for logical errors for function calls and Objective-C message expressions (e.g., uninitialized arguments, null function pointers). 180.It core.DivideZero 181Check for division by zero. 182.It core.NullDereference 183Check for dereferences of null pointers. 184.It core.StackAddressEscape 185Check that addresses to stack memory do not escape the function. 186.It core.UndefinedBinaryOperatorResult 187Check for undefined results of binary operators. 188.It core.VLASize 189Check for declarations of VLA of undefined or zero size. 190.It core.builtin.BuiltinFunctions 191Evaluate compiler builtin functions, e.g. 192.Fn alloca . 193.It core.builtin.NoReturnFunctions 194Evaluate 195.Ql panic 196functions that are known to not return to the caller. 197.It core.uninitialized.ArraySubscript 198Check for uninitialized values used as array subscripts. 199.It core.uninitialized.Assign 200Check for assigning uninitialized values. 201.It core.uninitialized.Branch 202Check for uninitialized values used as branch conditions. 203.It core.uninitialized.CapturedBlockVariable 204Check for blocks that capture uninitialized values. 205.It core.uninitialized.UndefReturn 206Check for uninitialized values being returned to the caller. 207.It deadcode.DeadStores 208Check for values stored to variables that are never read afterwards. 209.It debug.DumpCFG 210Display Control-Flow Graphs. 211.It debug.DumpCallGraph 212Display Call Graph. 213.It debug.DumpDominators 214Print the dominance tree for a given Control-Flow Graph. 215.It debug.DumpLiveVars 216Print results of live variable analysis. 217.It debug.Stats 218Emit warnings with analyzer statistics. 219.It debug.TaintTest 220Mark tainted symbols as such. 221.It debug.ViewCFG 222View Control-Flow Graphs using 223.Ic GraphViz . 224.It debug.ViewCallGraph 225View Call Graph using 226.Ic GraphViz . 227.It llvm.Conventions 228Check code for LLVM codebase conventions. 229.It osx.API 230Check for proper uses of various Mac OS X APIs. 231.It osx.AtomicCAS 232Evaluate calls to 233.Vt OSAtomic 234functions. 235.It osx.SecKeychainAPI 236Check for proper uses of Secure Keychain APIs. 237.It osx.cocoa.AtSync 238Check for null pointers used as mutexes for @synchronized. 239.It osx.cocoa.ClassRelease 240Check for sending 241.Ql retain , 242.Ql release, 243or 244.Ql autorelease 245directly to a Class. 246.It osx.cocoa.IncompatibleMethodTypes 247Warn about Objective-C method signatures with type incompatibilities. 248.It osx.cocoa.NSAutoreleasePool 249Warn for suboptimal uses of 250.Vt NSAutoreleasePool 251in Objective-C GC mode. 252.It osx.cocoa.NSError 253Check usage of NSError** parameters. 254.It osx.cocoa.NilArg 255Check for prohibited nil arguments to Objective-C method calls. 256.It osx.cocoa.RetainCount 257Check for leaks and improper reference count management. 258.It osx.cocoa.SelfInit 259Check that 260.Ql self 261is properly initialized inside an initializer method. 262.It osx.cocoa.UnusedIvars 263Warn about private ivars that are never used. 264.It osx.cocoa.VariadicMethodTypes 265Check for passing non-Objective-C types to variadic methods that expect only Objective-C types. 266.It osx.coreFoundation.CFError 267Check usage of CFErrorRef* parameters. 268.It osx.coreFoundation.CFNumber 269Check for proper uses of 270.Fn CFNumberCreate . 271.It osx.coreFoundation.CFRetainRelease 272Check for null arguments to 273.Fn CFRetain , 274.Fn CFRelease , 275and 276.Fn CFMakeCollectable . 277.It osx.coreFoundation.containers.OutOfBounds 278Checks for index out-of-bounds when using the 279.Vt CFArray 280API. 281.It osx.coreFoundation.containers.PointerSizedValues 282Warns if 283.Vt CFArray , 284.Vt CFDictionary , 285or 286.Vt CFSet 287are created with non-pointer-size values. 288.It security.FloatLoopCounter 289Warn on using a floating point value as a loop counter (CERT: FLP30-C, FLP30-CPP). 290.It security.insecureAPI.UncheckedReturn 291Warn on uses of functions whose return values must be always checked. 292.It security.insecureAPI.getpw 293Warn on uses of 294.Fn getpw . 295.It security.insecureAPI.gets 296Warn on uses of 297.Fn gets . 298.It security.insecureAPI.mkstemp 299Warn when 300.Fn mkstemp 301is passed fewer than 6 X's in the format string. 302.It security.insecureAPI.mktemp 303Warn on uses of 304.Fn mktemp . 305.It security.insecureAPI.rand 306Warn on uses of 307.Fn rand , 308.Fn random , 309and related functions. 310.It security.insecureAPI.strcpy 311Warn on uses of 312.Fn strcpy 313and 314.Fn strcat . 315.It security.insecureAPI.vfork 316Warn on uses of 317.Fn vfork . 318.It unix.API 319Check calls to various UNIX/Posix functions. 320.It unix.Malloc 321Check for memory leaks, double free, and use-after-free. 322.It unix.cstring.BadSizeArg 323Check the size argument passed into C string functions for common 324erroneous patterns. 325.It unix.cstring.NullArg 326Check for null pointers being passed as arguments to C string functions. 327.El 328.\" 329.Sh EXAMPLE 330.Ic scan-build -o /tmp/myhtmldir make -j4 331.Pp 332The above example causes analysis reports to be deposited into 333a subdirectory of 334.Pa /tmp/myhtmldir 335and to run 336.Ic make 337with the 338.Fl j4 339option. 340A different subdirectory is created each time 341.Nm 342analyzes a project. 343The analyzer should support most parallel builds, but not distributed builds. 344.Sh AUTHORS 345.Nm 346was written by 347.An "Ted Kremenek" . 348Documentation contributed by 349.An "James K. Lowden" Aq jklowden@schemamania.org . 350