Author: george.karpenkov Date: Tue Jul 10 18:23:27 2018 New Revision: 336753
URL: http://llvm.org/viewvc/llvm-project?rev=336753&view=rev Log: [analyzer] Pass through all arguments from the registerChecker() to the checker constructor A lot of checkers could be cleaned up in a similar way Differential Revision: https://reviews.llvm.org/D49050 Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/CheckerManager.h cfe/trunk/lib/StaticAnalyzer/Checkers/DynamicTypePropagation.cpp Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/CheckerManager.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/CheckerManager.h?rev=336753&r1=336752&r2=336753&view=diff ============================================================================== --- cfe/trunk/include/clang/StaticAnalyzer/Core/CheckerManager.h (original) +++ cfe/trunk/include/clang/StaticAnalyzer/Core/CheckerManager.h Tue Jul 10 18:23:27 2018 @@ -144,31 +144,18 @@ public: //===----------------------------------------------------------------------===// /// Used to register checkers. + /// All arguments are automatically passed through to the checker + /// constructor. /// /// \returns a pointer to the checker object. - template <typename CHECKER> - CHECKER *registerChecker() { + template <typename CHECKER, typename... AT> + CHECKER *registerChecker(AT... Args) { CheckerTag tag = getTag<CHECKER>(); CheckerRef &ref = CheckerTags[tag]; if (ref) return static_cast<CHECKER *>(ref); // already registered. - CHECKER *checker = new CHECKER(); - checker->Name = CurrentCheckName; - CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>)); - CHECKER::_register(checker, *this); - ref = checker; - return checker; - } - - template <typename CHECKER> - CHECKER *registerChecker(AnalyzerOptions &AOpts) { - CheckerTag tag = getTag<CHECKER>(); - CheckerRef &ref = CheckerTags[tag]; - if (ref) - return static_cast<CHECKER *>(ref); // already registered. - - CHECKER *checker = new CHECKER(AOpts); + CHECKER *checker = new CHECKER(Args...); checker->Name = CurrentCheckName; CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>)); CHECKER::_register(checker, *this); Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/DynamicTypePropagation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/DynamicTypePropagation.cpp?rev=336753&r1=336752&r2=336753&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Checkers/DynamicTypePropagation.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Checkers/DynamicTypePropagation.cpp Tue Jul 10 18:23:27 2018 @@ -56,6 +56,12 @@ class DynamicTypePropagation: check::PostStmt<CXXNewExpr>, check::PreObjCMessage, check::PostObjCMessage > { +private: + /// This value is set to true, when the Generics checker is turned on. + bool CheckGenerics; +public: + DynamicTypePropagation(bool CheckGenerics) + : CheckGenerics(CheckGenerics) {} const ObjCObjectType *getObjectTypeForAllocAndNew(const ObjCMessageExpr *MsgE, CheckerContext &C) const; @@ -107,9 +113,6 @@ public: void checkDeadSymbols(SymbolReaper &SR, CheckerContext &C) const; void checkPreObjCMessage(const ObjCMethodCall &M, CheckerContext &C) const; void checkPostObjCMessage(const ObjCMethodCall &M, CheckerContext &C) const; - - /// This value is set to true, when the Generics checker is turned on. - DefaultBool CheckGenerics; }; } // end anonymous namespace @@ -995,11 +998,9 @@ DynamicTypePropagation::GenericsBugVisit /// Register checkers. void ento::registerObjCGenericsChecker(CheckerManager &mgr) { - DynamicTypePropagation *checker = - mgr.registerChecker<DynamicTypePropagation>(); - checker->CheckGenerics = true; + mgr.registerChecker<DynamicTypePropagation>(/*CheckGenerics=*/true); } void ento::registerDynamicTypePropagation(CheckerManager &mgr) { - mgr.registerChecker<DynamicTypePropagation>(); + mgr.registerChecker<DynamicTypePropagation>(/*CheckGenerics=*/false); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits