forked from OSchip/llvm-project
				
			[analyzer] Look through OpaqueValueExprs when tracking a nil value.
This allows us to show /why/ a particular object is nil, even when it is wrapped in an OpaqueValueExpr. llvm-svn: 164445
This commit is contained in:
		
							parent
							
								
									106b037a85
								
							
						
					
					
						commit
						6f3d2f0acd
					
				| 
						 | 
				
			
			@ -499,6 +499,9 @@ void bugreporter::trackNullOrUndefValue(const ExplodedNode *N, const Stmt *S,
 | 
			
		|||
  if (!S || !N)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (const OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(S))
 | 
			
		||||
    S = OVE->getSourceExpr();
 | 
			
		||||
 | 
			
		||||
  ProgramStateManager &StateMgr = N->getState()->getStateManager();
 | 
			
		||||
 | 
			
		||||
  // Walk through nodes until we get one that matches the statement exactly.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,469 @@
 | 
			
		|||
// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -verify %s
 | 
			
		||||
// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o %t.plist
 | 
			
		||||
// RUN: FileCheck --input-file=%t.plist %s
 | 
			
		||||
 | 
			
		||||
@interface Test
 | 
			
		||||
@property int *p;
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
int *getZeroIfNil(Test *x) {
 | 
			
		||||
  return x.p;
 | 
			
		||||
  // expected-note@-1 {{No method is called because the receiver is nil}}
 | 
			
		||||
  // expected-note@-2 {{Returning null pointer}}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void testReturnZeroIfNil() {
 | 
			
		||||
  *getZeroIfNil(0) = 1; // expected-warning{{Dereference of null pointer}}
 | 
			
		||||
  // expected-note@-1 {{Calling 'getZeroIfNil'}}
 | 
			
		||||
  // expected-note@-2 {{Passing nil object reference via 1st parameter 'x'}}
 | 
			
		||||
  // expected-note@-3 {{Returning from 'getZeroIfNil'}}
 | 
			
		||||
  // expected-note@-4 {{Dereference of null pointer}}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// CHECK:  <key>diagnostics</key>
 | 
			
		||||
// CHECK-NEXT:  <array>
 | 
			
		||||
// CHECK-NEXT:   <dict>
 | 
			
		||||
// CHECK-NEXT:    <key>path</key>
 | 
			
		||||
// CHECK-NEXT:    <array>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>control</string>
 | 
			
		||||
// CHECK-NEXT:      <key>edges</key>
 | 
			
		||||
// CHECK-NEXT:       <array>
 | 
			
		||||
// CHECK-NEXT:        <dict>
 | 
			
		||||
// CHECK-NEXT:         <key>start</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:         <key>end</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>17</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>17</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:        </dict>
 | 
			
		||||
// CHECK-NEXT:       </array>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>event</string>
 | 
			
		||||
// CHECK-NEXT:      <key>location</key>
 | 
			
		||||
// CHECK-NEXT:      <dict>
 | 
			
		||||
// CHECK-NEXT:       <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>col</key><integer>17</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:      </dict>
 | 
			
		||||
// CHECK-NEXT:      <key>ranges</key>
 | 
			
		||||
// CHECK-NEXT:      <array>
 | 
			
		||||
// CHECK-NEXT:        <array>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>17</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>17</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:        </array>
 | 
			
		||||
// CHECK-NEXT:      </array>
 | 
			
		||||
// CHECK-NEXT:      <key>depth</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:      <key>extended_message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Passing nil object reference via 1st parameter 'x'</string>
 | 
			
		||||
// CHECK-NEXT:      <key>message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Passing nil object reference via 1st parameter 'x'</string>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>control</string>
 | 
			
		||||
// CHECK-NEXT:      <key>edges</key>
 | 
			
		||||
// CHECK-NEXT:       <array>
 | 
			
		||||
// CHECK-NEXT:        <dict>
 | 
			
		||||
// CHECK-NEXT:         <key>start</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>17</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>17</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:         <key>end</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>4</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>15</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:        </dict>
 | 
			
		||||
// CHECK-NEXT:       </array>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>event</string>
 | 
			
		||||
// CHECK-NEXT:      <key>location</key>
 | 
			
		||||
// CHECK-NEXT:      <dict>
 | 
			
		||||
// CHECK-NEXT:       <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>col</key><integer>4</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:      </dict>
 | 
			
		||||
// CHECK-NEXT:      <key>ranges</key>
 | 
			
		||||
// CHECK-NEXT:      <array>
 | 
			
		||||
// CHECK-NEXT:        <array>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>4</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>18</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:        </array>
 | 
			
		||||
// CHECK-NEXT:      </array>
 | 
			
		||||
// CHECK-NEXT:      <key>depth</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:      <key>extended_message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Calling 'getZeroIfNil'</string>
 | 
			
		||||
// CHECK-NEXT:      <key>message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Calling 'getZeroIfNil'</string>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>event</string>
 | 
			
		||||
// CHECK-NEXT:      <key>location</key>
 | 
			
		||||
// CHECK-NEXT:      <dict>
 | 
			
		||||
// CHECK-NEXT:       <key>line</key><integer>9</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>col</key><integer>1</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:      </dict>
 | 
			
		||||
// CHECK-NEXT:      <key>depth</key><integer>1</integer>
 | 
			
		||||
// CHECK-NEXT:      <key>extended_message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Entered call from 'testReturnZeroIfNil'</string>
 | 
			
		||||
// CHECK-NEXT:      <key>message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Entered call from 'testReturnZeroIfNil'</string>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>control</string>
 | 
			
		||||
// CHECK-NEXT:      <key>edges</key>
 | 
			
		||||
// CHECK-NEXT:       <array>
 | 
			
		||||
// CHECK-NEXT:        <dict>
 | 
			
		||||
// CHECK-NEXT:         <key>start</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>9</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>1</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>9</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:         <key>end</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>8</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:        </dict>
 | 
			
		||||
// CHECK-NEXT:       </array>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>control</string>
 | 
			
		||||
// CHECK-NEXT:      <key>edges</key>
 | 
			
		||||
// CHECK-NEXT:       <array>
 | 
			
		||||
// CHECK-NEXT:        <dict>
 | 
			
		||||
// CHECK-NEXT:         <key>start</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>8</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:         <key>end</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:        </dict>
 | 
			
		||||
// CHECK-NEXT:       </array>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>event</string>
 | 
			
		||||
// CHECK-NEXT:      <key>location</key>
 | 
			
		||||
// CHECK-NEXT:      <dict>
 | 
			
		||||
// CHECK-NEXT:       <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>col</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:      </dict>
 | 
			
		||||
// CHECK-NEXT:      <key>ranges</key>
 | 
			
		||||
// CHECK-NEXT:      <array>
 | 
			
		||||
// CHECK-NEXT:        <array>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:        </array>
 | 
			
		||||
// CHECK-NEXT:      </array>
 | 
			
		||||
// CHECK-NEXT:      <key>depth</key><integer>1</integer>
 | 
			
		||||
// CHECK-NEXT:      <key>extended_message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>No method is called because the receiver is nil</string>
 | 
			
		||||
// CHECK-NEXT:      <key>message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>No method is called because the receiver is nil</string>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>control</string>
 | 
			
		||||
// CHECK-NEXT:      <key>edges</key>
 | 
			
		||||
// CHECK-NEXT:       <array>
 | 
			
		||||
// CHECK-NEXT:        <dict>
 | 
			
		||||
// CHECK-NEXT:         <key>start</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:         <key>end</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>8</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:        </dict>
 | 
			
		||||
// CHECK-NEXT:       </array>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>event</string>
 | 
			
		||||
// CHECK-NEXT:      <key>location</key>
 | 
			
		||||
// CHECK-NEXT:      <dict>
 | 
			
		||||
// CHECK-NEXT:       <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:      </dict>
 | 
			
		||||
// CHECK-NEXT:      <key>ranges</key>
 | 
			
		||||
// CHECK-NEXT:      <array>
 | 
			
		||||
// CHECK-NEXT:        <array>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>10</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>12</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:        </array>
 | 
			
		||||
// CHECK-NEXT:      </array>
 | 
			
		||||
// CHECK-NEXT:      <key>depth</key><integer>1</integer>
 | 
			
		||||
// CHECK-NEXT:      <key>extended_message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Returning null pointer</string>
 | 
			
		||||
// CHECK-NEXT:      <key>message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Returning null pointer</string>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>event</string>
 | 
			
		||||
// CHECK-NEXT:      <key>location</key>
 | 
			
		||||
// CHECK-NEXT:      <dict>
 | 
			
		||||
// CHECK-NEXT:       <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>col</key><integer>4</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:      </dict>
 | 
			
		||||
// CHECK-NEXT:      <key>ranges</key>
 | 
			
		||||
// CHECK-NEXT:      <array>
 | 
			
		||||
// CHECK-NEXT:        <array>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>4</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>18</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:        </array>
 | 
			
		||||
// CHECK-NEXT:      </array>
 | 
			
		||||
// CHECK-NEXT:      <key>depth</key><integer>1</integer>
 | 
			
		||||
// CHECK-NEXT:      <key>extended_message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Returning from 'getZeroIfNil'</string>
 | 
			
		||||
// CHECK-NEXT:      <key>message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Returning from 'getZeroIfNil'</string>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>control</string>
 | 
			
		||||
// CHECK-NEXT:      <key>edges</key>
 | 
			
		||||
// CHECK-NEXT:       <array>
 | 
			
		||||
// CHECK-NEXT:        <dict>
 | 
			
		||||
// CHECK-NEXT:         <key>start</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:         <key>end</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>4</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>15</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:        </dict>
 | 
			
		||||
// CHECK-NEXT:       </array>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>control</string>
 | 
			
		||||
// CHECK-NEXT:      <key>edges</key>
 | 
			
		||||
// CHECK-NEXT:       <array>
 | 
			
		||||
// CHECK-NEXT:        <dict>
 | 
			
		||||
// CHECK-NEXT:         <key>start</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>4</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>15</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:         <key>end</key>
 | 
			
		||||
// CHECK-NEXT:          <array>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:           <dict>
 | 
			
		||||
// CHECK-NEXT:            <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:            <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:           </dict>
 | 
			
		||||
// CHECK-NEXT:          </array>
 | 
			
		||||
// CHECK-NEXT:        </dict>
 | 
			
		||||
// CHECK-NEXT:       </array>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:     <dict>
 | 
			
		||||
// CHECK-NEXT:      <key>kind</key><string>event</string>
 | 
			
		||||
// CHECK-NEXT:      <key>location</key>
 | 
			
		||||
// CHECK-NEXT:      <dict>
 | 
			
		||||
// CHECK-NEXT:       <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:       <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:      </dict>
 | 
			
		||||
// CHECK-NEXT:      <key>ranges</key>
 | 
			
		||||
// CHECK-NEXT:      <array>
 | 
			
		||||
// CHECK-NEXT:        <array>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:         <dict>
 | 
			
		||||
// CHECK-NEXT:          <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>col</key><integer>22</integer>
 | 
			
		||||
// CHECK-NEXT:          <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:         </dict>
 | 
			
		||||
// CHECK-NEXT:        </array>
 | 
			
		||||
// CHECK-NEXT:      </array>
 | 
			
		||||
// CHECK-NEXT:      <key>depth</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:      <key>extended_message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Dereference of null pointer</string>
 | 
			
		||||
// CHECK-NEXT:      <key>message</key>
 | 
			
		||||
// CHECK-NEXT:      <string>Dereference of null pointer</string>
 | 
			
		||||
// CHECK-NEXT:     </dict>
 | 
			
		||||
// CHECK-NEXT:    </array>
 | 
			
		||||
// CHECK-NEXT:    <key>description</key><string>Dereference of null pointer</string>
 | 
			
		||||
// CHECK-NEXT:    <key>category</key><string>Logic error</string>
 | 
			
		||||
// CHECK-NEXT:    <key>type</key><string>Dereference of null pointer</string>
 | 
			
		||||
// CHECK-NEXT:   <key>issue_context_kind</key><string>function</string>
 | 
			
		||||
// CHECK-NEXT:   <key>issue_context</key><string>testReturnZeroIfNil</string>
 | 
			
		||||
// CHECK-NEXT:   <key>issue_hash</key><integer>1</integer>
 | 
			
		||||
// CHECK-NEXT:   <key>location</key>
 | 
			
		||||
// CHECK-NEXT:   <dict>
 | 
			
		||||
// CHECK-NEXT:    <key>line</key><integer>16</integer>
 | 
			
		||||
// CHECK-NEXT:    <key>col</key><integer>3</integer>
 | 
			
		||||
// CHECK-NEXT:    <key>file</key><integer>0</integer>
 | 
			
		||||
// CHECK-NEXT:   </dict>
 | 
			
		||||
// CHECK-NEXT:   </dict>
 | 
			
		||||
// CHECK-NEXT:  </array>
 | 
			
		||||
		Loading…
	
		Reference in New Issue