Index: lib/Basic/SourceManager.cpp =================================================================== --- lib/Basic/SourceManager.cpp +++ lib/Basic/SourceManager.cpp @@ -1225,8 +1225,15 @@ static void ComputeLineNumbers(DiagnosticsEngine &Diag, ContentCache *FI, llvm::BumpPtrAllocator &Alloc, const SourceManager &SM, bool &Invalid) { - // Note that calling 'getBuffer()' may lazily page in the file. - MemoryBuffer *Buffer = FI->getBuffer(Diag, SM, SourceLocation(), &Invalid); + MemoryBuffer *Buffer = nullptr; + if (SM.isFileOverridden(FI->ContentsEntry)) + Buffer + = const_cast(SM).getMemoryBufferForFile(FI->ContentsEntry, + &Invalid); + else + // Note that calling 'getBuffer()' may lazily page in the file. + Buffer = FI->getBuffer(Diag, SM, SourceLocation(), &Invalid); + if (Invalid) return; Index: lib/Frontend/VerifyDiagnosticConsumer.cpp =================================================================== --- lib/Frontend/VerifyDiagnosticConsumer.cpp +++ lib/Frontend/VerifyDiagnosticConsumer.cpp @@ -401,6 +401,9 @@ const FileEntry *FE = PP->LookupFile(Pos, Filename, false, nullptr, nullptr, CurDir, nullptr, nullptr, nullptr, nullptr); + // Check if the file was virtual + if (!FE) + FE = SM.getFileManager().getFile(Filename); if (!FE) { Diags.Report(Pos.getLocWithOffset(PH.C-PH.Begin), diag::err_verify_missing_file) << Filename << KindStr;