Remove 'AnalysisContext::setDecl()', as we the Decl associated with an
AnalysisContext should never change. Along the way, propagate some constness
around.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@79701 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/AnalysisContext.cpp b/lib/Analysis/AnalysisContext.cpp
index ef47ece..da671d6 100644
--- a/lib/Analysis/AnalysisContext.cpp
+++ b/lib/Analysis/AnalysisContext.cpp
@@ -28,10 +28,15 @@
   delete PM;
 }
 
+AnalysisContextManager::~AnalysisContextManager() {
+  for (ContextMap::iterator I = Contexts.begin(), E = Contexts.end(); I!=E; ++I)
+    delete I->second;
+}
+
 Stmt *AnalysisContext::getBody() {
-  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
+  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
     return FD->getBody();
-  else if (ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D))
+  else if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D))
     return MD->getBody();
 
   llvm::llvm_unreachable("unknown code decl");
@@ -70,14 +75,12 @@
   return liveness;
 }
 
-AnalysisContext *AnalysisContextManager::getContext(Decl *D) {
-  iterator I = Contexts.find(D);
-  if (I != Contexts.end())
-    return &(I->second);
-
-  AnalysisContext &Ctx = Contexts[D];
-  Ctx.setDecl(D);
-  return &Ctx;
+AnalysisContext *AnalysisContextManager::getContext(const Decl *D) {
+  AnalysisContext *&AC = Contexts[D];
+  if (!AC)
+    AC = new AnalysisContext(D);
+  
+  return AC;
 }
 
 void LocationContext::Profile(llvm::FoldingSetNodeID &ID, ContextKind k,