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>
 |