]> granicus.if.org Git - clang/commitdiff
Don't compare llvm::Optional<> objects directly; compare their
authorDouglas Gregor <dgregor@apple.com>
Fri, 11 Feb 2011 18:08:15 +0000 (18:08 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 11 Feb 2011 18:08:15 +0000 (18:08 +0000)
contents when it's safe. I just *love* C++ some days.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125378 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/SourceManager.cpp

index 9d5569aa396a7eba09b7317e08e53f62caedf30d..4b0a3925ca3c2b6a26c5bf1b760415b97e583f6d 100644 (file)
@@ -1145,16 +1145,19 @@ SourceLocation SourceManager::getLocation(const FileEntry *SourceFile,
     if (MainSLoc.isFile()) {
       const ContentCache *MainContentCache
         = MainSLoc.getFile().getContentCache();
-      if (MainContentCache->Entry == SourceFile)
+      if (!MainContentCache) {
+        // Can't do anything
+      } else if (MainContentCache->Entry == SourceFile) {
         FirstFID = MainFileID;
-      else if (MainContentCache) {
+      } else {
         // Fall back: check whether we have the same base name and inode
         // as the main file.
         const FileEntry *MainFile = MainContentCache->Entry;
         SourceFileName = llvm::sys::path::filename(SourceFile->getName());
         if (*SourceFileName == llvm::sys::path::filename(MainFile->getName())) {
           SourceFileInode = getActualFileInode(SourceFile);
-          if (SourceFileInode == getActualFileInode(MainFile)) {
+          if (SourceFileInode && 
+              *SourceFileInode == getActualFileInode(MainFile)) {
             FirstFID = MainFileID;
             SourceFile = MainFile;
           }
@@ -1192,11 +1195,14 @@ SourceLocation SourceManager::getLocation(const FileEntry *SourceFile,
           = SLoc.getFile().getContentCache();
         const FileEntry *Entry =FileContentCache? FileContentCache->Entry : 0;
         if (Entry && 
-            *SourceFileName == llvm::sys::path::filename(Entry->getName()) &&
-            SourceFileInode == getActualFileInode(Entry)) {
-          FirstFID = FileID::get(I);
-          SourceFile = Entry;
-          break;
+            *SourceFileName == llvm::sys::path::filename(Entry->getName())) {
+          if (llvm::Optional<ino_t> EntryInode = getActualFileInode(Entry)) {
+            if (*SourceFileInode == *EntryInode) {
+              FirstFID = FileID::get(I);
+              SourceFile = Entry;
+              break;
+            }
+          }
         }
       }
     }