AnalysisManager can now be used to for analyses over TranslationUnits.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58766 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Driver/AnalysisConsumer.cpp b/Driver/AnalysisConsumer.cpp
index 5f338c8..f01a755 100644
--- a/Driver/AnalysisConsumer.cpp
+++ b/Driver/AnalysisConsumer.cpp
@@ -112,8 +112,11 @@
     
   
   class VISIBILITY_HIDDEN AnalysisManager : public BugReporterData {
-    Decl* D;
-    Stmt* Body;    
+    Decl* D; Stmt* Body; 
+    TranslationUnit* TU;
+    
+    enum AnalysisScope { ScopeTU, ScopeDecl } AScope;
+      
     AnalysisConsumer& C;
     bool DisplayedFunction;
     
@@ -123,11 +126,25 @@
 
   public:
     AnalysisManager(AnalysisConsumer& c, Decl* d, Stmt* b) 
-    : D(d), Body(b), C(c), DisplayedFunction(false) {}
+    : D(d), Body(b), TU(0), AScope(ScopeDecl), C(c), DisplayedFunction(false) {}
     
+    AnalysisManager(AnalysisConsumer& c, TranslationUnit* tu) 
+    : D(0), Body(0), TU(tu), AScope(ScopeTU), C(c), DisplayedFunction(false) {}    
     
-    Decl* getCodeDecl() const { return D; }
-    Stmt* getBody() const { return Body; }
+    Decl* getCodeDecl() const { 
+      assert (AScope == ScopeDecl);
+      return D;
+    }
+    
+    Stmt* getBody() const {
+      assert (AScope == ScopeDecl);
+      return Body;
+    }
+    
+    TranslationUnit* getTranslationUnit() const {
+      assert (AScope == ScopeTU);
+      return TU;
+    }    
     
     GRStateManager::StoreManagerCreator getStoreManagerCreator() {
       switch (C.SM) {