Index: lib/Frontend/ASTUnit.cpp =================================================================== --- lib/Frontend/ASTUnit.cpp +++ lib/Frontend/ASTUnit.cpp @@ -2539,6 +2539,8 @@ SmallVector Result; Result.reserve(Diags.size()); + const FileEntry *CachedFE = nullptr; + FileID CachedFID; for (const StandaloneDiagnostic &SD : Diags) { // Rebuild the StoredDiagnostic. if (SD.Filename.empty()) @@ -2546,7 +2548,13 @@ const FileEntry *FE = FileMgr.getFile(SD.Filename); if (!FE) continue; - FileID FID = SrcMgr.translateFile(FE); + FileID FID; + if (FE == CachedFE) { + FID = CachedFID; + } else { + CachedFID = FID = SrcMgr.translateFile(FE); + CachedFE = FE; + } SourceLocation FileLoc = SrcMgr.getLocForStartOfFile(FID); if (FileLoc.isInvalid()) continue;