Lines Matching refs:Header
148 /// header, supplied by Clang to replace, override, or augment existing system
193 // an umbrella header.
219 // Check for consistency between the module header role
223 SmallVectorImpl<Module::Header> *HeaderList[] = {
228 std::find_if(Hs->begin(), Hs->end(), [&](const Module::Header &H) {
261 for (const KnownHeader &Header : Known->second) {
263 if (violatesPrivateInclude(RequestingModule, File, Header.getRole(),
264 Header.getModule())) {
265 Private = Header.getModule();
272 !RequestingModule->directlyUses(Header.getModule())) {
273 NotUsed = Header.getModule();
284 // We have found a header, but it is private.
320 // Prefer a public header over a private header.
325 // Prefer a non-textual header over a textual header.
346 // Prefer a header from the current module over all others.
360 assert(!Headers.count(File) && "already have a module for this header");
378 // the directory of the umbrella header and the directory where
379 // the actual header is located.
401 // Infer a submodule with the same name as this header file.
417 // the module we found, since the umbrella header covers them all.
422 KnownHeader Header(Result, NormalHeader);
423 Headers[File].push_back(Header);
424 return Header;
438 bool ModuleMap::isHeaderInUnavailableModule(const FileEntry *Header) const {
439 return isHeaderUnavailableInModule(Header, nullptr);
443 ModuleMap::isHeaderUnavailableInModule(const FileEntry *Header,
445 HeadersMap::const_iterator Known = Headers.find(Header);
458 const DirectoryEntry *Dir = Header->getDir();
468 // an umbrella header.
497 // Infer a submodule with the same name as this header file.
500 llvm::sys::path::stem(Header->getName()),
680 // Look for an umbrella header.
685 // FIXME: If there's no umbrella header, we could probably scan the
709 // umbrella header "umbrella-header-name"
788 default: llvm_unreachable("unknown header role");
800 void ModuleMap::addHeader(Module *Mod, Module::Header Header,
804 // Only add each header to the headers list once.
805 // FIXME: Should we diagnose if a header is listed twice in the
807 auto &HeaderList = Headers[Header.Entry];
813 Mod->Headers[headerRoleToKind(Role)].push_back(std::move(Header));
819 HeaderInfo.MarkFileModuleHeader(Header.Entry, Role,
824 void ModuleMap::excludeHeader(Module *Mod, Module::Header Header) {
825 // Add this as a known header so we won't implicitly add it to any
829 (void) Headers[Header.Entry];
831 Mod->Headers[Module::HK_Excluded].push_back(std::move(Header));
933 // Find the module that owns this header (if any).
937 // No module owns this header, so look up the inclusion chain to see if
938 // any included header has an associated module.
1028 /// \brief Whether this module map is in a system header directory.
1122 .Case("header", MMToken::HeaderKeyword)
1304 /// header-declaration
1715 /// \brief Parse a header declaration.
1717 /// header-declaration:
1718 /// 'textual'[opt] 'header' string-literal
1719 /// 'private' 'textual'[opt] 'header' string-literal
1720 /// 'exclude' 'header' string-literal
1721 /// 'umbrella' 'header' string-literal
1723 /// FIXME: Support 'private textual header'.
1741 // Mark this header 'textual' (see doc comment for
1757 // Parse the header name.
1760 << "header";
1764 Module::UnresolvedHeaderDirective Header;
1765 Header.FileName = Tok.getString();
1766 Header.FileNameLoc = consumeToken();
1770 Diags.Report(Header.FileNameLoc, diag::err_mmap_umbrella_clash)
1780 if (llvm::sys::path::is_absolute(Header.FileName)) {
1781 RelativePathName = Header.FileName;
1784 // Search for the header file within the search directory.
1792 llvm::sys::path::append(RelativePathName, "Headers", Header.FileName);
1802 Header.FileName);
1808 llvm::sys::path::append(RelativePathName, Header.FileName);
1812 // If this is a system module with a top-level header, this header
1814 // supplied by Clang. Find that builtin header.
1817 isBuiltinHeader(Header.FileName)) {
1819 llvm::sys::path::append(BuiltinPathName, Header.FileName);
1822 // If Clang supplies this header but the underlying system does not,
1828 // from our header to the system one if we #include_next it.
1850 // Record this umbrella header.
1854 Module::Header H = {RelativePathName.str(), File};
1858 // the "real" header, so we build the built-in one first when building
1864 Module::Header H = { BuiltinFile->getName(), BuiltinFile };
1868 // Record this header.
1869 Module::Header H = { RelativePathName.str(), File };
1873 // Ignore excluded header files. They're optional anyway.
1875 // If we find a module that has a missing header, we mark this module as
1876 // unavailable and store the header directive for displaying diagnostics.
1877 Header.IsUmbrella = LeadingToken == MMToken::UmbrellaKeyword;
1879 ActiveModule->MissingHeaders.push_back(Header);
1883 static int compareModuleHeaders(const Module::Header *A,
1884 const Module::Header *B) {
1931 // Mark this header 'textual' (see doc comment for
1936 SmallVector<Module::Header, 6> Headers;
1941 Module::Header Header = {I->path(), FE};
1942 Headers.push_back(std::move(Header));
1946 // Sort header paths so that the pcm doesn't depend on iteration order.
1949 for (auto &Header : Headers)
1950 Map.addHeader(ActiveModule, std::move(Header), ModuleMap::TextualHeader);