clang 20.0.0git
|
#include "clang/Lex/HeaderSearch.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/IdentifierTable.h"
#include "clang/Basic/Module.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Lex/DirectoryLookup.h"
#include "clang/Lex/ExternalPreprocessorSource.h"
#include "clang/Lex/HeaderMap.h"
#include "clang/Lex/HeaderSearchOptions.h"
#include "clang/Lex/LexDiagnostic.h"
#include "clang/Lex/ModuleMap.h"
#include "clang/Lex/Preprocessor.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/Capacity.h"
#include "llvm/Support/Errc.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/Support/xxhash.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdio>
#include <cstring>
#include <string>
#include <system_error>
#include <utility>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "file-search" |
Functions | |
ALWAYS_ENABLED_STATISTIC (NumIncluded, "Number of attempted #includes.") | |
ALWAYS_ENABLED_STATISTIC (NumMultiIncludeFileOptzn, "Number of #includes skipped due to the multi-include optimization.") | |
ALWAYS_ENABLED_STATISTIC (NumFrameworkLookups, "Number of framework lookups.") | |
ALWAYS_ENABLED_STATISTIC (NumSubFrameworkLookups, "Number of subframework lookups.") | |
static OptionalDirectoryEntryRef | getTopFrameworkDir (FileManager &FileMgr, StringRef DirName, SmallVectorImpl< std::string > &SubmodulePath) |
Given a framework directory, find the top-most framework directory. | |
static bool | needModuleLookup (Module *RequestingModule, bool HasSuggestedModule) |
static bool | checkMSVCHeaderSearch (DiagnosticsEngine &Diags, OptionalFileEntryRef MSFE, const FileEntry *FE, SourceLocation IncludeLoc) |
Return true with a diagnostic if the file that MSVC would have found fails to match the one that Clang would have found with MSVC header search disabled. | |
static const char * | copyString (StringRef Str, llvm::BumpPtrAllocator &Alloc) |
static bool | isFrameworkStylePath (StringRef Path, bool &IsPrivateHeader, SmallVectorImpl< char > &FrameworkName, SmallVectorImpl< char > &IncludeSpelling) |
static void | diagnoseFrameworkInclude (DiagnosticsEngine &Diags, SourceLocation IncludeLoc, StringRef Includer, StringRef IncludeFilename, FileEntryRef IncludeFE, bool isAngled=false, bool FoundByHeaderMap=false) |
static bool | moduleMembershipNeedsMerge (const HeaderFileInfo *HFI, ModuleMap::ModuleHeaderRole Role) |
static void | mergeHeaderFileInfoModuleBits (HeaderFileInfo &HFI, bool isModuleHeader, bool isTextualModuleHeader) |
static void | mergeHeaderFileInfo (HeaderFileInfo &HFI, const HeaderFileInfo &OtherHFI) |
Merge the header file info provided by OtherHFI into the current header file info (HFI ) | |
static bool | suggestModule (HeaderSearch &HS, FileEntryRef File, Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule) |
static OptionalFileEntryRef | getPrivateModuleMap (FileEntryRef File, FileManager &FileMgr, DiagnosticsEngine &Diags) |
#define DEBUG_TYPE "file-search" |
Definition at line 52 of file HeaderSearch.cpp.
ALWAYS_ENABLED_STATISTIC | ( | NumFrameworkLookups | , |
"Number of framework lookups." | |||
) |
ALWAYS_ENABLED_STATISTIC | ( | NumIncluded | , |
"Number of attempted #includes." | |||
) |
ALWAYS_ENABLED_STATISTIC | ( | NumMultiIncludeFileOptzn | , |
"Number of #includes skipped due to the multi-include optimization." | |||
) |
ALWAYS_ENABLED_STATISTIC | ( | NumSubFrameworkLookups | , |
"Number of subframework lookups." | |||
) |
|
static |
Return true with a diagnostic if the file that MSVC would have found fails to match the one that Clang would have found with MSVC header search disabled.
Definition at line 782 of file HeaderSearch.cpp.
References clang::FileEntryRef::getName(), and clang::DiagnosticsEngine::Report().
Referenced by clang::HeaderSearch::LookupFile().
|
static |
Definition at line 793 of file HeaderSearch.cpp.
Referenced by clang::HeaderSearch::LookupFile().
|
static |
Definition at line 843 of file HeaderSearch.cpp.
References clang::FixItHint::CreateReplacement(), clang::FileEntryRef::getName(), isFrameworkStylePath(), and clang::DiagnosticsEngine::Report().
Referenced by clang::HeaderSearch::LookupFile().
|
static |
Definition at line 1764 of file HeaderSearch.cpp.
References clang::File, Filename, clang::FileManager::getOptionalFileRef(), and clang::DiagnosticsEngine::Report().
|
static |
Given a framework directory, find the top-most framework directory.
FileMgr | The file manager to use for directory lookups. |
DirName | The name of the framework directory. |
SubmodulePath | Will be populated with the submodule path from the returned top-level module to the originally named framework. |
Definition at line 564 of file HeaderSearch.cpp.
References clang::FileManager::getCanonicalName(), and clang::FileManager::getOptionalDirectoryRef().
|
static |
Definition at line 801 of file HeaderSearch.cpp.
Referenced by diagnoseFrameworkInclude(), and clang::HeaderSearch::suggestPathToFileForDiagnostics().
|
static |
Merge the header file info provided by OtherHFI
into the current header file info (HFI
)
Definition at line 1346 of file HeaderSearch.cpp.
References clang::HeaderFileInfo::DirInfo, clang::HeaderFileInfo::External, clang::HeaderFileInfo::Framework, clang::HeaderFileInfo::IndexHeaderMapHeader, clang::HeaderFileInfo::isImport, clang::HeaderFileInfo::isModuleHeader, clang::HeaderFileInfo::isPragmaOnce, clang::HeaderFileInfo::isTextualModuleHeader, clang::LazyIdentifierInfoPtr::isValid(), clang::HeaderFileInfo::IsValid, clang::HeaderFileInfo::LazyControllingMacro, and mergeHeaderFileInfoModuleBits().
Referenced by clang::HeaderSearch::getExistingFileInfo(), and clang::HeaderSearch::getFileInfo().
|
static |
Definition at line 1329 of file HeaderSearch.cpp.
References clang::HeaderFileInfo::isModuleHeader, and clang::HeaderFileInfo::isTextualModuleHeader.
Referenced by mergeHeaderFileInfo(), and clang::HeaderFileInfo::mergeModuleMembership().
|
static |
Definition at line 1320 of file HeaderSearch.cpp.
References clang::ModuleMap::isModular(), clang::HeaderFileInfo::isModuleHeader, clang::HeaderFileInfo::isTextualModuleHeader, and clang::ModuleMap::TextualHeader.
Referenced by clang::HeaderSearch::MarkFileModuleHeader().
Definition at line 609 of file HeaderSearch.cpp.
References clang::Module::NoUndeclaredIncludes.
|
static |
Definition at line 1691 of file HeaderSearch.cpp.
References clang::Module::directlyUses(), clang::File, clang::HeaderSearch::findModuleForHeader(), clang::HeaderSearch::getModuleMap(), clang::ModuleMap::isBuiltinHeader(), clang::Module::NoUndeclaredIncludes, clang::ModuleMap::resolveUses(), and clang::ModuleMap::TextualHeader.