summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorKristof Umann <kristof.umann@ericsson.com>2019-05-16 15:55:07 +0000
committerKristof Umann <kristof.umann@ericsson.com>2019-05-16 15:55:07 +0000
commitdaa91492dd93f76fd3212bfe338f3fe41c30d26e (patch)
treebccadbca95553dcdb5b27f3223495f25bd34a4d4 /clang/test
parent0b47303886de2602705571e1448a4b543aefb650 (diff)
downloadbcm5719-llvm-daa91492dd93f76fd3212bfe338f3fe41c30d26e.tar.gz
bcm5719-llvm-daa91492dd93f76fd3212bfe338f3fe41c30d26e.zip
[analyzer] Add a test plugin for checker option handling
Differential Revision: https://reviews.llvm.org/D59465 llvm-svn: 360910
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Analysis/checker-plugins.c15
-rw-r--r--clang/test/Analysis/plugins/CMakeLists.txt2
-rw-r--r--clang/test/Analysis/plugins/CheckerOptionHandling/CMakeLists.txt11
-rw-r--r--clang/test/Analysis/plugins/CheckerOptionHandling/CheckerOptionHandling.cpp43
-rw-r--r--clang/test/Analysis/plugins/CheckerOptionHandling/CheckerOptionHandlingAnalyzerPlugin.exports2
5 files changed, 73 insertions, 0 deletions
diff --git a/clang/test/Analysis/checker-plugins.c b/clang/test/Analysis/checker-plugins.c
index f0a5484ae1f..ce618f5cdd5 100644
--- a/clang/test/Analysis/checker-plugins.c
+++ b/clang/test/Analysis/checker-plugins.c
@@ -30,3 +30,18 @@ void caller() {
// CHECK-IMPLICITLY-DISABLED-NOT: example.Dependency
// CHECK-IMPLICITLY-DISABLED-NOT: example.DependendentChecker
+
+// RUN: %clang_analyze_cc1 %s \
+// RUN: -load %llvmshlibdir/CheckerOptionHandlingAnalyzerPlugin%pluginext\
+// RUN: -analyzer-checker=example.MyChecker \
+// RUN: 2>&1 | FileCheck %s -check-prefix=CHECK-CHECKER-OPTION-OUTPUT
+
+// CHECK-CHECKER-OPTION-OUTPUT: Example option is set to false
+
+// RUN: %clang_analyze_cc1 %s \
+// RUN: -load %llvmshlibdir/CheckerOptionHandlingAnalyzerPlugin%pluginext\
+// RUN: -analyzer-checker=example.MyChecker \
+// RUN: -analyzer-config example.MyChecker:ExampleOption=true \
+// RUN: 2>&1 | FileCheck %s -check-prefix=CHECK-CHECKER-OPTION-OUTPUT-TRUE
+
+// CHECK-CHECKER-OPTION-OUTPUT-TRUE: Example option is set to true
diff --git a/clang/test/Analysis/plugins/CMakeLists.txt b/clang/test/Analysis/plugins/CMakeLists.txt
index 3f538d9e0ef..8d4333f99a4 100644
--- a/clang/test/Analysis/plugins/CMakeLists.txt
+++ b/clang/test/Analysis/plugins/CMakeLists.txt
@@ -1,9 +1,11 @@
add_subdirectory(SampleAnalyzer)
add_subdirectory(CheckerDependencyHandling)
+add_subdirectory(CheckerOptionHandling)
set(CLANG_ANALYZER_PLUGIN_DEPS
SampleAnalyzerPlugin
CheckerDependencyHandlingAnalyzerPlugin
+ CheckerOptionHandlingAnalyzerPlugin
)
add_custom_target(clang-analyzer-plugin
diff --git a/clang/test/Analysis/plugins/CheckerOptionHandling/CMakeLists.txt b/clang/test/Analysis/plugins/CheckerOptionHandling/CMakeLists.txt
new file mode 100644
index 00000000000..6a1d5e85279
--- /dev/null
+++ b/clang/test/Analysis/plugins/CheckerOptionHandling/CMakeLists.txt
@@ -0,0 +1,11 @@
+set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CheckerOptionHandlingAnalyzerPlugin.exports)
+add_llvm_library(CheckerOptionHandlingAnalyzerPlugin MODULE CheckerOptionHandling.cpp PLUGIN_TOOL clang)
+
+if(LLVM_ENABLE_PLUGINS AND (WIN32 OR CYGWIN))
+ target_link_libraries(CheckerOptionHandlingAnalyzerPlugin PRIVATE
+ clangAnalysis
+ clangAST
+ clangStaticAnalyzerCore
+ LLVMSupport
+ )
+endif()
diff --git a/clang/test/Analysis/plugins/CheckerOptionHandling/CheckerOptionHandling.cpp b/clang/test/Analysis/plugins/CheckerOptionHandling/CheckerOptionHandling.cpp
new file mode 100644
index 00000000000..01ddcf51534
--- /dev/null
+++ b/clang/test/Analysis/plugins/CheckerOptionHandling/CheckerOptionHandling.cpp
@@ -0,0 +1,43 @@
+#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
+#include "clang/StaticAnalyzer/Core/Checker.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
+#include "clang/StaticAnalyzer/Frontend/CheckerRegistry.h"
+
+using namespace clang;
+using namespace ento;
+
+namespace {
+struct MyChecker : public Checker<check::BeginFunction> {
+ void checkBeginFunction(CheckerContext &Ctx) const {}
+};
+
+void registerMyChecker(CheckerManager &Mgr) {
+ MyChecker *Checker = Mgr.registerChecker<MyChecker>();
+ llvm::outs() << "Example option is set to "
+ << (Mgr.getAnalyzerOptions().getCheckerBooleanOption(
+ Checker, "ExampleOption", false)
+ ? "true"
+ : "false")
+ << '\n';
+}
+
+bool shouldRegisterMyChecker(const LangOptions &LO) { return true; }
+
+} // end anonymous namespace
+
+// Register plugin!
+extern "C" void clang_registerCheckers(CheckerRegistry &registry) {
+ registry.addChecker(registerMyChecker, shouldRegisterMyChecker,
+ "example.MyChecker", "Example Description",
+ "example.mychecker.documentation.nonexistent.html",
+ /*isHidden*/false);
+
+ registry.addCheckerOption(/*OptionType*/ "bool",
+ /*CheckerFullName*/ "example.MyChecker",
+ /*OptionName*/ "ExampleOption",
+ /*DefaultValStr*/ "false",
+ /*Description*/ "This is an example checker opt.");
+}
+
+extern "C" const char clang_analyzerAPIVersionString[] =
+ CLANG_ANALYZER_API_VERSION_STRING;
diff --git a/clang/test/Analysis/plugins/CheckerOptionHandling/CheckerOptionHandlingAnalyzerPlugin.exports b/clang/test/Analysis/plugins/CheckerOptionHandling/CheckerOptionHandlingAnalyzerPlugin.exports
new file mode 100644
index 00000000000..8d9ff882cfb
--- /dev/null
+++ b/clang/test/Analysis/plugins/CheckerOptionHandling/CheckerOptionHandlingAnalyzerPlugin.exports
@@ -0,0 +1,2 @@
+clang_registerCheckers
+clang_analyzerAPIVersionString
OpenPOWER on IntegriCloud