summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Core/CheckerRegistry.cpp
diff options
context:
space:
mode:
authorGabor Horvath <xazax.hun@gmail.com>2015-07-09 21:43:45 +0000
committerGabor Horvath <xazax.hun@gmail.com>2015-07-09 21:43:45 +0000
commitfc4c4d4441c2aab101b3964c2344412af52482c5 (patch)
treeaf92c7b06446fa301f2abca6222e6eee7b5d2312 /clang/lib/StaticAnalyzer/Core/CheckerRegistry.cpp
parentc8704b02df54ff109f3fe28798aed5ff8b8ecb29 (diff)
downloadbcm5719-llvm-fc4c4d4441c2aab101b3964c2344412af52482c5.tar.gz
bcm5719-llvm-fc4c4d4441c2aab101b3964c2344412af52482c5.zip
[Static Analyzer] Basic per checker command line option validation.
Differential Revision: http://reviews.llvm.org/D8077 llvm-svn: 241863
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/CheckerRegistry.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Core/CheckerRegistry.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/CheckerRegistry.cpp b/clang/lib/StaticAnalyzer/Core/CheckerRegistry.cpp
index b64e30b3100..6ba64f52d18 100644
--- a/clang/lib/StaticAnalyzer/Core/CheckerRegistry.cpp
+++ b/clang/lib/StaticAnalyzer/Core/CheckerRegistry.cpp
@@ -8,7 +8,10 @@
//===----------------------------------------------------------------------===//
#include "clang/StaticAnalyzer/Core/CheckerRegistry.h"
+#include "clang/Basic/Diagnostic.h"
+#include "clang/Frontend/FrontendDiagnostic.h"
#include "clang/StaticAnalyzer/Core/CheckerOptInfo.h"
+#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/Support/raw_ostream.h"
@@ -111,6 +114,28 @@ void CheckerRegistry::initializeManager(CheckerManager &checkerMgr,
}
}
+void CheckerRegistry::validateCheckerOptions(const AnalyzerOptions &opts,
+ DiagnosticsEngine &diags) const {
+ for (auto &config : opts.Config) {
+ size_t pos = config.getKey().find(':');
+ if (pos == StringRef::npos)
+ continue;
+
+ bool hasChecker = false;
+ StringRef checkerName = config.getKey().substr(0, pos);
+ for (auto &checker : Checkers) {
+ if (checker.FullName.startswith(checkerName) &&
+ (checker.FullName.size() == pos || checker.FullName[pos] == '.')) {
+ hasChecker = true;
+ break;
+ }
+ }
+ if (!hasChecker) {
+ diags.Report(diag::err_unknown_analyzer_checker) << checkerName;
+ }
+ }
+}
+
void CheckerRegistry::printHelp(raw_ostream &out,
size_t maxNameChars) const {
// FIXME: Alphabetical sort puts 'experimental' in the middle.
OpenPOWER on IntegriCloud