summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests
diff options
context:
space:
mode:
authorManuel Klimek <klimek@google.com>2014-10-07 15:49:36 +0000
committerManuel Klimek <klimek@google.com>2014-10-07 15:49:36 +0000
commit0551065cd179740a54e20fea6d854e543c0dd5bd (patch)
tree9abfa75d20469cceb6ba96613e90aacdf8388ecc /clang-tools-extra/unittests
parent2b00d546765615234d93b0fe48363cb753c085d2 (diff)
downloadbcm5719-llvm-0551065cd179740a54e20fea6d854e543c0dd5bd.tar.gz
bcm5719-llvm-0551065cd179740a54e20fea6d854e543c0dd5bd.zip
Make clang-tidy's runCheckOnCode actually use the DiagnosticConsumer.
A precondition of that was to run both the preprocessor checks and AST checks from the same FrontendAction, otherwise we'd have needed to duplicate all involved objects in order to not have any references to a deleted source manager. llvm-svn: 219212
Diffstat (limited to 'clang-tools-extra/unittests')
-rw-r--r--clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h44
-rw-r--r--clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp2
2 files changed, 27 insertions, 19 deletions
diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h b/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h
index 181e6c209e8..c1149c8ea46 100644
--- a/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h
+++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h
@@ -22,21 +22,23 @@ namespace clang {
namespace tidy {
namespace test {
-class TestPPAction : public PreprocessOnlyAction {
+class TestClangTidyAction : public ASTFrontendAction {
public:
- TestPPAction(ClangTidyCheck &Check, ClangTidyContext *Context)
- : Check(Check), Context(Context) {}
+ TestClangTidyAction(ClangTidyCheck &Check, ast_matchers::MatchFinder &Finder,
+ ClangTidyContext &Context)
+ : Check(Check), Finder(Finder), Context(Context) {}
private:
- bool BeginSourceFileAction(CompilerInstance &Compiler,
- llvm::StringRef file_name) override {
- Context->setSourceManager(&Compiler.getSourceManager());
+ std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &Compiler,
+ StringRef File) override {
+ Context.setSourceManager(&Compiler.getSourceManager());
Check.registerPPCallbacks(Compiler);
- return true;
+ return Finder.newASTConsumer();
}
ClangTidyCheck &Check;
- ClangTidyContext *Context;
+ ast_matchers::MatchFinder &Finder;
+ ClangTidyContext &Context;
};
template <typename T>
@@ -50,19 +52,25 @@ std::string runCheckOnCode(StringRef Code,
ClangTidyGlobalOptions(), Options));
ClangTidyDiagnosticConsumer DiagConsumer(Context);
T Check("test-check", &Context);
- std::vector<std::string> ArgCXX11(1, "-std=c++11");
- ArgCXX11.insert(ArgCXX11.end(), ExtraArgs.begin(), ExtraArgs.end());
-
- if (!tooling::runToolOnCodeWithArgs(new TestPPAction(Check, &Context), Code,
- ArgCXX11, Filename))
- return "";
ast_matchers::MatchFinder Finder;
Check.registerMatchers(&Finder);
- std::unique_ptr<tooling::FrontendActionFactory> Factory(
- tooling::newFrontendActionFactory(&Finder));
- if (!tooling::runToolOnCodeWithArgs(Factory->create(), Code, ArgCXX11,
- Filename))
+
+ std::vector<std::string> ArgCXX11(1, "clang-tidy");
+ ArgCXX11.push_back("-fsyntax-only");
+ ArgCXX11.push_back("-std=c++11");
+ ArgCXX11.insert(ArgCXX11.end(), ExtraArgs.begin(), ExtraArgs.end());
+ ArgCXX11.push_back(Filename.str());
+ llvm::IntrusiveRefCntPtr<FileManager> files(
+ new FileManager(FileSystemOptions()));
+ tooling::ToolInvocation Invocation(
+ ArgCXX11, new TestClangTidyAction(Check, Finder, Context), files.get());
+ SmallString<16> FileNameStorage;
+ StringRef FileNameRef = Filename.toNullTerminatedStringRef(FileNameStorage);
+ Invocation.mapVirtualFile(FileNameRef, Code);
+ Invocation.setDiagnosticConsumer(&DiagConsumer);
+ if (!Invocation.run())
return "";
+
DiagConsumer.finish();
tooling::Replacements Fixes;
for (const ClangTidyError &Error : Context.getErrors())
diff --git a/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp b/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp
index a9afb820271..00e9034456b 100644
--- a/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp
+++ b/clang-tools-extra/unittests/clang-tidy/LLVMModuleTest.cpp
@@ -114,7 +114,7 @@ TEST(LLVMHeaderGuardCheckTest, FixHeaderGuards) {
"LLVM_ADT_FOO_H\n#endif \\ \n// "
"LLVM_ADT_FOO_H\n",
"include/llvm/ADT/foo.h",
- /*ExpectedWarnings=*/0));
+ /*ExpectedWarnings=*/1));
EXPECT_EQ("#ifndef LLVM_ADT_FOO_H\n#define LLVM_ADT_FOO_H\n#endif /* "
"LLVM_ADT_FOO_H\\ \n FOO */",
OpenPOWER on IntegriCloud