Hooked up the necessary machinery to allow the retain/release checker reference
back to the summary used when evaluating the statement associated with a
simulation node. This is now being used to help improve the checker's
diagnostics. To get things started, the checker now emits a path diagnostic
indicating that 'autorelease' is a no-op in GC mode.

Some of these changes are exposing further grossness in the interface between
BugReporter and the ExplodedGraph::Trim facilities. These really need to be
cleaned up one day.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64881 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/ExplodedGraph.cpp b/lib/Analysis/ExplodedGraph.cpp
index 864a83b..fe9ceca 100644
--- a/lib/Analysis/ExplodedGraph.cpp
+++ b/lib/Analysis/ExplodedGraph.cpp
@@ -123,7 +123,9 @@
 ExplodedGraphImpl*
 ExplodedGraphImpl::Trim(const ExplodedNodeImpl* const* BeginSources,
                         const ExplodedNodeImpl* const* EndSources,
-                        InterExplodedGraphMapImpl* M) const {
+                        InterExplodedGraphMapImpl* M,
+                        llvm::DenseMap<const void*, const void*> *InverseMap) 
+const {
   
   typedef llvm::DenseMap<const ExplodedNodeImpl*,
                          const ExplodedNodeImpl*> Pass1Ty;  
@@ -249,6 +251,7 @@
     
     ExplodedNodeImpl* NewN = G->getNodeImpl(N->getLocation(), N->State, NULL);
     Pass2[N] = NewN;
+    if (InverseMap) (*InverseMap)[NewN] = N;
     
     if (N->Preds.empty())
       G->addRoot(NewN);