<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Oct 29, 2012, at 20:32 , Anna Zaks <<a href="mailto:ganna@apple.com">ganna@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Oct 29, 2012, at 4:55 PM, Jordan Rose wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><meta http-equiv="Content-Type" content="text/html charset=windows-1252"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br><div><div>On Oct 29, 2012, at 16:19 , Jordan Rose <<a href="mailto:jordan_rose@apple.com">jordan_rose@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><meta http-equiv="Content-Type" content="text/html charset=windows-1252"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br><div><div>On Oct 29, 2012, at 15:51 , Anna Zaks <<a href="mailto:ganna@apple.com">ganna@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">+ExplodedNode *SimpleStreamChecker::reportLeaks(SymbolVector LeakedStreams,</blockquote><blockquote type="cite">+                                               CheckerContext &C) const {<br>+  ExplodedNode *Pred = C.getPredecessor();<br>+  if (LeakedStreams.empty())<br>+    return Pred;<br>+<br>+  // Generate an intermediate node representing the leak point.<br>+  static SimpleProgramPointTag Tag("StreamChecker : Leak");<br>+  ExplodedNode *ErrNode = C.addTransition(Pred->getState(), Pred, &Tag);<br>+  if (!ErrNode)<br>+    return Pred;<br></blockquote><div><br></div><div>Why generate an intermediate node at all? I feel like we could just generate the transition in the caller and then report all the leaks here.</div></div></div></blockquote><br></div><div>Oops, actually this is a bug, even in the final version (next commit). Two addTransition calls = bifurcation.</div></div></blockquote><div><br></div>Two calls to addTransition does not mean that we introduce bifurcation. We would have one node followed by the other one. Bifurcation is when one node has two successors, which leads to exponential blow up.</div></div></blockquote><br></div><div>Oops, I didn't notice that you explicitly specified the predecessor the second time. My bad.</div><div><br></div><br></body></html>