r228247 - [analyzer] Look for allocation site in the parent frames as well as the current one.

Anna Zaks ganna at apple.com
Wed Feb 4 17:02:53 PST 2015


Author: zaks
Date: Wed Feb  4 19:02:53 2015
New Revision: 228247

URL: http://llvm.org/viewvc/llvm-project?rev=228247&view=rev
Log:
[analyzer] Look for allocation site in the parent frames as well as the current one.

Instead of handling edge cases (mostly involving blocks), where we have difficulty finding
an allocation statement, allow the allocation site to be in a parent node.

Previously we assumed that the allocation site can always be found in the same frame
as allocation, but there are scenarios in which an element is leaked in a child
frame but is allocated in the parent.

Modified:
    cfe/trunk/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp
    cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
    cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
    cfe/trunk/test/Analysis/objc-radar17039661.m

Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp?rev=228247&r1=228246&r2=228247&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp Wed Feb  4 19:02:53 2015
@@ -499,9 +499,11 @@ MacOSKeychainAPIChecker::getAllocationNo
   while (N) {
     if (!N->getState()->get<AllocatedData>(Sym))
       break;
-    // Allocation node, is the last node in the current context in which the
-    // symbol was tracked.
-    if (N->getLocationContext() == LeakContext)
+    // Allocation node, is the last node in the current or parent context in
+    // which the symbol was tracked.
+    const LocationContext *NContext = N->getLocationContext();
+    if (NContext == LeakContext ||
+        NContext->isParentOf(LeakContext))
       AllocNode = N;
     N = N->pred_empty() ? nullptr : *(N->pred_begin());
   }

Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp?rev=228247&r1=228246&r2=228247&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp Wed Feb  4 19:02:53 2015
@@ -1801,9 +1801,11 @@ MallocChecker::getAllocationSite(const E
         }
       }
 
-    // Allocation node, is the last node in the current context in which the
-    // symbol was tracked.
-    if (N->getLocationContext() == LeakContext)
+    // Allocation node, is the last node in the current or parent context in
+    // which the symbol was tracked.
+    const LocationContext *NContext = N->getLocationContext();
+    if (NContext == LeakContext ||
+        NContext->isParentOf(LeakContext))
       AllocNode = N;
     N = N->pred_empty() ? nullptr : *(N->pred_begin());
   }

Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp?rev=228247&r1=228246&r2=228247&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp Wed Feb  4 19:02:53 2015
@@ -2190,7 +2190,7 @@ static AllocationInfo
 GetAllocationSite(ProgramStateManager& StateMgr, const ExplodedNode *N,
                   SymbolRef Sym) {
   const ExplodedNode *AllocationNode = N;
-  const ExplodedNode *AllocationNodeInCurrentContext = N;
+  const ExplodedNode *AllocationNodeInCurrentOrParentContext = N;
   const MemRegion *FirstBinding = nullptr;
   const LocationContext *LeakContext = N->getLocationContext();
 
@@ -2220,10 +2220,15 @@ GetAllocationSite(ProgramStateManager& S
     // AllocationNode is the last node in which the symbol was tracked.
     AllocationNode = N;
 
-    // AllocationNodeInCurrentContext, is the last node in the current context
-    // in which the symbol was tracked.
-    if (NContext == LeakContext)
-      AllocationNodeInCurrentContext = N;
+    // AllocationNodeInCurrentContext, is the last node in the current or
+    // parent context in which the symbol was tracked.
+    //
+    // Note that the allocation site might be in the parent conext. For example,
+    // the case where an allocation happens in a block that captures a reference
+    // to it and that reference is overwritten/dropped by another call to
+    // the block.
+    if (NContext == LeakContext || NContext->isParentOf(LeakContext))
+      AllocationNodeInCurrentOrParentContext = N;
 
     // Find the last init that was called on the given symbol and store the
     // init method's location context.
@@ -2261,7 +2266,7 @@ GetAllocationSite(ProgramStateManager& S
     FirstBinding = nullptr;
   }
 
-  return AllocationInfo(AllocationNodeInCurrentContext,
+  return AllocationInfo(AllocationNodeInCurrentOrParentContext,
                         FirstBinding,
                         InterestingMethodContext);
 }
@@ -2392,20 +2397,8 @@ CFRefLeakReport::CFRefLeakReport(CFRefBu
   ProgramPoint P = AllocNode->getLocation();
   if (Optional<CallExitEnd> Exit = P.getAs<CallExitEnd>())
     AllocStmt = Exit->getCalleeContext()->getCallSite();
-  else {
-    // We are going to get a BlockEdge when the leak and allocation happen in
-    // different, non-nested frames (contexts). For example, the case where an
-    // allocation happens in a block that captures a reference to it and
-    // that reference is overwritten/dropped by another call to the block.
-    if (Optional<BlockEdge> Edge = P.getAs<BlockEdge>()) {
-      if (Optional<CFGStmt> St = Edge->getDst()->front().getAs<CFGStmt>()) {
-        AllocStmt = St->getStmt();
-      }
-    }
-    else {
-      AllocStmt = P.castAs<PostStmt>().getStmt();
-    }
-  }
+  else
+    AllocStmt = P.castAs<PostStmt>().getStmt();
   assert(AllocStmt && "Cannot find allocation statement");
 
   PathDiagnosticLocation AllocLocation =

Modified: cfe/trunk/test/Analysis/objc-radar17039661.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/objc-radar17039661.m?rev=228247&r1=228246&r2=228247&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/objc-radar17039661.m (original)
+++ cfe/trunk/test/Analysis/objc-radar17039661.m Wed Feb  4 19:02:53 2015
@@ -1,5 +1,6 @@
-// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.RetainCount -verify -fblocks %s
-
+// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.RetainCount -fblocks -verify %s
+// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.RetainCount -fblocks -analyzer-output=plist-multi-file -analyzer-config path-diagnostics-alternate=false %s -o %t
+// RUN: FileCheck --input-file=%t %s
 @class NSString;
 typedef long NSInteger;
 typedef unsigned char BOOL;
@@ -13,14 +14,13 @@ typedef unsigned char BOOL;
 @interface NSNumber : NSObject
 + (NSNumber *)numberWithInteger:(NSInteger)value __attribute__((availability(ios,introduced=2.0)));
 @end
-
 NSInteger *inoutIntegerValueGlobal;
 NSInteger *inoutIntegerValueGlobal2;
 NSString *traitNameGlobal;
 static BOOL cond;
 
 static inline void reallyPerformAction(void (^integerHandler)(NSInteger *inoutIntegerValue, NSString *traitName)) {
-  integerHandler(inoutIntegerValueGlobal, traitNameGlobal);
+  integerHandler(inoutIntegerValueGlobal, traitNameGlobal); // expected-warning {{Potential leak of an object}}
   integerHandler(inoutIntegerValueGlobal2,traitNameGlobal);
 }
 
@@ -47,7 +47,7 @@ static inline BOOL performAction(NSNumbe
 void runTest() {
   __attribute__((__blocks__(byref))) NSNumber *builtinResult = ((NSNumber *)0);
   BOOL wasBuiltinTrait = performAction(^(NSNumber *traitValue) {
-    builtinResult = [traitValue retain]; // expected-warning {{Potential leak of an object}}
+    builtinResult = [traitValue retain];
 
     return traitValue;
   });
@@ -58,3 +58,1176 @@ void runTest() {
     return;
   }
 }
+
+// CHECK: <key>diagnostics</key>
+// CHECK: <array>
+// CHECK:  <dict>
+// CHECK:   <key>path</key>
+// CHECK:   <array>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>48</integer>
+// CHECK:           <key>col</key><integer>3</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>48</integer>
+// CHECK:           <key>col</key><integer>15</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>49</integer>
+// CHECK:           <key>col</key><integer>26</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>49</integer>
+// CHECK:           <key>col</key><integer>38</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>49</integer>
+// CHECK:      <key>col</key><integer>26</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>49</integer>
+// CHECK:         <key>col</key><integer>26</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>53</integer>
+// CHECK:         <key>col</key><integer>4</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>0</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Calling 'performAction'</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Calling 'performAction'</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>27</integer>
+// CHECK:      <key>col</key><integer>1</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>depth</key><integer>1</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Entered call from 'runTest'</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Entered call from 'runTest'</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>27</integer>
+// CHECK:           <key>col</key><integer>1</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>27</integer>
+// CHECK:           <key>col</key><integer>6</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>28</integer>
+// CHECK:           <key>col</key><integer>3</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>28</integer>
+// CHECK:           <key>col</key><integer>15</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>28</integer>
+// CHECK:           <key>col</key><integer>3</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>28</integer>
+// CHECK:           <key>col</key><integer>15</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>29</integer>
+// CHECK:           <key>col</key><integer>3</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>29</integer>
+// CHECK:           <key>col</key><integer>21</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>29</integer>
+// CHECK:      <key>col</key><integer>3</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>29</integer>
+// CHECK:         <key>col</key><integer>3</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>43</integer>
+// CHECK:         <key>col</key><integer>4</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>1</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Calling 'reallyPerformAction'</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Calling 'reallyPerformAction'</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>22</integer>
+// CHECK:      <key>col</key><integer>1</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>depth</key><integer>2</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Entered call from 'performAction'</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Entered call from 'performAction'</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>22</integer>
+// CHECK:           <key>col</key><integer>1</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>22</integer>
+// CHECK:           <key>col</key><integer>6</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>23</integer>
+// CHECK:           <key>col</key><integer>3</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>23</integer>
+// CHECK:           <key>col</key><integer>16</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>23</integer>
+// CHECK:      <key>col</key><integer>3</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>23</integer>
+// CHECK:         <key>col</key><integer>3</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>23</integer>
+// CHECK:         <key>col</key><integer>58</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>2</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Calling anonymous block</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Calling anonymous block</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>29</integer>
+// CHECK:      <key>col</key><integer>23</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>depth</key><integer>3</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Entered call from 'reallyPerformAction'</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Entered call from 'reallyPerformAction'</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>29</integer>
+// CHECK:           <key>col</key><integer>23</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>29</integer>
+// CHECK:           <key>col</key><integer>23</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>5</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>6</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>5</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>6</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>9</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>12</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>31</integer>
+// CHECK:      <key>col</key><integer>9</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>31</integer>
+// CHECK:         <key>col</key><integer>9</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>31</integer>
+// CHECK:         <key>col</key><integer>12</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>3</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Assuming 'cond' is not equal to 0</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Assuming 'cond' is not equal to 0</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>9</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>12</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>7</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>14</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>7</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>14</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>30</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>30</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>33</integer>
+// CHECK:      <key>col</key><integer>30</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>33</integer>
+// CHECK:         <key>col</key><integer>30</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>33</integer>
+// CHECK:         <key>col</key><integer>50</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>3</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>NSNumber boxed expression produces an object with a +0 retain count</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>NSNumber boxed expression produces an object with a +0 retain count</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>30</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>30</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>35</integer>
+// CHECK:           <key>col</key><integer>33</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>35</integer>
+// CHECK:           <key>col</key><integer>38</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>35</integer>
+// CHECK:      <key>col</key><integer>33</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>35</integer>
+// CHECK:         <key>col</key><integer>33</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>35</integer>
+// CHECK:         <key>col</key><integer>50</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>3</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Calling anonymous block</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Calling anonymous block</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>49</integer>
+// CHECK:      <key>col</key><integer>40</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>depth</key><integer>4</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Entered call</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Entered call</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>49</integer>
+// CHECK:           <key>col</key><integer>40</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>49</integer>
+// CHECK:           <key>col</key><integer>40</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>50</integer>
+// CHECK:           <key>col</key><integer>5</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>50</integer>
+// CHECK:           <key>col</key><integer>17</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>50</integer>
+// CHECK:           <key>col</key><integer>5</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>50</integer>
+// CHECK:           <key>col</key><integer>17</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>50</integer>
+// CHECK:           <key>col</key><integer>21</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>50</integer>
+// CHECK:           <key>col</key><integer>21</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>50</integer>
+// CHECK:      <key>col</key><integer>21</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>50</integer>
+// CHECK:         <key>col</key><integer>21</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>50</integer>
+// CHECK:         <key>col</key><integer>39</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>50</integer>
+// CHECK:         <key>col</key><integer>22</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>50</integer>
+// CHECK:         <key>col</key><integer>31</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>4</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Reference count incremented. The object now has a +1 retain count</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Reference count incremented. The object now has a +1 retain count</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>35</integer>
+// CHECK:      <key>col</key><integer>33</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>35</integer>
+// CHECK:         <key>col</key><integer>33</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>35</integer>
+// CHECK:         <key>col</key><integer>50</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>3</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Returning to caller</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Returning to caller</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>35</integer>
+// CHECK:           <key>col</key><integer>33</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>35</integer>
+// CHECK:           <key>col</key><integer>38</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>37</integer>
+// CHECK:           <key>col</key><integer>7</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>37</integer>
+// CHECK:           <key>col</key><integer>8</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>37</integer>
+// CHECK:           <key>col</key><integer>7</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>37</integer>
+// CHECK:           <key>col</key><integer>8</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>40</integer>
+// CHECK:           <key>col</key><integer>7</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>40</integer>
+// CHECK:           <key>col</key><integer>18</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>23</integer>
+// CHECK:      <key>col</key><integer>3</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>23</integer>
+// CHECK:         <key>col</key><integer>3</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>23</integer>
+// CHECK:         <key>col</key><integer>58</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>2</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Returning to caller</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Returning to caller</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>23</integer>
+// CHECK:           <key>col</key><integer>3</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>23</integer>
+// CHECK:           <key>col</key><integer>16</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>24</integer>
+// CHECK:           <key>col</key><integer>3</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>24</integer>
+// CHECK:           <key>col</key><integer>16</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>24</integer>
+// CHECK:      <key>col</key><integer>3</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>24</integer>
+// CHECK:         <key>col</key><integer>3</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>24</integer>
+// CHECK:         <key>col</key><integer>58</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>2</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Calling anonymous block</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Calling anonymous block</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>29</integer>
+// CHECK:      <key>col</key><integer>23</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>depth</key><integer>3</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Entered call from 'reallyPerformAction'</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Entered call from 'reallyPerformAction'</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>29</integer>
+// CHECK:           <key>col</key><integer>23</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>29</integer>
+// CHECK:           <key>col</key><integer>23</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>5</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>6</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>5</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>6</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>9</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>12</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>31</integer>
+// CHECK:      <key>col</key><integer>9</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>31</integer>
+// CHECK:         <key>col</key><integer>9</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>31</integer>
+// CHECK:         <key>col</key><integer>12</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>3</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Assuming 'cond' is not equal to 0</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Assuming 'cond' is not equal to 0</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>9</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>31</integer>
+// CHECK:           <key>col</key><integer>12</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>7</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>14</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>7</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>33</integer>
+// CHECK:           <key>col</key><integer>14</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>35</integer>
+// CHECK:           <key>col</key><integer>33</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>35</integer>
+// CHECK:           <key>col</key><integer>38</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>35</integer>
+// CHECK:      <key>col</key><integer>33</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>35</integer>
+// CHECK:         <key>col</key><integer>33</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>35</integer>
+// CHECK:         <key>col</key><integer>50</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>3</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Calling anonymous block</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Calling anonymous block</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>49</integer>
+// CHECK:      <key>col</key><integer>40</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>depth</key><integer>4</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Entered call</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Entered call</string>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>49</integer>
+// CHECK:           <key>col</key><integer>40</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>49</integer>
+// CHECK:           <key>col</key><integer>40</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>50</integer>
+// CHECK:           <key>col</key><integer>5</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>50</integer>
+// CHECK:           <key>col</key><integer>17</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>control</string>
+// CHECK:     <key>edges</key>
+// CHECK:      <array>
+// CHECK:       <dict>
+// CHECK:        <key>start</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>50</integer>
+// CHECK:           <key>col</key><integer>5</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>50</integer>
+// CHECK:           <key>col</key><integer>17</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:        <key>end</key>
+// CHECK:         <array>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>52</integer>
+// CHECK:           <key>col</key><integer>5</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:          <dict>
+// CHECK:           <key>line</key><integer>52</integer>
+// CHECK:           <key>col</key><integer>10</integer>
+// CHECK:           <key>file</key><integer>0</integer>
+// CHECK:          </dict>
+// CHECK:         </array>
+// CHECK:       </dict>
+// CHECK:      </array>
+// CHECK:    </dict>
+// CHECK:    <dict>
+// CHECK:     <key>kind</key><string>event</string>
+// CHECK:     <key>location</key>
+// CHECK:     <dict>
+// CHECK:      <key>line</key><integer>52</integer>
+// CHECK:      <key>col</key><integer>5</integer>
+// CHECK:      <key>file</key><integer>0</integer>
+// CHECK:     </dict>
+// CHECK:     <key>ranges</key>
+// CHECK:     <array>
+// CHECK:       <array>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>52</integer>
+// CHECK:         <key>col</key><integer>5</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:        <dict>
+// CHECK:         <key>line</key><integer>52</integer>
+// CHECK:         <key>col</key><integer>21</integer>
+// CHECK:         <key>file</key><integer>0</integer>
+// CHECK:        </dict>
+// CHECK:       </array>
+// CHECK:     </array>
+// CHECK:     <key>depth</key><integer>4</integer>
+// CHECK:     <key>extended_message</key>
+// CHECK:     <string>Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1</string>
+// CHECK:     <key>message</key>
+// CHECK:     <string>Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1</string>
+// CHECK:    </dict>
+// CHECK:   </array>
+// CHECK:   <key>description</key><string>Potential leak of an object</string>
+// CHECK:   <key>category</key><string>Memory (Core Foundation/Objective-C)</string>
+// CHECK:   <key>type</key><string>Leak</string>
+// CHECK:  <key>location</key>
+// CHECK:  <dict>
+// CHECK:   <key>line</key><integer>52</integer>
+// CHECK:   <key>col</key><integer>5</integer>
+// CHECK:   <key>file</key><integer>0</integer>
+// CHECK:  </dict>
+// CHECK:  </dict>
+// CHECK: </array>
+// CHECK:</dict>
+// CHECK:</plist>





More information about the cfe-commits mailing list