Index: tools/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h
==================================================================
--- tools/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h
+++ tools/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h
@@ -166,11 +166,11 @@
     }
   };
 
 #ifndef NDEBUG
   typedef llvm::DenseSet<FileID> FilesWithDiagnosticsSet;
-  typedef llvm::SmallPtrSet<const FileEntry *, 4> FilesParsedForDirectivesSet;
+  typedef llvm::DenseSet<FileID> FilesParsedForDirectivesSet;
 #endif
 
 private:
   DiagnosticsEngine &Diags;
   DiagnosticConsumer *PrimaryClient;
@@ -196,13 +196,14 @@
                                const Preprocessor *PP);
 
   virtual void EndSourceFile();
 
   /// \brief Manually register a file as parsed.
-  inline void appendParsedFile(const FileEntry *File) {
+  inline void appendParsedFile(FileID FID) {
 #ifndef NDEBUG
-    FilesParsedForDirectives.insert(File);
+    if (!FID.isInvalid())
+      FilesParsedForDirectives.insert(FID);
 #endif
   }
 
   virtual bool HandleComment(Preprocessor &PP, SourceRange Comment);
 

Index: tools/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp
==================================================================
--- tools/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp
+++ tools/clang/lib/Frontend/VerifyDiagnosticConsumer.cpp
@@ -59,12 +59,13 @@
   /// \brief Hook into the preprocessor and update the list of parsed
   /// files when the preprocessor indicates a new file is entered.
   virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason,
                            SrcMgr::CharacteristicKind FileType,
                            FileID PrevFID) {
-    if (const FileEntry *E = SM.getFileEntryForID(SM.getFileID(Loc)))
-      FilesList.insert(E);
+    FileID FID = SM.getFileID(Loc);
+    if (!FID.isInvalid())
+      FilesList.insert(FID);
   }
 };
 } // End anonymous namespace.
 #endif
 
@@ -619,14 +620,16 @@
     // this file is being parsed separately from the main file.
     HeaderSearch &HS = CurrentPreprocessor->getHeaderSearchInfo();
     for (FilesWithDiagnosticsSet::iterator I = FilesWithDiagnostics.begin(),
                                          End = FilesWithDiagnostics.end();
             I != End; ++I) {
-      const FileEntry *E = SM.getFileEntryForID(*I);
+      FileID FID = *I;
+      const FileEntry *E = SM.getFileEntryForID(FID);
+
       // Don't check files already parsed or those handled as modules.
-      if (E && (FilesParsedForDirectives.count(E)
-                  || HS.findModuleForHeader(E)))
+      if (FilesParsedForDirectives.count(FID)
+            || (E && HS.findModuleForHeader(E)))
         continue;
 
       if (findDirectives(*CurrentPreprocessor, *I))
         llvm::report_fatal_error(Twine("-verify directives found after rather"
                                        " than during normal parsing of ",

