[PATCH] D17335: [clang-tidy] Fix a crash issue when clang-tidy runs with compilation database.

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 22 05:00:37 PST 2016


alexfh added inline comments.

================
Comment at: clang-tidy/ClangTidyDiagnosticConsumer.cpp:120
@@ +119,3 @@
+                               bool IsWarningAsError,
+                               const std::string &BuildDirectory)
+    : BuildDirectory(std::move(BuildDirectory)), CheckName(CheckName),
----------------
hokein wrote:
> We might not use `StringRef` here since 
> `SourceManager.getFileManager().getVirtualFileSystem().getCurrentWorkingDirectory()` returns `std::string`.
As discussed offline, it makes sense to avoid calling `SourceManager.getFileManager().getVirtualFileSystem().getCurrentWorkingDirectory()` for each error, since it already has a cost of at least a string allocation/copy, but might also be an actual I/O operation. We can assume the working directory doesn't change while parsing a file, so we can cache it in the `ClangTidyContext` together with the current file name. Once we do this, we can get a `StringRef` to the working directory stored in `ClangTidyContext` and pass it here (but still store a `std::string` to avoid dependencies on a lifetime of an external string).

================
Comment at: clang-tidy/ClangTidyDiagnosticConsumer.h:66
@@ +65,3 @@
+  // It's an absolute path which is `directory` field of the source file in
+  // compilation database. If users don't specify compilation database
+  // directory, it is the current directory where clang-tidy runs.
----------------
hokein wrote:
> However, I see the `compile_commands.json` is hardcoded in source. http://clang.llvm.org/doxygen/JSONCompilationDatabase_8cpp_source.html#l00111
Yes, but this is just one implementation of a compilation database. There are other implementations as well.

================
Comment at: clang-tidy/ClangTidyDiagnosticConsumer.h:66
@@ +65,3 @@
+  // It's an absolute path which is `directory` field of the source file in
+  // compilation database. If users don't specify compilation database
+  // directory, it is the current directory where clang-tidy runs.
----------------
alexfh wrote:
> hokein wrote:
> > However, I see the `compile_commands.json` is hardcoded in source. http://clang.llvm.org/doxygen/JSONCompilationDatabase_8cpp_source.html#l00111
> Yes, but this is just one implementation of a compilation database. There are other implementations as well.
nit: "the compilation database"


http://reviews.llvm.org/D17335





More information about the cfe-commits mailing list