This revision was automatically updated to reflect the committed changes. Closed by commit rL286218: Add a method to get the list of registered static analyzer checkers. (authored by alexfh).
Changed prior to commit: https://reviews.llvm.org/D26310?vs=77098&id=77151#toc Repository: rL LLVM https://reviews.llvm.org/D26310 Files: cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp Index: cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h =================================================================== --- cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h +++ cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h @@ -125,6 +125,9 @@ public: typedef llvm::StringMap<std::string> ConfigTable; + static std::vector<StringRef> + getRegisteredCheckers(bool IncludeExperimental = false); + /// \brief Pair of checker name and enable/disable. std::vector<std::pair<std::string, bool> > CheckersControlList; Index: cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp =================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp +++ cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp @@ -23,6 +23,25 @@ using namespace ento; using namespace llvm; +std::vector<StringRef> +AnalyzerOptions::getRegisteredCheckers(bool IncludeExperimental /* = false */) { + static const StringRef StaticAnalyzerChecks[] = { +#define GET_CHECKERS +#define CHECKER(FULLNAME, CLASS, DESCFILE, HELPTEXT, GROUPINDEX, HIDDEN) \ + FULLNAME, +#include "clang/StaticAnalyzer/Checkers/Checkers.inc" +#undef CHECKER +#undef GET_CHECKERS + }; + std::vector<StringRef> Result; + for (StringRef CheckName : StaticAnalyzerChecks) { + if (!CheckName.startswith("debug.") && + (IncludeExperimental || !CheckName.startswith("alpha."))) + Result.push_back(CheckName); + } + return Result; +} + AnalyzerOptions::UserModeKind AnalyzerOptions::getUserMode() { if (UserMode == UMK_NotSet) { StringRef ModeStr = Index: cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp =================================================================== --- cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp +++ cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp @@ -14,6 +14,23 @@ namespace clang { namespace ento { +TEST(StaticAnalyzerOptions, getRegisteredCheckers) { + auto IsDebugChecker = [](StringRef CheckerName) { + return CheckerName.startswith("debug"); + }; + auto IsAlphaChecker = [](StringRef CheckerName) { + return CheckerName.startswith("alpha"); + }; + const auto &AllCheckers = + AnalyzerOptions::getRegisteredCheckers(/*IncludeExperimental=*/true); + EXPECT_FALSE(llvm::any_of(AllCheckers, IsDebugChecker)); + EXPECT_TRUE(llvm::any_of(AllCheckers, IsAlphaChecker)); + + const auto &StableCheckers = AnalyzerOptions::getRegisteredCheckers(); + EXPECT_FALSE(llvm::any_of(StableCheckers, IsDebugChecker)); + EXPECT_FALSE(llvm::any_of(StableCheckers, IsAlphaChecker)); +} + TEST(StaticAnalyzerOptions, SearchInParentPackageTests) { AnalyzerOptions Opts; Opts.Config["Outer.Inner.CheckerOne:Option"] = "true";
Index: cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h =================================================================== --- cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h +++ cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h @@ -125,6 +125,9 @@ public: typedef llvm::StringMap<std::string> ConfigTable; + static std::vector<StringRef> + getRegisteredCheckers(bool IncludeExperimental = false); + /// \brief Pair of checker name and enable/disable. std::vector<std::pair<std::string, bool> > CheckersControlList; Index: cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp =================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp +++ cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp @@ -23,6 +23,25 @@ using namespace ento; using namespace llvm; +std::vector<StringRef> +AnalyzerOptions::getRegisteredCheckers(bool IncludeExperimental /* = false */) { + static const StringRef StaticAnalyzerChecks[] = { +#define GET_CHECKERS +#define CHECKER(FULLNAME, CLASS, DESCFILE, HELPTEXT, GROUPINDEX, HIDDEN) \ + FULLNAME, +#include "clang/StaticAnalyzer/Checkers/Checkers.inc" +#undef CHECKER +#undef GET_CHECKERS + }; + std::vector<StringRef> Result; + for (StringRef CheckName : StaticAnalyzerChecks) { + if (!CheckName.startswith("debug.") && + (IncludeExperimental || !CheckName.startswith("alpha."))) + Result.push_back(CheckName); + } + return Result; +} + AnalyzerOptions::UserModeKind AnalyzerOptions::getUserMode() { if (UserMode == UMK_NotSet) { StringRef ModeStr = Index: cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp =================================================================== --- cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp +++ cfe/trunk/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp @@ -14,6 +14,23 @@ namespace clang { namespace ento { +TEST(StaticAnalyzerOptions, getRegisteredCheckers) { + auto IsDebugChecker = [](StringRef CheckerName) { + return CheckerName.startswith("debug"); + }; + auto IsAlphaChecker = [](StringRef CheckerName) { + return CheckerName.startswith("alpha"); + }; + const auto &AllCheckers = + AnalyzerOptions::getRegisteredCheckers(/*IncludeExperimental=*/true); + EXPECT_FALSE(llvm::any_of(AllCheckers, IsDebugChecker)); + EXPECT_TRUE(llvm::any_of(AllCheckers, IsAlphaChecker)); + + const auto &StableCheckers = AnalyzerOptions::getRegisteredCheckers(); + EXPECT_FALSE(llvm::any_of(StableCheckers, IsDebugChecker)); + EXPECT_FALSE(llvm::any_of(StableCheckers, IsAlphaChecker)); +} + TEST(StaticAnalyzerOptions, SearchInParentPackageTests) { AnalyzerOptions Opts; Opts.Config["Outer.Inner.CheckerOne:Option"] = "true";
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits