blob: 18bafd0562880203e6851a109eb69c85002acadc [file] [log] [blame]
Ted Kremenek591b9072009-06-08 21:21:24 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5 <title>Clang Static Analyzer</title>
Benjamin Kramer665a8dc2012-01-15 15:26:07 +00006 <link type="text/css" rel="stylesheet" href="content.css">
7 <link type="text/css" rel="stylesheet" href="menu.css">
Ted Kremenekf4aed5f2010-02-12 21:05:44 +00008 <script type="text/javascript" src="scripts/menu.js"></script>
Benjamin Kramer665a8dc2012-01-15 15:26:07 +00009 <!-- Generated from: http://www.spiffycorners.com/index.php -->
Ted Kremenek591b9072009-06-08 21:21:24 +000010
11<style type="text/css">
12.spiffy{display:block}
13.spiffy *{
14 display:block;
15 height:1px;
16 overflow:hidden;
17 font-size:.01em;
18 background:#EBF0FA}
19.spiffy1{
20 margin-left:3px;
21 margin-right:3px;
22 padding-left:1px;
23 padding-right:1px;
24 border-left:1px solid #f6f8fc;
25 border-right:1px solid #f6f8fc;
26 background:#f0f3fb}
27.spiffy2{
28 margin-left:1px;
29 margin-right:1px;
30 padding-right:1px;
31 padding-left:1px;
32 border-left:1px solid #fdfdfe;
33 border-right:1px solid #fdfdfe;
34 background:#eef2fa}
35.spiffy3{
36 margin-left:1px;
37 margin-right:1px;
38 border-left:1px solid #eef2fa;
39 border-right:1px solid #eef2fa;}
40.spiffy4{
41 border-left:1px solid #f6f8fc;
42 border-right:1px solid #f6f8fc}
43.spiffy5{
44 border-left:1px solid #f0f3fb;
45 border-right:1px solid #f0f3fb}
46.spiffyfg{
47 background:#EBF0FA}
48
49.spiffyfg h2 {
50 margin:0px; padding:10px;
51}
Ted Kremenek591b9072009-06-08 21:21:24 +000052
Ted Kremenek591b9072009-06-08 21:21:24 +000053 #left { float:left; }
54 #left h2 { margin:1px; padding-top:0px; }
55 #right { float:left; margin-left:20px; margin-right:20px; padding:0px ;}
56 #right h2 { padding:0px; margin:0px; }
57 #wrappedcontent { padding:15px;}
58</style>
Benjamin Kramer665a8dc2012-01-15 15:26:07 +000059</head>
60<body>
61
62<div id="page">
63<!--#include virtual="menu.html.incl"-->
64<div id="content">
65
66
67<table style="margin-top:0px" width="100%" border="0" cellpadding="0px" cellspacing="0">
68<tr><td>
69
70<h1>Clang Static Analyzer</h1>
71
72<p>The Clang Static Analyzer is source code analysis tool that find bugs in C
73and Objective-C programs.</p>
74
75<p>Currently it can be run either as a <a href="/scan-build.html">standalone
76tool</a> or <a href="/xcode.html">within Xcode</a>. The standalone tool is
77invoked from the command-line, and is intended to be run in tandem with a build
78of a codebase.</p>
79
80<p>The analyzer is 100% open source and is part of the <a
81href="http://clang.llvm.org">Clang</a> project. Like the rest of Clang, the
82analyzer is implemented as a C++ library that can be used by other tools and
83applications.</p>
84
85<h2>Download</h2>
Ted Kremenek591b9072009-06-08 21:21:24 +000086
Ted Kremenek8bebc6e2010-02-09 23:05:59 +000087<div style="padding:0px; font-size: 90%">
Ted Kremenek591b9072009-06-08 21:21:24 +000088 <b class="spiffy">
89 <b class="spiffy1"><b></b></b>
90 <b class="spiffy2"><b></b></b>
91 <b class="spiffy3"></b>
92 <b class="spiffy4"></b>
93 <b class="spiffy5"></b></b>
94 <div class="spiffyfg">
95 <div style="padding:15px">
Ted Kremenek250f67b2010-02-19 17:33:38 +000096 <h3 style="margin:0px;padding:0px">Mac OS X</h3>
Ted Kremenek591b9072009-06-08 21:21:24 +000097 <ul>
Ted Kremeneke6732792011-02-12 03:20:34 +000098 <li>Latest build (Intel-only binary, 10.5+):<br>
Ted Kremenek591b9072009-06-08 21:21:24 +000099 <!--#include virtual="latest_checker.html.incl"-->
100 </li>
Benjamin Kramer665a8dc2012-01-15 15:26:07 +0000101 <li><a href="/release_notes.html">Release notes</a></li>
Ted Kremenekef35cbc2011-01-27 19:41:08 +0000102 <li>This build can be used both from the command line and from within Xcode</li>
103 <li><a href="/installation.html">Installation</a> and <a href="/scan-build.html">usage</a></li>
Ted Kremenek591b9072009-06-08 21:21:24 +0000104 </ul>
Ted Kremenek250f67b2010-02-19 17:33:38 +0000105 </div>
106 </div>
107 <b class="spiffy">
108 <b class="spiffy5"></b>
109 <b class="spiffy4"></b>
110 <b class="spiffy3"></b>
111 <b class="spiffy2"><b></b></b>
112 <b class="spiffy1"><b></b></b></b>
113</div>
114
115<div style="padding:0; margin-top:10px; font-size: 90%">
116 <b class="spiffy">
117 <b class="spiffy1"><b></b></b>
118 <b class="spiffy2"><b></b></b>
119 <b class="spiffy3"></b>
120 <b class="spiffy4"></b>
121 <b class="spiffy5"></b></b>
122 <div class="spiffyfg">
123 <div style="padding:15px">
124 <h3 style="margin:0px;padding:0px">Other Platforms</h3>
Ted Kremenek591b9072009-06-08 21:21:24 +0000125 <p>For other platforms, please follow the instructions for <a
126 href="/installation#OtherPlatforms">building the analyzer</a> from
127 source code.<p>
128 </div>
129 </div>
130 <b class="spiffy">
131 <b class="spiffy5"></b>
132 <b class="spiffy4"></b>
133 <b class="spiffy3"></b>
134 <b class="spiffy2"><b></b></b>
135 <b class="spiffy1"><b></b></b></b>
136</div>
137
Ted Kremenek250f67b2010-02-19 17:33:38 +0000138
Ted Kremenek8bebc6e2010-02-09 23:05:59 +0000139</td><td style="padding-left:10px">
Benjamin Kramer665a8dc2012-01-15 15:26:07 +0000140<a href="images/analyzer_xcode.png"><img src="images/analyzer_xcode.png" width="450" alt="analyzer in xcode"></a>
141<div style="text-align:center"><b>Viewing static analyzer results in Xcode 3.2</b></div>
142<a href="images/analyzer_html.png"><img src="images/analyzer_html.png" width="450" alt="analyzer in browser"></a>
143<div style="text-align:center"><b>Viewing static analyzer results in a web browser</b></div>
Ted Kremenek8bebc6e2010-02-09 23:05:59 +0000144</td></tr></table>
145
Ted Kremenek591b9072009-06-08 21:21:24 +0000146<h2 id="StaticAnalysis">What is Static Analysis?</h2>
147
148<p>The term &quot;static analysis&quot; is conflated, but here we use it to mean
149a collection of algorithms and techniques used to analyze source code in order
150to automatically find bugs. The idea is similar in spirit to compiler warnings
151(which can be useful for finding coding errors) but to take that idea a step
152further and find bugs that are traditionally found using run-time debugging
153techniques such as testing.</p>
154
155<p>Static analysis bug-finding tools have evolved over the last several decades
156from basic syntactic checkers to those that find deep bugs by reasoning about
157the semantics of code. The goal of the Clang Static Analyzer is to provide a
158industrial-quality static analysis framework for analyzing C and Objective-C
159programs that is freely available, extensible, and has a high quality of
160implementation.</p>
161
162<h3 id="Clang">Part of Clang and LLVM</h3>
163
164<p>As its name implies, the Clang Static Analyzer is built on top of <a
165href="http://clang.llvm.org">Clang</a> and <a href="http://llvm.org">LLVM</a>.
166Strictly speaking, the analyzer is part of Clang, as Clang consists of a set of
167reusable C++ libraries for building powerful source-level tools. The static
168analysis engine used by the Clang Static Analyzer is a Clang library, and has
169the capability to be reused in different contexts and by different clients.</p>
170
171<h2>Important Points to Consider</h2>
172
173<p>While we believe that the static analyzer is already very useful for finding
174bugs, we ask you to bear in mind a few points when using it.</p>
175
176<h3>Work-in-Progress</h3>
177
178<p>The analyzer is a continuous work-in-progress.
179There are many planned enhancements to improve both the precision and scope of
180its analysis algorithms as well as the kinds bugs it will find. While there are
181fundamental limitations to what static analysis can do, we have a long way to go
182before hitting that wall.</p>
183
184<h3>Slower than Compilation</h3>
185
186<p>Operationally, using static analysis to
187automatically find deep program bugs is about trading CPU time for the hardening
188of code. Because of the deep analysis performed by state-of-the-art static
189analysis tools, static analysis can be much slower than compilation.</p>
190
191<p>While the Clang Static Analyzer is being designed to be as fast and
192light-weight as possible, please do not expect it to be as fast as compiling a
193program (even with optimizations enabled). Some of the algorithms needed to find
194bugs require in the worst case exponential time.</p>
195
196<p>The Clang Static Analyzer runs in a reasonable amount of time by both
197bounding the amount of checking work it will do as well as using clever
Benjamin Kramer665a8dc2012-01-15 15:26:07 +0000198algorithms to reduce the amount of work it must do to find bugs.</p>
Ted Kremenek591b9072009-06-08 21:21:24 +0000199
200<h3>False Positives</h3>
201
202<p>Static analysis is not perfect. It can falsely flag bugs in a program where
203the code behaves correctly. Because some code checks require more analysis
204precision than others, the frequency of false positives can vary widely between
205different checks. Our long-term goal is to have the analyzer have a low false
206positive rate for most code on all checks.</p>
207
208<p>Please help us in this endeavor by <a href="filing_bugs.html">reporting false
209positives</a>. False positives cannot be addressed unless we know about
210them.</p>
211
212<h3>More Checks</h3>
213
Zhongxing Xu0c3a16d2009-06-15 13:22:32 +0000214<p>Static analysis is not magic; a static analyzer can only find bugs that it
215has been specifically engineered to find. If there are specific kinds of bugs
216you would like the Clang Static Analyzer to find, please feel free to
217file <a href="filing_bugs.html">feature requests</a> or contribute your own
218patches.</p>
Ted Kremenek591b9072009-06-08 21:21:24 +0000219
220</div>
Ted Kremenek8bebc6e2010-02-09 23:05:59 +0000221</div>
Ted Kremenek591b9072009-06-08 21:21:24 +0000222</body>
223</html>
224