[clang-tidy] run() doesn't update the SourceManager.
authorSam McCall <sam.mccall@gmail.com>
Tue, 6 Nov 2018 09:28:23 +0000 (09:28 +0000)
committerSam McCall <sam.mccall@gmail.com>
Tue, 6 Nov 2018 09:28:23 +0000 (09:28 +0000)
Summary:
By now the context's SourceManager is now initialized everywhere that
ClangTidyCheck::registerMatcher() is called, so the call from run() seems
entirely redundant, and indeed all the tests pass.

This solves a problem with embedding clang-tidy: if using a DiagnosticsEngine
which already has file state, re-setting its SourceManager (to the same value)
causes an assertion.
(There are other ways to solve this problem, but this is the simplest).

Reviewers: hokein, alexfh

Subscribers: xazax.hun, cfe-commits

Differential Revision: https://reviews.llvm.org/D54061

llvm-svn: 346219

clang-tools-extra/clang-tidy/ClangTidy.cpp

index f0126e8668bdf7551ad7c681e11494c4cb9823f9..ed48de9196ce5a00473ef7aa8e6c408794ce3660 100644 (file)
@@ -441,7 +441,9 @@ DiagnosticBuilder ClangTidyCheck::diag(SourceLocation Loc, StringRef Message,
 }
 
 void ClangTidyCheck::run(const ast_matchers::MatchFinder::MatchResult &Result) {
-  Context->setSourceManager(Result.SourceManager);
+  // For historical reasons, checks don't implement the MatchFinder run()
+  // callback directly. We keep the run()/check() distinction to avoid interface
+  // churn, and to allow us to add cross-cutting logic in the future.
   check(Result);
 }