[PATCH] D33275: Keep into account if files were virtual.

Vassil Vassilev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 17 06:25:23 PDT 2017


v.g.vassilev created this revision.

In some cases we do not have files on disk. They are only available in the FileManager as virtual files and the SourceManager overrides their content.


https://reviews.llvm.org/D33275

Files:
  lib/Basic/SourceManager.cpp
  lib/Frontend/VerifyDiagnosticConsumer.cpp


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;
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<SourceManager&>(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;
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33275.99285.patch
Type: text/x-patch
Size: 1651 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170517/692e1288/attachment.bin>


More information about the cfe-commits mailing list