]> granicus.if.org Git - clang/commitdiff
Make RegisterInternalChecks() part of GRExprEngine's private implementation by making...
authorTed Kremenek <kremenek@apple.com>
Wed, 25 Nov 2009 21:51:20 +0000 (21:51 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 25 Nov 2009 21:51:20 +0000 (21:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89884 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/PathSensitive/GRExprEngine.h
lib/Analysis/GRExprEngine.cpp
lib/Frontend/AnalysisConsumer.cpp

index 89a21d7875e1fe72a5c39e7d9cb0c87d898f0a77..a7302c0602ec083bc1232f54df5e56bb59760fcb 100644 (file)
@@ -129,8 +129,6 @@ public:
   ExplodedGraph& getGraph() { return G; }
   const ExplodedGraph& getGraph() const { return G; }
 
-  void RegisterInternalChecks();
-
   template <typename CHECKER>
   void registerCheck(CHECKER *check) {
     unsigned entry = Checkers.size();
index bfdbbdbad29cec0bfebc084f99ebf6b8fdd98806..a0040f4e87421a808269e16cb5587fc085a3393a 100644 (file)
@@ -37,6 +37,15 @@ using llvm::dyn_cast;
 using llvm::cast;
 using llvm::APSInt;
 
+//===----------------------------------------------------------------------===//
+// Utility functions.
+//===----------------------------------------------------------------------===//
+
+static inline Selector GetNullarySelector(const char* name, ASTContext& Ctx) {
+  IdentifierInfo* II = &Ctx.Idents.get(name);
+  return Ctx.Selectors.getSelector(0, &II);
+}
+
 //===----------------------------------------------------------------------===//
 // Batch auditor.  DEPRECATED.
 //===----------------------------------------------------------------------===//
@@ -197,12 +206,30 @@ void GRExprEngine::CheckerVisitBind(const Stmt *AssignE, const Stmt *StoreE,
 // Engine construction and deletion.
 //===----------------------------------------------------------------------===//
 
-static inline Selector GetNullarySelector(const char* name, ASTContext& Ctx) {
-  IdentifierInfo* II = &Ctx.Idents.get(name);
-  return Ctx.Selectors.getSelector(0, &II);
+static void RegisterInternalChecks(GRExprEngine &Eng) {
+  // Register internal "built-in" BugTypes with the BugReporter. These BugTypes
+  // are different than what probably many checks will do since they don't
+  // create BugReports on-the-fly but instead wait until GRExprEngine finishes
+  // analyzing a function.  Generation of BugReport objects is done via a call
+  // to 'FlushReports' from BugReporter.
+  // The following checks do not need to have their associated BugTypes
+  // explicitly registered with the BugReporter.  If they issue any BugReports,
+  // their associated BugType will get registered with the BugReporter
+  // automatically.  Note that the check itself is owned by the GRExprEngine
+  // object.  
+  RegisterAttrNonNullChecker(Eng);
+  RegisterCallAndMessageChecker(Eng);
+  RegisterDereferenceChecker(Eng);
+  RegisterVLASizeChecker(Eng);
+  RegisterDivZeroChecker(Eng);
+  RegisterReturnStackAddressChecker(Eng);
+  RegisterReturnUndefChecker(Eng);
+  RegisterUndefinedArraySubscriptChecker(Eng);
+  RegisterUndefinedAssignmentChecker(Eng);
+  RegisterUndefBranchChecker(Eng);
+  RegisterUndefResultChecker(Eng);
 }
 
-
 GRExprEngine::GRExprEngine(AnalysisManager &mgr)
   : AMgr(mgr),
     CoreEngine(mgr.getASTContext(), *this),
@@ -219,7 +246,7 @@ GRExprEngine::GRExprEngine(AnalysisManager &mgr)
     BR(mgr, *this)
 {
   // Register internal checks.
-  RegisterInternalChecks();
+  RegisterInternalChecks(*this);
 }
 
 GRExprEngine::~GRExprEngine() {
@@ -233,7 +260,6 @@ GRExprEngine::~GRExprEngine() {
 // Utility methods.
 //===----------------------------------------------------------------------===//
 
-
 void GRExprEngine::setTransferFunctions(GRTransferFuncs* tf) {
   StateMgr.TF = tf;
   tf->RegisterChecks(*this);
@@ -3013,27 +3039,3 @@ void GRExprEngine::ViewGraph(ExplodedNode** Beg, ExplodedNode** End) {
   GraphPrintSourceManager = NULL;
 #endif
 }
-
-void GRExprEngine::RegisterInternalChecks() {
-  // Register internal "built-in" BugTypes with the BugReporter. These BugTypes
-  // are different than what probably many checks will do since they don't
-  // create BugReports on-the-fly but instead wait until GRExprEngine finishes
-  // analyzing a function.  Generation of BugReport objects is done via a call
-  // to 'FlushReports' from BugReporter.
-  // The following checks do not need to have their associated BugTypes
-  // explicitly registered with the BugReporter.  If they issue any BugReports,
-  // their associated BugType will get registered with the BugReporter
-  // automatically.  Note that the check itself is owned by the GRExprEngine
-  // object.  
-  RegisterAttrNonNullChecker(*this);
-  RegisterCallAndMessageChecker(*this);
-  RegisterDereferenceChecker(*this);
-  RegisterVLASizeChecker(*this);
-  RegisterDivZeroChecker(*this);
-  RegisterReturnStackAddressChecker(*this);
-  RegisterReturnUndefChecker(*this);
-  RegisterUndefinedArraySubscriptChecker(*this);
-  RegisterUndefinedAssignmentChecker(*this);
-  RegisterUndefBranchChecker(*this);
-  RegisterUndefResultChecker(*this);
-}
index 43e168fbd7ca23d585ea54fcd1c11f084fde827d..ad980feaa37e5fc87487c088aef2cc153c76a56e 100644 (file)
@@ -464,7 +464,6 @@ static void ActionInlineCall(AnalysisConsumer &C, AnalysisManager &mgr,
 
   Eng.setTransferFunctions(TF.get());
   
-  Eng.RegisterInternalChecks();
   RegisterAppleChecks(Eng, *D);
 
   // Execute the worklist algorithm.