166 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			HTML
		
	
	
	
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 | |
|           "http://www.w3.org/TR/html4/strict.dtd">
 | |
| <html>
 | |
| <head>
 | |
|   <title>Implicit Checks</title>
 | |
|   <link type="text/css" rel="stylesheet" href="menu.css">
 | |
|   <link type="text/css" rel="stylesheet" href="content.css">
 | |
|   <script type="text/javascript" src="scripts/menu.js"></script>
 | |
|   <script type="text/javascript" src="scripts/expandcollapse.js"></script>
 | |
|   <style type="text/css">
 | |
|   tr:first-child { width:20%; }
 | |
|   </style>
 | |
| </head>
 | |
| <body onload="initExpandCollapse()">
 | |
| 
 | |
| <div id="page">
 | |
| <!--#include virtual="menu.html.incl"-->
 | |
| 
 | |
| <div id="content">
 | |
| <h1>Implicit Checkers</h1>
 | |
| Even though the implicit checkers do not produce any warnings, they are used to 
 | |
| support the analyzer core and model known APIs. See also 
 | |
| <a href = "available_checks.html">Default Checkers</a>
 | |
| and <a href = "alpha_checks.html">Experimental (Alpha) Checkers</a>.
 | |
| <ul>
 | |
| <li><a href="#core_implicit_checkers">Core Implicit Checkers</a></li>
 | |
| <li><a href="#osx_implicit_checkers">OS X Implicit Checkers</a></li>
 | |
| </ul>
 | |
| 
 | |
| <!------------------------------- core implicit ------------------------------->
 | |
| <h3 id="core_implicit_checkers">Core Implicit Checkers</h3>
 | |
| <table class="checkers">
 | |
| <colgroup><col class="namedescr"><col class="example"></colgroup>
 | |
| <thead><tr><td>Name, Description</td><td>Example</td></tr></thead>
 | |
| 
 | |
| <tbody>
 | |
| <tr><td><div class="namedescr expandable"><span class="name">
 | |
| core.DynamicTypePropagation</span><span class="lang">
 | |
| (C++, ObjC)</span><div class="descr">
 | |
| Generate dynamic type information.</div></div></td>
 | |
| <td><div class="exampleContainer expandable">
 | |
| <div class="example"><pre>
 | |
| // C++
 | |
| class A {
 | |
| public:
 | |
|   A(int x) {}
 | |
|   virtual int foo();
 | |
| };
 | |
| 
 | |
| class B: public A {
 | |
| public:
 | |
|   B()
 | |
|   :A(foo()) 
 | |
|   // DynamicTypeInfo for 'this' rigion will wrap type 'A'
 | |
|   // unless the base constructor call expression is processed
 | |
|   {} 
 | |
|   virtual int foo();
 | |
| };
 | |
| </pre></div><div class="separator"></div>
 | |
| <div class="example"><pre>
 | |
| // Objective-C
 | |
| @interface MyClass : NSObject {}
 | |
| @end
 | |
| 
 | |
| @implementation MyClass
 | |
| + (void)foo {
 | |
|   MyClass *x = [[self alloc] init];
 | |
|   // DynamicTypeInfo from a cast: from 'id' to 'MyClass *'
 | |
| }
 | |
| @end
 | |
| 
 | |
| void test() {
 | |
|   MyClass *x = [MyClass alloc];
 | |
|   // DynamicTypeInfo from a call to alloc:
 | |
|   // from 'id' to 'MyClass *'
 | |
| }
 | |
| </pre></div></div></td></tr>
 | |
| 
 | |
| 
 | |
| <tr><td><div class="namedescr expandable"><span class="name">
 | |
| core.builtin.BuiltinFunctions</span><span class="lang">
 | |
| (C)</span><div class="descr">
 | |
| Evaluate compiler builtin functions (e.g., <code>alloca()</code>)</div></div></td>
 | |
| <td><div class="exampleContainer expandable">
 | |
| <div class="example"><pre>
 | |
| void test(int x) {
 | |
|   int *p = (int *)__builtin_alloca(8);
 | |
|     // evaluates to AllocaRegion
 | |
| 
 | |
|   if(__builtin_expect(x > 10, 0)) // evaluates to 'x > 10'
 | |
|     x = 0;
 | |
| }
 | |
| </pre></div></div></td></tr>
 | |
| 
 | |
| 
 | |
| <tr><td><div class="namedescr expandable"><span class="name">
 | |
| core.builtin.NoReturnFunctions</span><span class="lang">
 | |
| (C, ObjC)</span><div class="descr">
 | |
| Evaluate "panic" functions that are known to not return to the caller.</div></div></td>
 | |
| <td><div class="exampleContainer expandable">
 | |
| <div class="example"><pre>
 | |
| // C
 | |
| void test() {
 | |
|   panic(); // generate sink
 | |
| }
 | |
| </pre></div><div class="separator"></div>
 | |
| <div class="example"><pre>
 | |
| // Objective-C
 | |
| @interface MyObj : NSObject {}
 | |
| - (void)foo;
 | |
| @end
 | |
| 
 | |
| @implementation MyObj
 | |
| - (void)foo {
 | |
|   [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd 
 | |
|                                        object:self 
 | |
|                                        file:(@"somefile.m") 
 | |
|                                        lineNumber:1 
 | |
|                                        description:(@"some text")];
 | |
|     // generate sink
 | |
| }
 | |
| @end
 | |
| </pre></div></div></td></tr>
 | |
| 
 | |
| </tbody></table>
 | |
| 
 | |
| <!---------------------------- OS X implicit ---------------------------------->
 | |
| <h3 id="osx_implicit_checkers">OS X Implicit Checkers</h3>
 | |
| <table class="checkers">
 | |
| <colgroup><col class="namedescr"><col class="example"></colgroup>
 | |
| <thead><tr><td>Name, Description</td><td>Example</td></tr></thead>
 | |
| 
 | |
| <tbody>
 | |
| <tr><td><div class="namedescr expandable"><span class="name">
 | |
| osx.cocoa.Loops</span><span class="lang">
 | |
| (ObjC)</span><div class="descr">
 | |
| Improved modeling of loops using Cocoa collection types.</div></div></td>
 | |
| <td><div class="exampleContainer expandable">
 | |
| <div class="example"><pre>
 | |
| void test() {
 | |
|   id x;
 | |
|   for (x in [NSArray testObject]) { 
 | |
|     // assume the value of 'x' is non-nil
 | |
|   }
 | |
| }
 | |
| </pre></div></div></td></tr>
 | |
| 
 | |
| 
 | |
| <tr><td><div class="namedescr expandable"><span class="name">
 | |
| osx.cocoa.NonNilReturnValue</span><span class="lang">
 | |
| (ObjC)</span><div class="descr">
 | |
| Model the APIs that are guaranteed to return a non-nil value.</div></div></td>
 | |
| <td><div class="exampleContainer expandable">
 | |
| <div class="example"><pre>
 | |
| void test(NSArray *A) {
 | |
|   id subscriptObj = A[1]; // assume the value is non-nil
 | |
| }
 | |
| </pre></div></div></td></tr>
 | |
| 
 | |
| </tbody></table>
 | |
| 
 | |
| </div> <!-- page -->
 | |
| </div> <!-- content -->
 | |
| </body>
 | |
| </html>
 |