blob: cca105a818ad083c7bc34360dd1c7a79185ae53b [file] [log] [blame]
Ted Kremenekf9f689b2009-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 Kramereaa262b2012-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 Kremenek8f8dcba2010-02-12 21:05:44 +00008 <script type="text/javascript" src="scripts/menu.js"></script>
Benjamin Kramereaa262b2012-01-15 15:26:07 +00009 <!-- Generated from: http://www.spiffycorners.com/index.php -->
Ted Kremenekf9f689b2009-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 Kremenekf9f689b2009-06-08 21:21:24 +000052
Ted Kremenekf9f689b2009-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 Kramereaa262b2012-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
Jordan Rosea2d5f0c2013-01-08 19:29:37 +000072<p>The Clang Static Analyzer is a source code analysis tool that finds bugs in
73C, C++, and Objective-C programs.</p>
Benjamin Kramereaa262b2012-01-15 15:26:07 +000074
Jordan Rosea2d5f0c2013-01-08 19:29:37 +000075<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
Benjamin Kramereaa262b2012-01-15 15:26:07 +000078of 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 Kremenekf9f689b2009-06-08 21:21:24 +000086
Ted Kremenekc6ee3762010-02-09 23:05:59 +000087<div style="padding:0px; font-size: 90%">
Ted Kremenekf9f689b2009-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 Kremeneka3e1e992010-02-19 17:33:38 +000096 <h3 style="margin:0px;padding:0px">Mac OS X</h3>
Ted Kremenekf9f689b2009-06-08 21:21:24 +000097 <ul>
Devin Coughline88a7862016-11-16 00:47:56 +000098 <li>Latest build (10.8+):<br>
Ted Kremenekf9f689b2009-06-08 21:21:24 +000099 <!--#include virtual="latest_checker.html.incl"-->
100 </li>
Benjamin Kramereaa262b2012-01-15 15:26:07 +0000101 <li><a href="/release_notes.html">Release notes</a></li>
Ted Kremenekcfc9dc62011-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 Kremenekf9f689b2009-06-08 21:21:24 +0000104 </ul>
Ted Kremeneka3e1e992010-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 Kremenekf9f689b2009-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 Kremeneka3e1e992010-02-19 17:33:38 +0000138
Ted Kremenekc6ee3762010-02-09 23:05:59 +0000139</td><td style="padding-left:10px">
Benjamin Kramereaa262b2012-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>
Jordan Rosea2d5f0c2013-01-08 19:29:37 +0000141<div style="text-align:center"><b>Viewing static analyzer results in Xcode</b></div>
Benjamin Kramereaa262b2012-01-15 15:26:07 +0000142<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 Kremenekc6ee3762010-02-09 23:05:59 +0000144</td></tr></table>
145
Ted Kremenekf9f689b2009-06-08 21:21:24 +0000146<h2 id="StaticAnalysis">What is Static Analysis?</h2>
147
Jordan Rosea2d5f0c2013-01-08 19:29:37 +0000148<p>The term "static analysis" is conflated, but here we use it to mean
Ted Kremenekf9f689b2009-06-08 21:21:24 +0000149a 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
Jordan Rosea2d5f0c2013-01-08 19:29:37 +0000158industrial-quality static analysis framework for analyzing C, C++, and
159Objective-C programs that is freely available, extensible, and has a high quality of implementation.</p>
Ted Kremenekf9f689b2009-06-08 21:21:24 +0000160
161<h3 id="Clang">Part of Clang and LLVM</h3>
162
163<p>As its name implies, the Clang Static Analyzer is built on top of <a
164href="http://clang.llvm.org">Clang</a> and <a href="http://llvm.org">LLVM</a>.
165Strictly speaking, the analyzer is part of Clang, as Clang consists of a set of
166reusable C++ libraries for building powerful source-level tools. The static
167analysis engine used by the Clang Static Analyzer is a Clang library, and has
168the capability to be reused in different contexts and by different clients.</p>
169
170<h2>Important Points to Consider</h2>
171
172<p>While we believe that the static analyzer is already very useful for finding
173bugs, we ask you to bear in mind a few points when using it.</p>
174
175<h3>Work-in-Progress</h3>
176
Jordan Rosea2d5f0c2013-01-08 19:29:37 +0000177<p>The analyzer is a continuous work-in-progress. There are many planned
178enhancements to improve both the precision and scope of its analysis algorithms
179as well as the kinds of bugs it will find. While there are fundamental
180limitations to what static analysis can do, we have a long way to go before
181hitting that wall.</p>
Ted Kremenekf9f689b2009-06-08 21:21:24 +0000182
183<h3>Slower than Compilation</h3>
184
185<p>Operationally, using static analysis to
186automatically find deep program bugs is about trading CPU time for the hardening
187of code. Because of the deep analysis performed by state-of-the-art static
188analysis tools, static analysis can be much slower than compilation.</p>
189
190<p>While the Clang Static Analyzer is being designed to be as fast and
191light-weight as possible, please do not expect it to be as fast as compiling a
192program (even with optimizations enabled). Some of the algorithms needed to find
193bugs require in the worst case exponential time.</p>
194
195<p>The Clang Static Analyzer runs in a reasonable amount of time by both
196bounding the amount of checking work it will do as well as using clever
Benjamin Kramereaa262b2012-01-15 15:26:07 +0000197algorithms to reduce the amount of work it must do to find bugs.</p>
Ted Kremenekf9f689b2009-06-08 21:21:24 +0000198
199<h3>False Positives</h3>
200
201<p>Static analysis is not perfect. It can falsely flag bugs in a program where
202the code behaves correctly. Because some code checks require more analysis
203precision than others, the frequency of false positives can vary widely between
204different checks. Our long-term goal is to have the analyzer have a low false
205positive rate for most code on all checks.</p>
206
207<p>Please help us in this endeavor by <a href="filing_bugs.html">reporting false
208positives</a>. False positives cannot be addressed unless we know about
209them.</p>
210
211<h3>More Checks</h3>
212
Zhongxing Xua2937bc2009-06-15 13:22:32 +0000213<p>Static analysis is not magic; a static analyzer can only find bugs that it
214has been specifically engineered to find. If there are specific kinds of bugs
215you would like the Clang Static Analyzer to find, please feel free to
216file <a href="filing_bugs.html">feature requests</a> or contribute your own
217patches.</p>
Ted Kremenekf9f689b2009-06-08 21:21:24 +0000218
219</div>
Ted Kremenekc6ee3762010-02-09 23:05:59 +0000220</div>
Ted Kremenekf9f689b2009-06-08 21:21:24 +0000221</body>
222</html>
223