diff --git a/clang/include/clang/Lex/HeaderSearch.h b/clang/include/clang/Lex/HeaderSearch.h --- a/clang/include/clang/Lex/HeaderSearch.h +++ b/clang/include/clang/Lex/HeaderSearch.h @@ -155,7 +155,7 @@ /// This structure is used to record entries in our framework cache. struct FrameworkCacheEntry { /// The directory entry which should be used for the cached framework. - const DirectoryEntry *Directory; + Optional Directory; /// Whether this framework has been "user-specified" to be treated as if it /// were a system framework (even if it was found outside a system framework diff --git a/clang/lib/Lex/HeaderSearch.cpp b/clang/lib/Lex/HeaderSearch.cpp --- a/clang/lib/Lex/HeaderSearch.cpp +++ b/clang/lib/Lex/HeaderSearch.cpp @@ -582,7 +582,7 @@ HS.LookupFrameworkCache(Filename.substr(0, SlashPos)); // If it is known and in some other directory, fail. - if (CacheEntry.Directory && CacheEntry.Directory != getFrameworkDir()) + if (CacheEntry.Directory && CacheEntry.Directory != getFrameworkDirRef()) return None; // Otherwise, construct the path to this framework dir. @@ -611,7 +611,7 @@ // Otherwise, if it does, remember that this is the right direntry for this // framework. - CacheEntry.Directory = getFrameworkDir(); + CacheEntry.Directory = getFrameworkDirRef(); // If this is a user search directory, check if the framework has been // user-specified as a system framework. @@ -626,7 +626,7 @@ // Set out flags. InUserSpecifiedSystemFramework = CacheEntry.IsUserSpecifiedSystemFramework; - IsFrameworkFound = CacheEntry.Directory; + IsFrameworkFound = CacheEntry.Directory.hasValue(); if (RelativePath) { RelativePath->clear(); @@ -1184,13 +1184,13 @@ ++NumSubFrameworkLookups; // If the framework dir doesn't exist, we fail. - auto Dir = FileMgr.getDirectory(FrameworkName); + auto Dir = FileMgr.getOptionalDirectoryRef(FrameworkName); if (!Dir) return None; // Otherwise, if it does, remember that this is the right direntry for this // framework. - CacheLookup.second.Directory = *Dir; + CacheLookup.second.Directory = Dir; }