Index: clang-tidy/ClangTidy.cpp =================================================================== --- clang-tidy/ClangTidy.cpp +++ clang-tidy/ClangTidy.cpp @@ -39,6 +39,7 @@ #include "clang/Tooling/Refactoring.h" #include "clang/Tooling/ReplacementsYaml.h" #include "clang/Tooling/Tooling.h" +#include "llvm/ADT/DenseMap.h" #include "llvm/Support/Process.h" #include "llvm/Support/Signals.h" #include <algorithm> @@ -237,8 +238,12 @@ if (FilePath.empty()) return SourceLocation(); - const FileEntry *File = SourceMgr.getFileManager().getFile(FilePath); - FileID ID = SourceMgr.createFileID(File, SourceLocation(), SrcMgr::C_User); + if (Path2FileID.find(FilePath) == Path2FileID.end()) { + const FileEntry *File = SourceMgr.getFileManager().getFile(FilePath); + Path2FileID[FilePath] = + SourceMgr.createFileID(File, SourceLocation(), SrcMgr::C_User); + } + FileID ID = Path2FileID[FilePath]; return SourceMgr.getLocForStartOfFile(ID).getLocWithOffset(Offset); } @@ -248,6 +253,7 @@ << Message.Message; } + DenseMap<StringRef, FileID> Path2FileID; FileManager Files; LangOptions LangOpts; // FIXME: use langopts from each original file IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;