Lines Matching +full:stream +full:- +full:id +full:- +full:range
1 //===- ASTWriter.cpp - AST File Writer ------------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
11 //===----------------------------------------------------------------------===//
151 //===----------------------------------------------------------------------===//
153 //===----------------------------------------------------------------------===//
155 static TypeCode getTypeCodeForTypeClass(Type::TypeClass id) { in getTypeCodeForTypeClass() argument
156 switch (id) { in getTypeCodeForTypeClass()
181 M = M->getTopLevelModule(); in GetAffectingModuleMaps()
202 for (auto *SubM : Mod->submodules()) in GetAffectingModuleMaps()
217 for (const Module *ImportedModule : CurrentModule->Imports) in GetAffectingModuleMaps()
219 for (const Module *UndeclaredModule : CurrentModule->UndeclaredUses) in GetAffectingModuleMaps()
222 for (auto *M : CurrentModule->submodules()) in GetAffectingModuleMaps()
226 // Handle textually-included headers that belong to other modules. in GetAffectingModuleMaps()
242 if (!HFI->isCompilingModuleHeader && HFI->isModuleHeader) in GetAffectingModuleMaps()
243 continue; // Modular header, handled in the above module-based loop. in GetAffectingModuleMaps()
244 if (!HFI->isCompilingModuleHeader && !HFI->IsLocallyIncluded) in GetAffectingModuleMaps()
245 continue; // Non-modular header not included locally is not affecting. in GetAffectingModuleMaps()
253 // module map file defining a (sub)module of a top-level module X includes in GetAffectingModuleMaps()
254 // a module map file that defines a (sub)module of another top-level module Y. in GetAffectingModuleMaps()
293 return BasicWriter.Emit(getTypeCodeForTypeClass(typePtr->getTypeClass()), in write()
307 void addSourceRange(SourceRange Range) { Record.AddSourceRange(Range, Seq); } in addSourceRange() argument
403 SourceRange range = TL.getAttrOperandParensRange(); in VisitDependentAddressSpaceTypeLoc() local
404 addSourceLocation(range.getBegin()); in VisitDependentAddressSpaceTypeLoc()
405 addSourceLocation(range.getEnd()); in VisitDependentAddressSpaceTypeLoc()
429 SourceRange range = TL.getAttrOperandParensRange(); in VisitConstantMatrixTypeLoc() local
430 addSourceLocation(range.getBegin()); in VisitConstantMatrixTypeLoc()
431 addSourceLocation(range.getEnd()); in VisitConstantMatrixTypeLoc()
439 SourceRange range = TL.getAttrOperandParensRange(); in VisitDependentSizedMatrixTypeLoc() local
440 addSourceLocation(range.getBegin()); in VisitDependentSizedMatrixTypeLoc()
441 addSourceLocation(range.getEnd()); in VisitDependentSizedMatrixTypeLoc()
512 AddNestedNameSpecifierLoc(CR->getNestedNameSpecifierLoc()); in AddConceptReference()
513 AddSourceLocation(CR->getTemplateKWLoc()); in AddConceptReference()
514 AddDeclarationNameInfo(CR->getConceptNameInfo()); in AddConceptReference()
515 AddDeclRef(CR->getFoundDecl()); in AddConceptReference()
516 AddDeclRef(CR->getNamedConcept()); in AddConceptReference()
517 push_back(CR->getTemplateArgsAsWritten() != nullptr); in AddConceptReference()
518 if (CR->getTemplateArgsAsWritten()) in AddConceptReference()
519 AddASTTemplateArgumentListInfo(CR->getTemplateArgsAsWritten()); in AddConceptReference()
674 Abv->Add(BitCodeAbbrevOp(serialization::TYPE_EXT_QUAL)); in WriteTypeAbbrevs()
675 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Type in WriteTypeAbbrevs()
676 Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 3)); // Quals in WriteTypeAbbrevs()
677 TypeExtQualAbbrev = Stream.EmitAbbrev(std::move(Abv)); in WriteTypeAbbrevs()
680 //===----------------------------------------------------------------------===//
682 //===----------------------------------------------------------------------===//
684 static void EmitBlockID(unsigned ID, const char *Name, in EmitBlockID() argument
685 llvm::BitstreamWriter &Stream, in EmitBlockID() argument
688 Record.push_back(ID); in EmitBlockID()
689 Stream.EmitRecord(llvm::bitc::BLOCKINFO_CODE_SETBID, Record); in EmitBlockID()
697 Stream.EmitRecord(llvm::bitc::BLOCKINFO_CODE_BLOCKNAME, Record); in EmitBlockID()
700 static void EmitRecordID(unsigned ID, const char *Name, in EmitRecordID() argument
701 llvm::BitstreamWriter &Stream, in EmitRecordID() argument
704 Record.push_back(ID); in EmitRecordID()
707 Stream.EmitRecord(llvm::bitc::BLOCKINFO_CODE_SETRECORDNAME, Record); in EmitRecordID()
710 static void AddStmtsExprs(llvm::BitstreamWriter &Stream, in AddStmtsExprs() argument
712 #define RECORD(X) EmitRecordID(X, #X, Stream, Record) in AddStmtsExprs()
846 Stream.EnterBlockInfoBlock(); in WriteBlockInfoBlock()
848 #define BLOCK(X) EmitBlockID(X ## _ID, #X, Stream, Record) in WriteBlockInfoBlock()
849 #define RECORD(X) EmitRecordID(X, #X, Stream, Record) in WriteBlockInfoBlock()
873 // AST Top-Level Block. in WriteBlockInfoBlock()
1094 AddStmtsExprs(Stream, Record); in WriteBlockInfoBlock()
1114 Stream.ExitBlock(); in WriteBlockInfoBlock()
1132 /// \param BaseDir When non-NULL, the PCH file is a relocatable AST file and
1200 assert(WritingModule->isNamedModule()); in createSignatureForNamedModule()
1204 for (auto [ExportImported, _] : WritingModule->Exports) in createSignatureForNamedModule()
1205 Hasher.update(ExportImported->Signature); in createSignatureForNamedModule()
1230 Hasher.update(M->Signature); in createSignatureForNamedModule()
1235 static void BackpatchSignatureAt(llvm::BitstreamWriter &Stream, in BackpatchSignatureAt() argument
1238 Stream.BackpatchByte(BitNo, Byte); in BackpatchSignatureAt()
1246 BackpatchSignatureAt(Stream, Signature, SignatureOffset); in backpatchSignature()
1251 !PP->getHeaderSearchInfo().getHeaderSearchOpts().ModulesHashContent) in backpatchSignature()
1259 BackpatchSignatureAt(Stream, ASTBlockHash, ASTBlockHashOffset); in backpatchSignature()
1260 BackpatchSignatureAt(Stream, Signature, SignatureOffset); in backpatchSignature()
1270 Stream.FlushToWord(); in writeUnhashedControlBlock()
1271 UnhashedControlBlockRange.first = Stream.GetCurrentBitNo() >> 3; in writeUnhashedControlBlock()
1275 Stream.EnterSubblock(UNHASHED_CONTROL_BLOCK_ID, 5); in writeUnhashedControlBlock()
1283 // block - we're only able to compute those at the end of the serialization in writeUnhashedControlBlock()
1286 // The bitstream VBR-encodes record elements, which makes backpatching them in writeUnhashedControlBlock()
1287 // really difficult. Let's store the signatures as blobs instead - they are in writeUnhashedControlBlock()
1288 // guaranteed to be word-aligned, and we control their format/encoding. in writeUnhashedControlBlock()
1295 Abbrev->Add(BitCodeAbbrevOp(AST_BLOCK_HASH)); in writeUnhashedControlBlock()
1296 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in writeUnhashedControlBlock()
1297 unsigned ASTBlockHashAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in writeUnhashedControlBlock()
1300 Stream.EmitRecordWithBlob(ASTBlockHashAbbrev, Record, Blob); in writeUnhashedControlBlock()
1301 ASTBlockHashOffset = Stream.GetCurrentBitNo() - Blob.size() * 8; in writeUnhashedControlBlock()
1306 Abbrev->Add(BitCodeAbbrevOp(SIGNATURE)); in writeUnhashedControlBlock()
1307 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in writeUnhashedControlBlock()
1308 unsigned SignatureAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in writeUnhashedControlBlock()
1311 Stream.EmitRecordWithBlob(SignatureAbbrev, Record, Blob); in writeUnhashedControlBlock()
1312 SignatureOffset = Stream.GetCurrentBitNo() - Blob.size() * 8; in writeUnhashedControlBlock()
1334 Stream.EmitRecord(DIAGNOSTIC_OPTIONS, Record); in writeUnhashedControlBlock()
1362 Stream.EmitRecord(HEADER_SEARCH_PATHS, Record); in writeUnhashedControlBlock()
1372 Abbrev->Add(BitCodeAbbrevOp(HEADER_SEARCH_ENTRY_USAGE)); in writeUnhashedControlBlock()
1373 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // Number of bits. in writeUnhashedControlBlock()
1374 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Bit vector. in writeUnhashedControlBlock()
1375 unsigned HSUsageAbbrevCode = Stream.EmitAbbrev(std::move(Abbrev)); in writeUnhashedControlBlock()
1378 Stream.EmitRecordWithBlob(HSUsageAbbrevCode, Record, bytes(HSEntryUsage)); in writeUnhashedControlBlock()
1385 Abbrev->Add(BitCodeAbbrevOp(VFS_USAGE)); in writeUnhashedControlBlock()
1386 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // Number of bits. in writeUnhashedControlBlock()
1387 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Bit vector. in writeUnhashedControlBlock()
1388 unsigned VFSUsageAbbrevCode = Stream.EmitAbbrev(std::move(Abbrev)); in writeUnhashedControlBlock()
1390 Stream.EmitRecordWithBlob(VFSUsageAbbrevCode, Record, bytes(VFSUsage)); in writeUnhashedControlBlock()
1394 Stream.ExitBlock(); in writeUnhashedControlBlock()
1395 UnhashedControlBlockRange.second = Stream.GetCurrentBitNo() >> 3; in writeUnhashedControlBlock()
1403 Stream.EnterSubblock(CONTROL_BLOCK_ID, 5); in WriteControlBlock()
1408 MetadataAbbrev->Add(BitCodeAbbrevOp(METADATA)); in WriteControlBlock()
1409 MetadataAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Major in WriteControlBlock()
1410 MetadataAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Minor in WriteControlBlock()
1411 MetadataAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Clang maj. in WriteControlBlock()
1412 MetadataAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Clang min. in WriteControlBlock()
1413 MetadataAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Relocatable in WriteControlBlock()
1415 MetadataAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); in WriteControlBlock()
1416 MetadataAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Timestamps in WriteControlBlock()
1417 MetadataAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Errors in WriteControlBlock()
1418 MetadataAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // SVN branch/tag in WriteControlBlock()
1419 unsigned MetadataAbbrevCode = Stream.EmitAbbrev(std::move(MetadataAbbrev)); in WriteControlBlock()
1432 Stream.EmitRecordWithBlob(MetadataAbbrevCode, Record, in WriteControlBlock()
1439 Abbrev->Add(BitCodeAbbrevOp(MODULE_NAME)); in WriteControlBlock()
1440 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name in WriteControlBlock()
1441 unsigned AbbrevCode = Stream.EmitAbbrev(std::move(Abbrev)); in WriteControlBlock()
1443 Stream.EmitRecordWithBlob(AbbrevCode, Record, WritingModule->Name); in WriteControlBlock()
1446 if (WritingModule && WritingModule->Directory) { in WriteControlBlock()
1453 BaseDir.assign(CWD->getName()); in WriteControlBlock()
1455 BaseDir.assign(WritingModule->Directory->getName()); in WriteControlBlock()
1466 WritingModule->Directory->getName() != ".")) { in WriteControlBlock()
1469 Abbrev->Add(BitCodeAbbrevOp(MODULE_DIRECTORY)); in WriteControlBlock()
1470 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Directory in WriteControlBlock()
1471 unsigned AbbrevCode = Stream.EmitAbbrev(std::move(Abbrev)); in WriteControlBlock()
1474 Stream.EmitRecordWithBlob(AbbrevCode, Record, BaseDir); in WriteControlBlock()
1485 if (WritingModule && WritingModule->Kind == Module::ModuleMapModule) { in WriteControlBlock()
1489 AddPath(WritingModule->PresumedModuleMapFile.empty() in WriteControlBlock()
1491 ->getNameAsRequested() in WriteControlBlock()
1492 : StringRef(WritingModule->PresumedModuleMapFile), in WriteControlBlock()
1498 Record.push_back(AdditionalModMaps->size()); in WriteControlBlock()
1499 SmallVector<FileEntryRef, 1> ModMaps(AdditionalModMaps->begin(), in WriteControlBlock()
1500 AdditionalModMaps->end()); in WriteControlBlock()
1510 Stream.EmitRecord(MODULE_MAP_FILE, Record); in WriteControlBlock()
1515 serialization::ModuleManager &Mgr = Chain->getModuleManager(); in WriteControlBlock()
1542 Stream.EmitRecord(IMPORTS, Record); in WriteControlBlock()
1546 Stream.EnterSubblock(OPTIONS_BLOCK_ID, 4); in WriteControlBlock()
1556 #define SANITIZER(NAME, ID) \ in WriteControlBlock() argument
1557 Record.push_back(LangOpts.Sanitize.has(SanitizerKind::ID)); in WriteControlBlock()
1583 Stream.EmitRecord(LANGUAGE_OPTIONS, Record); in WriteControlBlock()
1601 Stream.EmitRecord(TARGET_OPTIONS, Record); in WriteControlBlock()
1608 Stream.EmitRecord(FILE_SYSTEM_OPTIONS, Record); in WriteControlBlock()
1629 Stream.EmitRecord(HEADER_SEARCH_OPTIONS, Record); in WriteControlBlock()
1665 Stream.EmitRecord(PREPROCESSOR_OPTIONS, Record); in WriteControlBlock()
1668 Stream.ExitBlock(); in WriteControlBlock()
1670 // Original file name and file ID in WriteControlBlock()
1674 FileAbbrev->Add(BitCodeAbbrevOp(ORIGINAL_FILE)); in WriteControlBlock()
1675 FileAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // File ID in WriteControlBlock()
1676 FileAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // File name in WriteControlBlock()
1677 unsigned FileAbbrevCode = Stream.EmitAbbrev(std::move(FileAbbrev)); in WriteControlBlock()
1682 EmitRecordWithPath(FileAbbrevCode, Record, MainFile->getName()); in WriteControlBlock()
1687 Stream.EmitRecord(ORIGINAL_FILE_ID, Record); in WriteControlBlock()
1691 Stream.ExitBlock(); in WriteControlBlock()
1717 if (!IsSLocAffecting[IncludeFID.ID]) in getAffectingIncludeLoc()
1727 Stream.EnterSubblock(INPUT_FILES_BLOCK_ID, 4); in WriteInputFiles()
1729 // Create input-file abbreviation. in WriteInputFiles()
1731 IFAbbrev->Add(BitCodeAbbrevOp(INPUT_FILE)); in WriteInputFiles()
1732 IFAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // ID in WriteInputFiles()
1733 IFAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 12)); // Size in WriteInputFiles()
1734 IFAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 32)); // Modification time in WriteInputFiles()
1735 IFAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Overridden in WriteInputFiles()
1736 IFAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Transient in WriteInputFiles()
1737 IFAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Top-level in WriteInputFiles()
1738 IFAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Module map in WriteInputFiles()
1739 IFAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 16)); // Name as req. len in WriteInputFiles()
1740 IFAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name as req. + name in WriteInputFiles()
1741 unsigned IFAbbrevCode = Stream.EmitAbbrev(std::move(IFAbbrev)); in WriteInputFiles()
1745 IFHAbbrev->Add(BitCodeAbbrevOp(INPUT_FILE_HASH)); in WriteInputFiles()
1746 IFHAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); in WriteInputFiles()
1747 IFHAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); in WriteInputFiles()
1748 unsigned IFHAbbrevCode = Stream.EmitAbbrev(std::move(IFHAbbrev)); in WriteInputFiles()
1750 uint64_t InputFilesOffsetBase = Stream.GetCurrentBitNo(); in WriteInputFiles()
1761 if (!SLoc->isFile()) in WriteInputFiles()
1763 const SrcMgr::FileInfo &File = SLoc->getFile(); in WriteInputFiles()
1765 if (!Cache->OrigEntry) in WriteInputFiles()
1772 InputFileEntry Entry(*Cache->OrigEntry); in WriteInputFiles()
1774 Entry.IsTransient = Cache->IsTransient; in WriteInputFiles()
1775 Entry.BufferOverridden = Cache->BufferOverridden; in WriteInputFiles()
1780 if (PP->getHeaderSearchInfo() in WriteInputFiles()
1783 auto MemBuff = Cache->getBufferIfLoaded(); in WriteInputFiles()
1785 ContentHash = xxh3_64bits(MemBuff->getBuffer()); in WriteInputFiles()
1787 PP->Diag(SourceLocation(), diag::err_module_unable_to_hash_content) in WriteInputFiles()
1811 InputFileOffsets.push_back(Stream.GetCurrentBitNo() - InputFilesOffsetBase); in WriteInputFiles()
1841 Stream.EmitRecordWithBlob(IFAbbrevCode, Record, in WriteInputFiles()
1849 Stream.EmitRecordWithAbbrev(IFHAbbrevCode, Record); in WriteInputFiles()
1853 Stream.ExitBlock(); in WriteInputFiles()
1857 OffsetsAbbrev->Add(BitCodeAbbrevOp(INPUT_FILE_OFFSETS)); in WriteInputFiles()
1858 OffsetsAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // # input files in WriteInputFiles()
1859 OffsetsAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // # non-system in WriteInputFiles()
1861 OffsetsAbbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Array in WriteInputFiles()
1862 unsigned OffsetsAbbrevCode = Stream.EmitAbbrev(std::move(OffsetsAbbrev)); in WriteInputFiles()
1867 Stream.EmitRecordWithBlob(OffsetsAbbrevCode, Record, bytes(InputFileOffsets)); in WriteInputFiles()
1870 //===----------------------------------------------------------------------===//
1872 //===----------------------------------------------------------------------===//
1876 static unsigned CreateSLocFileAbbrev(llvm::BitstreamWriter &Stream) { in CreateSLocFileAbbrev() argument
1880 Abbrev->Add(BitCodeAbbrevOp(SM_SLOC_FILE_ENTRY)); in CreateSLocFileAbbrev()
1881 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Offset in CreateSLocFileAbbrev()
1882 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Include location in CreateSLocFileAbbrev()
1883 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); // Characteristic in CreateSLocFileAbbrev()
1884 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Line directives in CreateSLocFileAbbrev()
1886 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Input File ID in CreateSLocFileAbbrev()
1887 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // NumCreatedFIDs in CreateSLocFileAbbrev()
1888 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 24)); // FirstDeclIndex in CreateSLocFileAbbrev()
1889 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // NumDecls in CreateSLocFileAbbrev()
1890 return Stream.EmitAbbrev(std::move(Abbrev)); in CreateSLocFileAbbrev()
1895 static unsigned CreateSLocBufferAbbrev(llvm::BitstreamWriter &Stream) { in CreateSLocBufferAbbrev() argument
1899 Abbrev->Add(BitCodeAbbrevOp(SM_SLOC_BUFFER_ENTRY)); in CreateSLocBufferAbbrev()
1900 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Offset in CreateSLocBufferAbbrev()
1901 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Include location in CreateSLocBufferAbbrev()
1902 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); // Characteristic in CreateSLocBufferAbbrev()
1903 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Line directives in CreateSLocBufferAbbrev()
1904 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Buffer name blob in CreateSLocBufferAbbrev()
1905 return Stream.EmitAbbrev(std::move(Abbrev)); in CreateSLocBufferAbbrev()
1910 static unsigned CreateSLocBufferBlobAbbrev(llvm::BitstreamWriter &Stream, in CreateSLocBufferBlobAbbrev() argument
1915 Abbrev->Add(BitCodeAbbrevOp(Compressed ? SM_SLOC_BUFFER_BLOB_COMPRESSED in CreateSLocBufferBlobAbbrev()
1918 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Uncompressed size in CreateSLocBufferBlobAbbrev()
1919 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Blob in CreateSLocBufferBlobAbbrev()
1920 return Stream.EmitAbbrev(std::move(Abbrev)); in CreateSLocBufferBlobAbbrev()
1925 static unsigned CreateSLocExpansionAbbrev(llvm::BitstreamWriter &Stream) { in CreateSLocExpansionAbbrev() argument
1929 Abbrev->Add(BitCodeAbbrevOp(SM_SLOC_EXPANSION_ENTRY)); in CreateSLocExpansionAbbrev()
1930 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Offset in CreateSLocExpansionAbbrev()
1931 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Spelling location in CreateSLocExpansionAbbrev()
1932 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Start location in CreateSLocExpansionAbbrev()
1933 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // End location in CreateSLocExpansionAbbrev()
1934 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Is token range in CreateSLocExpansionAbbrev()
1935 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Token length in CreateSLocExpansionAbbrev()
1936 return Stream.EmitAbbrev(std::move(Abbrev)); in CreateSLocExpansionAbbrev()
1939 /// Emit key length and data length as ULEB-encoded data, and return them as a
1950 // Trait used for the on-disk hash table of header search information.
2015 KeyLen -= 8; in EmitKey()
2017 KeyLen -= 8; in EmitKey()
2054 Offset = Pos->second; in EmitData()
2071 assert(Out.tell() - Start == DataLen && "Wrong data length"); in EmitData()
2099 if (M->isUnimportable()) in WriteHeaderSearch()
2111 for (const auto &U : M->MissingHeaders) { in WriteHeaderSearch()
2115 PP->Diag(U.FileNameLoc, diag::err_module_no_size_mtime_for_header) in WriteHeaderSearch()
2116 << WritingModule->getFullModuleName() << U.Size.has_value() in WriteHeaderSearch()
2122 SmallString<128> Filename(M->Directory->getName()); in WriteHeaderSearch()
2138 auto SubmodulesRange = M->submodules(); in WriteHeaderSearch()
2157 if (!HFI->isCompilingModuleHeader && HFI->isModuleHeader) in WriteHeaderSearch()
2159 if (!HFI->isCompilingModuleHeader && !PP->alreadyIncluded(*File)) in WriteHeaderSearch()
2160 continue; // Non-modular header not included is not needed. in WriteHeaderSearch()
2163 StringRef Filename = File->getName(); in WriteHeaderSearch()
2172 bool Included = PP->alreadyIncluded(*File); in WriteHeaderSearch()
2175 Filename, File->getSize(), getTimestampForOutput(*File) in WriteHeaderSearch()
2184 // Create the on-disk hash table in a buffer. in WriteHeaderSearch()
2200 Abbrev->Add(BitCodeAbbrevOp(HEADER_SEARCH_TABLE)); in WriteHeaderSearch()
2201 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); in WriteHeaderSearch()
2202 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); in WriteHeaderSearch()
2203 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); in WriteHeaderSearch()
2204 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WriteHeaderSearch()
2205 unsigned TableAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteHeaderSearch()
2211 Stream.EmitRecordWithBlob(TableAbbrev, Record, TableData); in WriteHeaderSearch()
2218 static void emitBlob(llvm::BitstreamWriter &Stream, StringRef Blob, in emitBlob() argument
2229 RecordDataType Record[] = {SM_SLOC_BUFFER_BLOB_COMPRESSED, Blob.size() - 1}; in emitBlob()
2230 Stream.EmitRecordWithBlob(SLocBufferBlobCompressedAbbrv, Record, in emitBlob()
2237 RecordDataType Record[] = {SM_SLOC_BUFFER_BLOB_COMPRESSED, Blob.size() - 1}; in emitBlob()
2238 Stream.EmitRecordWithBlob(SLocBufferBlobCompressedAbbrv, Record, in emitBlob()
2244 Stream.EmitRecordWithBlob(SLocBufferBlobAbbrv, Record, Blob); in emitBlob()
2250 /// TODO: We should probably use an on-disk hash table (stored in a
2260 Stream.EnterSubblock(SOURCE_MANAGER_BLOCK_ID, 4); in WriteSourceManagerBlock()
2261 const uint64_t SourceManagerBlockOffset = Stream.GetCurrentBitNo(); in WriteSourceManagerBlock()
2263 // Abbreviations for the various kinds of source-location entries. in WriteSourceManagerBlock()
2264 unsigned SLocFileAbbrv = CreateSLocFileAbbrev(Stream); in WriteSourceManagerBlock()
2265 unsigned SLocBufferAbbrv = CreateSLocBufferAbbrev(Stream); in WriteSourceManagerBlock()
2266 unsigned SLocBufferBlobAbbrv = CreateSLocBufferBlobAbbrev(Stream, false); in WriteSourceManagerBlock()
2268 CreateSLocBufferBlobAbbrev(Stream, true); in WriteSourceManagerBlock()
2269 unsigned SLocExpansionAbbrv = CreateSLocExpansionAbbrev(Stream); in WriteSourceManagerBlock()
2274 uint64_t SLocEntryOffsetsBase = Stream.GetCurrentBitNo(); in WriteSourceManagerBlock()
2275 SLocEntryOffsets.reserve(SourceMgr.local_sloc_entry_size() - 1); in WriteSourceManagerBlock()
2283 // Record the offset of this source-location entry. in WriteSourceManagerBlock()
2284 uint64_t Offset = Stream.GetCurrentBitNo() - SLocEntryOffsetsBase; in WriteSourceManagerBlock()
2289 if (SLoc->isFile()) { in WriteSourceManagerBlock()
2290 const SrcMgr::ContentCache *Cache = &SLoc->getFile().getContentCache(); in WriteSourceManagerBlock()
2291 if (Cache->OrigEntry) { in WriteSourceManagerBlock()
2300 if (SLoc->isFile()) { in WriteSourceManagerBlock()
2301 const SrcMgr::FileInfo &File = SLoc->getFile(); in WriteSourceManagerBlock()
2308 Record.push_back(getAdjustedOffset(SLoc->getOffset()) - 2); in WriteSourceManagerBlock()
2314 if (Content->OrigEntry) { in WriteSourceManagerBlock()
2315 assert(Content->OrigEntry == Content->ContentsEntry && in WriteSourceManagerBlock()
2318 // The source location entry is a file. Emit input file ID. in WriteSourceManagerBlock()
2319 assert(InputFileIDs[*Content->OrigEntry] != 0 && "Missed file entry"); in WriteSourceManagerBlock()
2320 Record.push_back(InputFileIDs[*Content->OrigEntry]); in WriteSourceManagerBlock()
2326 Record.push_back(FDI->second->FirstDeclIndex); in WriteSourceManagerBlock()
2327 Record.push_back(FDI->second->DeclIDs.size()); in WriteSourceManagerBlock()
2333 Stream.EmitRecordWithAbbrev(SLocFileAbbrv, Record); in WriteSourceManagerBlock()
2335 if (Content->BufferOverridden || Content->IsTransient) in WriteSourceManagerBlock()
2345 Content->getBufferOrNone(PP.getDiagnostics(), PP.getFileManager()); in WriteSourceManagerBlock()
2346 StringRef Name = Buffer ? Buffer->getBufferIdentifier() : ""; in WriteSourceManagerBlock()
2347 Stream.EmitRecordWithBlob(SLocBufferAbbrv, Record, in WriteSourceManagerBlock()
2353 // Include the implicit terminating null character in the on-disk buffer in WriteSourceManagerBlock()
2356 Content->getBufferOrNone(PP.getDiagnostics(), PP.getFileManager()); in WriteSourceManagerBlock()
2359 StringRef Blob(Buffer->getBufferStart(), Buffer->getBufferSize() + 1); in WriteSourceManagerBlock()
2360 emitBlob(Stream, Blob, SLocBufferBlobCompressedAbbrv, in WriteSourceManagerBlock()
2365 const SrcMgr::ExpansionInfo &Expansion = SLoc->getExpansion(); in WriteSourceManagerBlock()
2368 Record.push_back(getAdjustedOffset(SLoc->getOffset()) - 2); in WriteSourceManagerBlock()
2382 Record.push_back(getAdjustedOffset(NextOffset - SLoc->getOffset()) - 1); in WriteSourceManagerBlock()
2383 Stream.EmitRecordWithAbbrev(SLocExpansionAbbrv, Record); in WriteSourceManagerBlock()
2387 Stream.ExitBlock(); in WriteSourceManagerBlock()
2392 // Write the source-location offsets table into the AST block. This in WriteSourceManagerBlock()
2393 // table is used for lazily loading source-location information. in WriteSourceManagerBlock()
2397 Abbrev->Add(BitCodeAbbrevOp(SOURCE_LOCATION_OFFSETS)); in WriteSourceManagerBlock()
2398 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 16)); // # of slocs in WriteSourceManagerBlock()
2399 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 16)); // total size in WriteSourceManagerBlock()
2400 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 32)); // base offset in WriteSourceManagerBlock()
2401 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // offsets in WriteSourceManagerBlock()
2402 unsigned SLocOffsetsAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSourceManagerBlock()
2406 getAdjustedOffset(SourceMgr.getNextLocalOffset()) - 1 /* skip dummy */, in WriteSourceManagerBlock()
2407 SLocEntryOffsetsBase - SourceManagerBlockOffset}; in WriteSourceManagerBlock()
2408 Stream.EmitRecordWithBlob(SLocOffsetsAbbrev, Record, in WriteSourceManagerBlock()
2421 FilenameMap[-1] = -1; // For unspecified filenames. in WriteSourceManagerBlock()
2423 if (L.first.ID < 0) in WriteSourceManagerBlock()
2427 FilenameMap.size() - 1)).second) in WriteSourceManagerBlock()
2436 if (L.first.ID < 0) in WriteSourceManagerBlock()
2452 Stream.EmitRecord(SOURCE_MANAGER_LINE_TABLE, Record); in WriteSourceManagerBlock()
2456 //===----------------------------------------------------------------------===//
2458 //===----------------------------------------------------------------------===//
2462 if (MacroInfo *MI = MD->getMacroInfo()) in shouldIgnoreMacro()
2463 if (MI->isBuiltinMacro()) in shouldIgnoreMacro()
2467 SourceLocation Loc = MD->getLocation(); in shouldIgnoreMacro()
2480 uint64_t MacroOffsetsBase = Stream.GetCurrentBitNo(); in WritePreprocessor()
2492 Stream.EmitRecord(PP_COUNTER_VALUE, Record); in WritePreprocessor()
2502 Stream.EmitRecord(PP_ASSUME_NONNULL_LOC, Record); in WritePreprocessor()
2511 AddSourceLocation(SkipInfo->HashTokenLoc, Record); in WritePreprocessor()
2512 AddSourceLocation(SkipInfo->IfTokenLoc, Record); in WritePreprocessor()
2513 Record.push_back(SkipInfo->FoundNonSkipPortion); in WritePreprocessor()
2514 Record.push_back(SkipInfo->FoundElse); in WritePreprocessor()
2515 AddSourceLocation(SkipInfo->ElseLoc, Record); in WritePreprocessor()
2525 Stream.EmitRecord(PP_CONDITIONAL_STACK, Record); in WritePreprocessor()
2529 // Write the safe buffer opt-out region map in PP in WritePreprocessor()
2532 Stream.EmitRecord(PP_UNSAFE_BUFFER_USAGE, Record); in WritePreprocessor()
2536 Stream.EnterSubblock(PREPROCESSOR_BLOCK_ID, 3); in WritePreprocessor()
2552 for (auto &Id : PP.getIdentifierTable()) in WritePreprocessor() local
2553 if (Id.second->hadMacroDefinition() && in WritePreprocessor()
2554 (!Id.second->isFromAST() || in WritePreprocessor()
2555 Id.second->hasChangedSinceDeserialization())) in WritePreprocessor()
2556 MacroIdentifiers.push_back(Id.second); in WritePreprocessor()
2565 uint64_t StartOffset = Stream.GetCurrentBitNo() - MacroOffsetsBase; in WritePreprocessor()
2574 // do not have sub-modules (although they might import other header units). in WritePreprocessor()
2577 if (IsModule && WritingModule->isHeaderUnit()) { in WritePreprocessor()
2582 MD->getKind() == MacroDirective::MD_Undefine) in WritePreprocessor()
2584 AddSourceLocation(MD->getLocation(), Record); in WritePreprocessor()
2585 Record.push_back(MD->getKind()); in WritePreprocessor()
2587 Record.push_back(getMacroRef(DefMD->getInfo(), Name)); in WritePreprocessor()
2589 Record.push_back(VisMD->isPublic()); in WritePreprocessor()
2592 ModuleMacroRecord.push_back(getMacroRef(MD->getMacroInfo(), Name)); in WritePreprocessor()
2593 Stream.EmitRecord(PP_MODULE_MACRO, ModuleMacroRecord); in WritePreprocessor()
2598 for (; MD; MD = MD->getPrevious()) { in WritePreprocessor()
2603 AddSourceLocation(MD->getLocation(), Record); in WritePreprocessor()
2604 Record.push_back(MD->getKind()); in WritePreprocessor()
2606 Record.push_back(getMacroRef(DefMD->getInfo(), Name)); in WritePreprocessor()
2608 Record.push_back(VisMD->isPublic()); in WritePreprocessor()
2620 ModuleMacroRecord.push_back(getSubmoduleID(Macro->getOwningModule())); in WritePreprocessor()
2621 ModuleMacroRecord.push_back(getMacroRef(Macro->getMacroInfo(), Name)); in WritePreprocessor()
2622 for (auto *M : Macro->overrides()) in WritePreprocessor()
2623 ModuleMacroRecord.push_back(getSubmoduleID(M->getOwningModule())); in WritePreprocessor()
2625 Stream.EmitRecord(PP_MODULE_MACRO, ModuleMacroRecord); in WritePreprocessor()
2629 for (auto *M : Macro->overrides()) in WritePreprocessor()
2630 if (++Visits[M] == M->getNumOverridingMacros()) in WritePreprocessor()
2640 Stream.EmitRecord(PP_MACRO_DIRECTIVE_HISTORY, Record); in WritePreprocessor()
2645 /// the local macro ID in WritePreprocessor()
2655 MacroID ID = MacroInfosToEmit[I].ID; in WritePreprocessor() local
2657 if (ID < FirstMacroID) { in WritePreprocessor()
2663 unsigned Index = ID - FirstMacroID; in WritePreprocessor()
2667 uint64_t Offset = Stream.GetCurrentBitNo() - MacroOffsetsBase; in WritePreprocessor()
2672 AddSourceLocation(MI->getDefinitionLoc(), Record); in WritePreprocessor()
2673 AddSourceLocation(MI->getDefinitionEndLoc(), Record); in WritePreprocessor()
2674 Record.push_back(MI->isUsed()); in WritePreprocessor()
2675 Record.push_back(MI->isUsedForHeaderGuard()); in WritePreprocessor()
2676 Record.push_back(MI->getNumTokens()); in WritePreprocessor()
2678 if (MI->isObjectLike()) { in WritePreprocessor()
2683 Record.push_back(MI->isC99Varargs()); in WritePreprocessor()
2684 Record.push_back(MI->isGNUVarargs()); in WritePreprocessor()
2685 Record.push_back(MI->hasCommaPasting()); in WritePreprocessor()
2686 Record.push_back(MI->getNumParams()); in WritePreprocessor()
2687 for (const IdentifierInfo *Param : MI->params()) in WritePreprocessor()
2692 // ID that corresponds to this macro. in WritePreprocessor()
2694 Record.push_back(MacroDefinitions[PPRec->findMacroDefinition(MI)]); in WritePreprocessor()
2696 Stream.EmitRecord(Code, Record); in WritePreprocessor()
2700 for (unsigned TokNo = 0, e = MI->getNumTokens(); TokNo != e; ++TokNo) { in WritePreprocessor()
2704 const Token &Tok = MI->getReplacementToken(TokNo); in WritePreprocessor()
2706 Stream.EmitRecord(PP_TOKEN, Record); in WritePreprocessor()
2712 Stream.ExitBlock(); in WritePreprocessor()
2718 Abbrev->Add(BitCodeAbbrevOp(MACRO_OFFSET)); in WritePreprocessor()
2719 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // # of macros in WritePreprocessor()
2720 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // first ID in WritePreprocessor()
2721 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 32)); // base offset in WritePreprocessor()
2722 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WritePreprocessor()
2724 unsigned MacroOffsetAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WritePreprocessor()
2727 FirstMacroID - NUM_PREDEF_MACRO_IDS, in WritePreprocessor()
2728 MacroOffsetsBase - ASTBlockStartOffset}; in WritePreprocessor()
2729 Stream.EmitRecordWithBlob(MacroOffsetAbbrev, Record, bytes(MacroOffsets)); in WritePreprocessor()
2741 Stream.EnterSubblock(PREPROCESSOR_DETAIL_BLOCK_ID, 3); in WritePreprocessorDetail()
2751 Abbrev->Add(BitCodeAbbrevOp(PPD_INCLUSION_DIRECTIVE)); in WritePreprocessorDetail()
2752 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // filename length in WritePreprocessorDetail()
2753 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // in quotes in WritePreprocessorDetail()
2754 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2)); // kind in WritePreprocessorDetail()
2755 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // imported module in WritePreprocessorDetail()
2756 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WritePreprocessorDetail()
2757 InclusionAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WritePreprocessorDetail()
2771 uint64_t Offset = Stream.GetCurrentBitNo() - MacroOffsetsBase; in WritePreprocessorDetail()
2773 SourceRange R = getAdjustedRange((*E)->getSourceRange()); in WritePreprocessorDetail()
2779 // Record this macro definition's ID. in WritePreprocessorDetail()
2782 AddIdentifierRef(MD->getName(), Record); in WritePreprocessorDetail()
2783 Stream.EmitRecord(PPD_MACRO_DEFINITION, Record); in WritePreprocessorDetail()
2788 Record.push_back(ME->isBuiltinMacro()); in WritePreprocessorDetail()
2789 if (ME->isBuiltinMacro()) in WritePreprocessorDetail()
2790 AddIdentifierRef(ME->getName(), Record); in WritePreprocessorDetail()
2792 Record.push_back(MacroDefinitions[ME->getDefinition()]); in WritePreprocessorDetail()
2793 Stream.EmitRecord(PPD_MACRO_EXPANSION, Record); in WritePreprocessorDetail()
2797 if (auto *ID = dyn_cast<InclusionDirective>(*E)) { in WritePreprocessorDetail() local
2799 Record.push_back(ID->getFileName().size()); in WritePreprocessorDetail()
2800 Record.push_back(ID->wasInQuotes()); in WritePreprocessorDetail()
2801 Record.push_back(static_cast<unsigned>(ID->getKind())); in WritePreprocessorDetail()
2802 Record.push_back(ID->importedModule()); in WritePreprocessorDetail()
2804 Buffer += ID->getFileName(); in WritePreprocessorDetail()
2807 if (ID->getFile()) in WritePreprocessorDetail()
2808 Buffer += ID->getFile()->getName(); in WritePreprocessorDetail()
2809 Stream.EmitRecordWithBlob(InclusionAbbrev, Record, Buffer); in WritePreprocessorDetail()
2815 Stream.ExitBlock(); in WritePreprocessorDetail()
2825 Abbrev->Add(BitCodeAbbrevOp(PPD_ENTITIES_OFFSETS)); in WritePreprocessorDetail()
2826 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // first pp entity in WritePreprocessorDetail()
2827 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WritePreprocessorDetail()
2828 unsigned PPEOffsetAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WritePreprocessorDetail()
2831 FirstPreprocessorEntityID - in WritePreprocessorDetail()
2833 Stream.EmitRecordWithBlob(PPEOffsetAbbrev, Record, in WritePreprocessorDetail()
2842 for (auto const& Range : SkippedRanges) in WritePreprocessorDetail() local
2844 getRawSourceLocationEncoding(Range.getBegin()), in WritePreprocessorDetail()
2845 getRawSourceLocationEncoding(Range.getEnd())); in WritePreprocessorDetail()
2849 Abbrev->Add(BitCodeAbbrevOp(PPD_SKIPPED_RANGES)); in WritePreprocessorDetail()
2850 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WritePreprocessorDetail()
2851 unsigned PPESkippedRangeAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WritePreprocessorDetail()
2855 Stream.EmitRecordWithBlob(PPESkippedRangeAbbrev, Record, in WritePreprocessorDetail()
2866 return Known->second; in getLocalOrImportedSubmoduleID()
2868 auto *Top = Mod->getTopLevelModule(); in getLocalOrImportedSubmoduleID()
2871 !Top->fullModuleNameIs(StringRef(getLangOpts().CurrentModule)))) in getLocalOrImportedSubmoduleID()
2878 unsigned ID = getLocalOrImportedSubmoduleID(Mod); in getSubmoduleID() local
2881 // instance, a cross-top-level-module 'conflict' declaration will hit this. in getSubmoduleID()
2882 // assert((ID || !Mod) && in getSubmoduleID()
2883 // "asked for module ID for non-local, non-imported module"); in getSubmoduleID()
2884 return ID; in getSubmoduleID()
2891 for (auto *Submodule : Mod->submodules()) in getNumberOfModules()
2899 Stream.EnterSubblock(SUBMODULE_BLOCK_ID, /*bits for abbreviations*/5); in WriteSubmodules()
2905 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_DEFINITION)); in WriteSubmodules()
2906 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // ID in WriteSubmodules()
2907 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Parent in WriteSubmodules()
2908 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // Kind in WriteSubmodules()
2909 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8)); // Definition location in WriteSubmodules()
2910 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // IsFramework in WriteSubmodules()
2911 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // IsExplicit in WriteSubmodules()
2912 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // IsSystem in WriteSubmodules()
2913 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // IsExternC in WriteSubmodules()
2914 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // InferSubmodules... in WriteSubmodules()
2915 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // InferExplicit... in WriteSubmodules()
2916 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // InferExportWild... in WriteSubmodules()
2917 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // ConfigMacrosExh... in WriteSubmodules()
2918 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // ModuleMapIsPriv... in WriteSubmodules()
2919 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // NamedModuleHasN... in WriteSubmodules()
2920 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name in WriteSubmodules()
2921 unsigned DefinitionAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2924 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_UMBRELLA_HEADER)); in WriteSubmodules()
2925 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name in WriteSubmodules()
2926 unsigned UmbrellaAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2929 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_HEADER)); in WriteSubmodules()
2930 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name in WriteSubmodules()
2931 unsigned HeaderAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2934 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_TOPHEADER)); in WriteSubmodules()
2935 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name in WriteSubmodules()
2936 unsigned TopHeaderAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2939 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_UMBRELLA_DIR)); in WriteSubmodules()
2940 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name in WriteSubmodules()
2941 unsigned UmbrellaDirAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2944 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_REQUIRES)); in WriteSubmodules()
2945 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // State in WriteSubmodules()
2946 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Feature in WriteSubmodules()
2947 unsigned RequiresAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2950 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_EXCLUDED_HEADER)); in WriteSubmodules()
2951 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name in WriteSubmodules()
2952 unsigned ExcludedHeaderAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2955 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_TEXTUAL_HEADER)); in WriteSubmodules()
2956 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name in WriteSubmodules()
2957 unsigned TextualHeaderAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2960 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_PRIVATE_HEADER)); in WriteSubmodules()
2961 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name in WriteSubmodules()
2962 unsigned PrivateHeaderAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2965 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_PRIVATE_TEXTUAL_HEADER)); in WriteSubmodules()
2966 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name in WriteSubmodules()
2967 unsigned PrivateTextualHeaderAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2970 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_LINK_LIBRARY)); in WriteSubmodules()
2971 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // IsFramework in WriteSubmodules()
2972 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name in WriteSubmodules()
2973 unsigned LinkLibraryAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2976 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_CONFIG_MACRO)); in WriteSubmodules()
2977 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Macro name in WriteSubmodules()
2978 unsigned ConfigMacroAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2981 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_CONFLICT)); in WriteSubmodules()
2982 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Other module in WriteSubmodules()
2983 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Message in WriteSubmodules()
2984 unsigned ConflictAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2987 Abbrev->Add(BitCodeAbbrevOp(SUBMODULE_EXPORT_AS)); in WriteSubmodules()
2988 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Macro name in WriteSubmodules()
2989 unsigned ExportAsAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSubmodules()
2994 FirstSubmoduleID - NUM_PREDEF_SUBMODULE_IDS}; in WriteSubmodules()
2995 Stream.EmitRecord(SUBMODULE_METADATA, Record); in WriteSubmodules()
3003 unsigned ID = getSubmoduleID(Mod); in WriteSubmodules() local
3006 if (Mod->Parent) { in WriteSubmodules()
3007 assert(SubmoduleIDs[Mod->Parent] && "Submodule parent not written?"); in WriteSubmodules()
3008 ParentID = SubmoduleIDs[Mod->Parent]; in WriteSubmodules()
3012 getRawSourceLocationEncoding(getAdjustedLocation(Mod->DefinitionLoc)); in WriteSubmodules()
3017 ID, in WriteSubmodules()
3019 (RecordData::value_type)Mod->Kind, in WriteSubmodules()
3021 Mod->IsFramework, in WriteSubmodules()
3022 Mod->IsExplicit, in WriteSubmodules()
3023 Mod->IsSystem, in WriteSubmodules()
3024 Mod->IsExternC, in WriteSubmodules()
3025 Mod->InferSubmodules, in WriteSubmodules()
3026 Mod->InferExplicitSubmodules, in WriteSubmodules()
3027 Mod->InferExportWildcard, in WriteSubmodules()
3028 Mod->ConfigMacrosExhaustive, in WriteSubmodules()
3029 Mod->ModuleMapIsPrivate, in WriteSubmodules()
3030 Mod->NamedModuleHasInit}; in WriteSubmodules()
3031 Stream.EmitRecordWithBlob(DefinitionAbbrev, Record, Mod->Name); in WriteSubmodules()
3035 for (const auto &R : Mod->Requirements) { in WriteSubmodules()
3037 Stream.EmitRecordWithBlob(RequiresAbbrev, Record, R.FeatureName); in WriteSubmodules()
3042 Mod->getUmbrellaHeaderAsWritten()) { in WriteSubmodules()
3044 Stream.EmitRecordWithBlob(UmbrellaAbbrev, Record, in WriteSubmodules()
3045 UmbrellaHeader->NameAsWritten); in WriteSubmodules()
3047 Mod->getUmbrellaDirAsWritten()) { in WriteSubmodules()
3049 Stream.EmitRecordWithBlob(UmbrellaDirAbbrev, Record, in WriteSubmodules()
3050 UmbrellaDir->NameAsWritten); in WriteSubmodules()
3068 for (auto &H : Mod->Headers[HL.HeaderKind]) in WriteSubmodules()
3069 Stream.EmitRecordWithBlob(HL.Abbrev, Record, H.NameAsWritten); in WriteSubmodules()
3075 for (FileEntryRef H : Mod->getTopHeaders(PP->getFileManager())) { in WriteSubmodules()
3078 Stream.EmitRecordWithBlob(TopHeaderAbbrev, Record, HeaderName); in WriteSubmodules()
3083 if (!Mod->Imports.empty()) { in WriteSubmodules()
3085 for (auto *I : Mod->Imports) in WriteSubmodules()
3087 Stream.EmitRecord(SUBMODULE_IMPORTS, Record); in WriteSubmodules()
3091 if (!Mod->AffectingClangModules.empty()) { in WriteSubmodules()
3093 for (auto *I : Mod->AffectingClangModules) in WriteSubmodules()
3095 Stream.EmitRecord(SUBMODULE_AFFECTING_MODULES, Record); in WriteSubmodules()
3099 if (!Mod->Exports.empty()) { in WriteSubmodules()
3101 for (const auto &E : Mod->Exports) { in WriteSubmodules()
3107 Stream.EmitRecord(SUBMODULE_EXPORTS, Record); in WriteSubmodules()
3117 for (const auto &LL : Mod->LinkLibraries) { in WriteSubmodules()
3120 Stream.EmitRecordWithBlob(LinkLibraryAbbrev, Record, LL.Library); in WriteSubmodules()
3124 for (const auto &C : Mod->Conflicts) { in WriteSubmodules()
3129 Stream.EmitRecordWithBlob(ConflictAbbrev, Record, C.Message); in WriteSubmodules()
3133 for (const auto &CM : Mod->ConfigMacros) { in WriteSubmodules()
3135 Stream.EmitRecordWithBlob(ConfigMacroAbbrev, Record, CM); in WriteSubmodules()
3141 for (Decl *D : Context->getModuleInitializers(Mod)) in WriteSubmodules()
3145 Stream.EmitRecord(SUBMODULE_INITIALIZERS, Inits); in WriteSubmodules()
3147 // Emit the name of the re-exported module, if any. in WriteSubmodules()
3148 if (!Mod->ExportAsModule.empty()) { in WriteSubmodules()
3150 Stream.EmitRecordWithBlob(ExportAsAbbrev, Record, Mod->ExportAsModule); in WriteSubmodules()
3154 for (auto *M : Mod->submodules()) in WriteSubmodules()
3158 Stream.ExitBlock(); in WriteSubmodules()
3160 assert((NextSubmoduleID - FirstSubmoduleID == in WriteSubmodules()
3162 "Wrong # of submodules; found a reference to a non-local, " in WriteSubmodules()
3163 "non-imported submodule?"); in WriteSubmodules()
3174 [](const DiagnosticsEngine::DiagState *DS) -> unsigned { in WritePragmaDiagnosticMappings()
3175 unsigned Result = (unsigned)DS->ExtBehavior; in WritePragmaDiagnosticMappings()
3177 {(unsigned)DS->IgnoreAllWarnings, (unsigned)DS->EnableAllWarnings, in WritePragmaDiagnosticMappings()
3178 (unsigned)DS->WarningsAsErrors, (unsigned)DS->ErrorsAsFatal, in WritePragmaDiagnosticMappings()
3179 (unsigned)DS->SuppressSystemWarnings}) in WritePragmaDiagnosticMappings()
3190 // We will not correctly round-trip this information otherwise. in WritePragmaDiagnosticMappings()
3194 // If we ever serialize non-pragma mappings outside the initial state, the in WritePragmaDiagnosticMappings()
3210 // Maybe skip non-pragmas. in WritePragmaDiagnosticMappings()
3229 Record[SizeIdx] = (Record.size() - SizeIdx) / 2; in WritePragmaDiagnosticMappings()
3262 // -Werror settings for implicit modules in the ASTReader, where reading in WritePragmaDiagnosticMappings()
3268 Stream.EmitRecord(DIAG_PRAGMA_MAPPINGS, Record); in WritePragmaDiagnosticMappings()
3271 //===----------------------------------------------------------------------===//
3273 //===----------------------------------------------------------------------===//
3275 /// Write the representation of a type to the AST stream.
3282 assert(Idx.getModuleFileIndex() == 0 && "Re-writing a type from a prior AST"); in WriteType()
3286 uint64_t Offset = ASTTypeWriter(*this).write(T) - DeclTypesBlockStartOffset; in WriteType()
3289 uint64_t Index = Idx.getValue() - FirstTypeID; in WriteType()
3300 //===----------------------------------------------------------------------===//
3302 //===----------------------------------------------------------------------===//
3309 if (!D->getDeclContext()->getRedeclContext()->isFileContext()) in IsInternalDeclFromFileContext()
3312 return ND->getFormalLinkage() == Linkage::Internal; in IsInternalDeclFromFileContext()
3322 if (DC->decls_empty()) in WriteDeclContextLexicalBlock()
3326 if (GeneratingReducedBMI && DC->isFunctionOrMethod()) in WriteDeclContextLexicalBlock()
3329 uint64_t Offset = Stream.GetCurrentBitNo(); in WriteDeclContextLexicalBlock()
3331 for (const auto *D : DC->decls()) { in WriteDeclContextLexicalBlock()
3340 if (GeneratingReducedBMI && !D->isFromExplicitGlobalModule() && in WriteDeclContextLexicalBlock()
3344 KindDeclPairs.push_back(D->getKind()); in WriteDeclContextLexicalBlock()
3350 Stream.EmitRecordWithBlob(DeclContextLexicalAbbrev, Record, in WriteDeclContextLexicalBlock()
3360 Abbrev->Add(BitCodeAbbrevOp(TYPE_OFFSET)); in WriteTypeDeclOffsets()
3361 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // # of types in WriteTypeDeclOffsets()
3362 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // types block in WriteTypeDeclOffsets()
3363 unsigned TypeOffsetAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteTypeDeclOffsets()
3366 Stream.EmitRecordWithBlob(TypeOffsetAbbrev, Record, bytes(TypeOffsets)); in WriteTypeDeclOffsets()
3371 Abbrev->Add(BitCodeAbbrevOp(DECL_OFFSET)); in WriteTypeDeclOffsets()
3372 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // # of declarations in WriteTypeDeclOffsets()
3373 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // declarations block in WriteTypeDeclOffsets()
3374 unsigned DeclOffsetAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteTypeDeclOffsets()
3377 Stream.EmitRecordWithBlob(DeclOffsetAbbrev, Record, bytes(DeclOffsets)); in WriteTypeDeclOffsets()
3401 Abbrev->Add(BitCodeAbbrevOp(FILE_SORTED_DECLS)); in WriteFileDeclIDsMap()
3402 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); in WriteFileDeclIDsMap()
3403 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WriteFileDeclIDsMap()
3404 unsigned AbbrevCode = Stream.EmitAbbrev(std::move(Abbrev)); in WriteFileDeclIDsMap()
3407 Stream.EmitRecordWithBlob(AbbrevCode, Record, bytes(FileGroupedDeclIDs)); in WriteFileDeclIDsMap()
3411 Stream.EnterSubblock(COMMENTS_BLOCK_ID, 3); in WriteComments()
3412 auto _ = llvm::make_scope_exit([this] { Stream.ExitBlock(); }); in WriteComments()
3413 if (!PP->getPreprocessorOpts().WriteCommentListToPCH) in WriteComments()
3423 for (const auto &FO : Context->Comments.OrderedComments) { in WriteComments()
3427 AddSourceRange(I->getSourceRange(), Record); in WriteComments()
3428 Record.push_back(I->getKind()); in WriteComments()
3429 Record.push_back(I->isTrailingComment()); in WriteComments()
3430 Record.push_back(I->isAlmostTrailingComment()); in WriteComments()
3431 Stream.EmitRecord(COMMENTS_RAW_COMMENT, Record); in WriteComments()
3436 //===----------------------------------------------------------------------===//
3438 //===----------------------------------------------------------------------===//
3442 // Trait used for the on-disk hash table used in the method pool.
3451 SelectorID ID; member
3473 Method = Method->getNext()) in EmitKeyDataLength()
3477 Method = Method->getNext()) in EmitKeyDataLength()
3505 LE.write<uint32_t>(Methods.ID); in EmitData()
3508 Method = Method->getNext()) in EmitData()
3514 Method = Method->getNext()) in EmitData()
3535 Method = Method->getNext()) in EmitData()
3537 LE.write<DeclID>((DeclID)Writer.getDeclID(Method->getMethod())); in EmitData()
3539 Method = Method->getNext()) in EmitData()
3541 LE.write<DeclID>((DeclID)Writer.getDeclID(Method->getMethod())); in EmitData()
3543 assert(Out.tell() - Start == DataLen && "Data length is wrong"); in EmitData()
3548 return (Node->getMethod() && !Node->getMethod()->isFromASTFile()); in ShouldWriteMethodListNode()
3557 /// in an on-disk hash table indexed by the selector. The hash table also
3571 // Create the on-disk hash table representation. We walk through every in WriteSelectors()
3573 SelectorOffsets.resize(NextSelectorID - FirstSelectorID); in WriteSelectors()
3576 SelectorID ID = SelectorAndID.second; in WriteSelectors() local
3580 ID, in WriteSelectors()
3585 Data.Instance = F->second.first; in WriteSelectors()
3586 Data.Factory = F->second.second; in WriteSelectors()
3590 if (Chain && ID < FirstSelectorID) { in WriteSelectors()
3593 for (ObjCMethodList *M = &Data.Instance; M && M->getMethod(); in WriteSelectors()
3594 M = M->getNext()) { in WriteSelectors()
3595 if (!M->getMethod()->isFromASTFile()) { in WriteSelectors()
3601 for (ObjCMethodList *M = &Data.Factory; M && M->getMethod(); in WriteSelectors()
3602 M = M->getNext()) { in WriteSelectors()
3603 if (!M->getMethod()->isFromASTFile()) { in WriteSelectors()
3618 // Create the on-disk hash table in a buffer. in WriteSelectors()
3633 Abbrev->Add(BitCodeAbbrevOp(METHOD_POOL)); in WriteSelectors()
3634 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); in WriteSelectors()
3635 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); in WriteSelectors()
3636 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WriteSelectors()
3637 unsigned MethodPoolAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSelectors()
3643 Stream.EmitRecordWithBlob(MethodPoolAbbrev, Record, MethodPool); in WriteSelectors()
3648 Abbrev->Add(BitCodeAbbrevOp(SELECTOR_OFFSETS)); in WriteSelectors()
3649 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // size in WriteSelectors()
3650 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // first ID in WriteSelectors()
3651 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WriteSelectors()
3652 unsigned SelectorOffsetAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteSelectors()
3658 FirstSelectorID - NUM_PREDEF_SELECTOR_IDS}; in WriteSelectors()
3659 Stream.EmitRecordWithBlob(SelectorOffsetAbbrev, Record, in WriteSelectors()
3687 //===----------------------------------------------------------------------===//
3689 //===----------------------------------------------------------------------===//
3698 if (!LangOpts.Modules || !D->isFromASTFile()) in getDeclForLocalLookup()
3701 if (Decl *Redecl = D->getPreviousDecl()) { in getDeclForLocalLookup()
3703 for (; Redecl; Redecl = Redecl->getPreviousDecl()) { in getDeclForLocalLookup()
3705 if (!Redecl->isFromASTFile()) { in getDeclForLocalLookup()
3706 // Exception: in very rare cases (for injected-class-names), not all in getDeclForLocalLookup()
3709 if (!Redecl->getDeclContext()->getRedeclContext()->Equals( in getDeclForLocalLookup()
3710 D->getDeclContext()->getRedeclContext())) in getDeclForLocalLookup()
3715 // If we find a decl from a (chained-)PCH stop since we won't find a in getDeclForLocalLookup()
3717 if (Redecl->getOwningModuleID() == 0) in getDeclForLocalLookup()
3720 } else if (Decl *First = D->getCanonicalDecl()) { in getDeclForLocalLookup()
3722 if (!First->isFromASTFile()) in getDeclForLocalLookup()
3738 II->getNotableIdentifierID() != tok::NotableIdentifierKind::not_notable || in IsInterestingIdentifier()
3739 II->getBuiltinID() != Builtin::ID::NotBuiltin || in IsInterestingIdentifier()
3740 II->getObjCKeywordID() != tok::ObjCKeywordKind::objc_not_keyword; in IsInterestingIdentifier()
3741 if (MacroOffset || II->isPoisoned() || (!IsModule && IsInteresting) || in IsInterestingIdentifier()
3742 II->hasRevertedTokenIDToIdentifier() || in IsInterestingIdentifier()
3743 (NeedDecls && II->getFETokenInfo())) in IsInterestingIdentifier()
3793 return llvm::djbHash(II->getName()); in ComputeHash()
3802 EmitKeyDataLength(raw_ostream &Out, const IdentifierInfo *II, IdentifierID ID) { in EmitKeyDataLength() argument
3813 InterestingIdentifierOffsets->push_back(Out.tell()); in EmitKeyDataLength()
3815 unsigned KeyLen = II->getLength() + 1; in EmitKeyDataLength()
3816 unsigned DataLen = sizeof(IdentifierID); // bytes for the persistent ID << 1 in EmitKeyDataLength()
3818 DataLen += 2; // 2 bytes for builtin ID in EmitKeyDataLength()
3831 Out.write(II->getNameStart(), KeyLen); in EmitKey()
3834 void EmitData(raw_ostream &Out, const IdentifierInfo *II, IdentifierID ID, in EmitData() argument
3842 LE.write<IdentifierID>(ID << 1); in EmitData()
3846 LE.write<IdentifierID>((ID << 1) | 0x01); in EmitData()
3847 uint32_t Bits = (uint32_t)II->getObjCOrBuiltinID(); in EmitData()
3853 Bits = (Bits << 1) | unsigned(II->isExtensionToken()); in EmitData()
3854 Bits = (Bits << 1) | unsigned(II->isPoisoned()); in EmitData()
3855 Bits = (Bits << 1) | unsigned(II->hasRevertedTokenIDToIdentifier()); in EmitData()
3856 Bits = (Bits << 1) | unsigned(II->isCPlusPlusOperatorKeyword()); in EmitData()
3879 /// If the \param IdentifierID ID is a local Identifier ID. If the higher
3880 /// bits of ID is 0, it implies that the ID doesn't come from AST files.
3881 static bool isLocalIdentifierID(IdentifierID ID) { return !(ID >> 32); } in isLocalIdentifierID() argument
3902 // Create the on-disk hash table representation. We only store offsets in WriteIdentifierTable()
3904 IdentifierOffsets.resize(NextIdentID - FirstIdentID); in WriteIdentifierTable()
3907 IdentifierID ID = IdentIDPair.second; in WriteIdentifierTable() local
3910 // Write out identifiers if either the ID is local or the identifier has in WriteIdentifierTable()
3912 if (isLocalIdentifierID(ID) || II->hasChangedSinceDeserialization() || in WriteIdentifierTable()
3914 II->hasFETokenInfoChangedSinceDeserialization())) in WriteIdentifierTable()
3915 Generator.insert(II, ID, Trait); in WriteIdentifierTable()
3918 // Create the on-disk hash table in a buffer. in WriteIdentifierTable()
3932 Abbrev->Add(BitCodeAbbrevOp(IDENTIFIER_TABLE)); in WriteIdentifierTable()
3933 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); in WriteIdentifierTable()
3934 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WriteIdentifierTable()
3935 unsigned IDTableAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteIdentifierTable()
3939 Stream.EmitRecordWithBlob(IDTableAbbrev, Record, IdentifierTable); in WriteIdentifierTable()
3944 Abbrev->Add(BitCodeAbbrevOp(IDENTIFIER_OFFSET)); in WriteIdentifierTable()
3945 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // # of identifiers in WriteIdentifierTable()
3946 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WriteIdentifierTable()
3947 unsigned IdentifierOffsetAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteIdentifierTable()
3956 Stream.EmitRecordWithBlob(IdentifierOffsetAbbrev, Record, in WriteIdentifierTable()
3962 Stream.EmitRecord(INTERESTING_IDENTIFIERS, InterestingIdents); in WriteIdentifierTable()
3966 if (!RD->isInNamedModule()) in handleVTable()
3972 //===----------------------------------------------------------------------===//
3974 //===----------------------------------------------------------------------===//
3978 // Trait used for the on-disk hash table used in the method pool.
4010 !DeclForLocalLookup->isFromExplicitGlobalModule() && in getData()
4042 endian::write<uint32_t>(Out, Writer.getChain()->getModuleFileID(F), in EmitFileRef()
4072 unsigned DataLen = sizeof(DeclID) * (Lookup.second - Lookup.first); in EmitKeyDataLength()
4116 assert(Out.tell() - Start == DataLen && "Data length is wrong"); in EmitData()
4125 DC->hasNeedToReconcileExternalVisibleStorage(); in isLookupResultExternal()
4136 if (LocalD->isFromASTFile()) in isLookupResultNotInteresting()
4157 assert(!ConstDC->hasLazyLocalLexicalLookups() && in GenerateNameLookupTable()
4158 !ConstDC->hasLazyExternalLexicalLookups() && in GenerateNameLookupTable()
4163 assert(DC == DC->getPrimaryContext() && "only primary DC has lookup table"); in GenerateNameLookupTable()
4165 // Create the on-disk hash table representation. in GenerateNameLookupTable()
4179 for (auto &Lookup : *DC->buildLookup()) { in GenerateNameLookupTable()
4195 // https://github.com/llvm/llvm-project/issues/61065 for details. in GenerateNameLookupTable()
4206 // FIXME: While we might want to start emitting on-disk entries for negative in GenerateNameLookupTable()
4247 // lexical context -- when that name is an implicit constructor merged from in GenerateNameLookupTable()
4248 // another declaration in the redecl chain. Any non-implicit constructor or in GenerateNameLookupTable()
4251 auto ImplicitCtorName = Context->DeclarationNames.getCXXConstructorName( in GenerateNameLookupTable()
4252 Context->getCanonicalType(Context->getRecordType(D))); in GenerateNameLookupTable()
4260 for (Decl *ChildD : cast<CXXRecordDecl>(DC)->decls()) in GenerateNameLookupTable()
4262 auto Name = ChildND->getDeclName(); in GenerateNameLookupTable()
4295 DC->lookup(Name); in GenerateNameLookupTable()
4307 DeclContext::lookup_result Result = DC->noload_lookup(Name); in GenerateNameLookupTable()
4328 Generator.insert(ConstructorDecls.front()->getDeclName(), in GenerateNameLookupTable()
4331 Generator.insert(ConversionDecls.front()->getDeclName(), in GenerateNameLookupTable()
4334 // Create the on-disk hash table. Also emit the existing imported and in GenerateNameLookupTable()
4336 auto *Lookups = Chain ? Chain->getLoadedLookupTables(DC) : nullptr; in GenerateNameLookupTable()
4337 Generator.emit(LookupTable, Trait, Lookups ? &Lookups->Table : nullptr); in GenerateNameLookupTable()
4351 Chain->getKeyDeclaration(cast<Decl>(DC))->isFromASTFile()) { in WriteDeclContextVisibleBlock()
4353 for (auto *Prev = cast<NamespaceDecl>(DC)->getPreviousDecl(); Prev; in WriteDeclContextVisibleBlock()
4354 Prev = Prev->getPreviousDecl()) in WriteDeclContextVisibleBlock()
4355 if (!Prev->isFromASTFile()) in WriteDeclContextVisibleBlock()
4359 UpdatedDeclContexts.insert(DC->getPrimaryContext()); in WriteDeclContextVisibleBlock()
4364 StoredDeclsMap *Map = DC->getPrimaryContext()->buildLookup(); in WriteDeclContextVisibleBlock()
4368 LookupResults.reserve(Map->size()); in WriteDeclContextVisibleBlock()
4389 if (ND->isFromASTFile()) in WriteDeclContextVisibleBlock()
4397 if (GeneratingReducedBMI && !ND->isFromExplicitGlobalModule() && in WriteDeclContextVisibleBlock()
4408 if (DC->getPrimaryContext() != DC) in WriteDeclContextVisibleBlock()
4412 if (!DC->isLookupContext()) in WriteDeclContextVisibleBlock()
4416 // IdentifierInfo chains, don't bother to build a visible-declarations table. in WriteDeclContextVisibleBlock()
4417 if (DC->isTranslationUnit() && !Context.getLangOpts().CPlusPlus) in WriteDeclContextVisibleBlock()
4425 uint64_t Offset = Stream.GetCurrentBitNo(); in WriteDeclContextVisibleBlock()
4426 StoredDeclsMap *Map = DC->buildLookup(); in WriteDeclContextVisibleBlock()
4427 if (!Map || Map->empty()) in WriteDeclContextVisibleBlock()
4430 // Create the on-disk hash table in a buffer. in WriteDeclContextVisibleBlock()
4436 Stream.EmitRecordWithBlob(DeclContextVisibleLookupAbbrev, Record, in WriteDeclContextVisibleBlock()
4446 /// (in C++), for namespaces, and for classes with forward-declared unscoped
4449 StoredDeclsMap *Map = DC->getLookupPtr(); in WriteDeclContextVisibleUpdate()
4450 if (!Map || Map->empty()) in WriteDeclContextVisibleUpdate()
4453 // Create the on-disk hash table in a buffer. in WriteDeclContextVisibleUpdate()
4460 DC = cast<DeclContext>(Chain->getKeyDeclaration(cast<Decl>(DC))); in WriteDeclContextVisibleUpdate()
4465 Stream.EmitRecordWithBlob(UpdateVisibleAbbrev, Record, LookupTable); in WriteDeclContextVisibleUpdate()
4471 Stream.EmitRecord(FP_PRAGMA_OPTIONS, Record); in WriteFPPragmaOptions()
4491 Stream.EmitRecord(OPENCL_EXTENSIONS, Record); in WriteOpenCLExtensions()
4496 Stream.EmitRecord(CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH, Record); in WriteCUDAPragmas()
4515 Cat = Class->known_categories_begin(), in WriteObjCCategories()
4516 CatEnd = Class->known_categories_end(); in WriteObjCCategories()
4525 // Record this interface -> category map. in WriteObjCCategories()
4530 // Sort the categories map by the definition ID, since the reader will be in WriteObjCCategories()
4538 Abbrev->Add(BitCodeAbbrevOp(OBJC_CATEGORIES_MAP)); in WriteObjCCategories()
4539 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // # of entries in WriteObjCCategories()
4540 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WriteObjCCategories()
4541 unsigned AbbrevID = Stream.EmitAbbrev(std::move(Abbrev)); in WriteObjCCategories()
4544 Stream.EmitRecordWithBlob(AbbrevID, Record, in WriteObjCCategories()
4549 Stream.EmitRecord(OBJC_CATEGORIES, Categories); in WriteObjCCategories()
4571 Stream.EmitRecord(LATE_PARSED_TEMPLATE, Record); in WriteLateParsedTemplates()
4579 Stream.EmitRecord(OPTIMIZE_PRAGMA_OPTIONS, Record); in WriteOptimizePragmaOptions()
4586 Stream.EmitRecord(MSSTRUCT_PRAGMA_OPTIONS, Record); in WriteMSStructPragmaOptions()
4595 Stream.EmitRecord(POINTERS_TO_MEMBERS_PRAGMA_OPTIONS, Record); in WriteMSPointersToMembersPragmaOptions()
4601 // take effect on a per-submodule basis. in WritePackPragmaOptions()
4615 Stream.EmitRecord(ALIGN_PACK_PRAGMA_OPTIONS, Record); in WritePackPragmaOptions()
4621 // since it should only take effect on a per-submodule basis. in WriteFloatControlPragmaOptions()
4635 Stream.EmitRecord(FLOAT_CONTROL_PRAGMA_OPTIONS, Record); in WriteFloatControlPragmaOptions()
4641 Stream.EnterSubblock(EXTENSION_BLOCK_ID, 4); in WriteModuleFileExtension()
4645 Abv->Add(llvm::BitCodeAbbrevOp(EXTENSION_METADATA)); in WriteModuleFileExtension()
4646 Abv->Add(llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::VBR, 6)); in WriteModuleFileExtension()
4647 Abv->Add(llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::VBR, 6)); in WriteModuleFileExtension()
4648 Abv->Add(llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::VBR, 6)); in WriteModuleFileExtension()
4649 Abv->Add(llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::VBR, 6)); in WriteModuleFileExtension()
4650 Abv->Add(llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::Blob)); in WriteModuleFileExtension()
4651 unsigned Abbrev = Stream.EmitAbbrev(std::move(Abv)); in WriteModuleFileExtension()
4655 auto Metadata = Writer.getExtension()->getExtensionMetadata(); in WriteModuleFileExtension()
4664 Stream.EmitRecordWithBlob(Abbrev, Record, Buffer); in WriteModuleFileExtension()
4667 Writer.writeExtensionContents(SemaRef, Stream); in WriteModuleFileExtension()
4670 Stream.ExitBlock(); in WriteModuleFileExtension()
4673 //===----------------------------------------------------------------------===//
4675 //===----------------------------------------------------------------------===//
4681 // https://github.com/llvm/llvm-project/issues/56490 for example. in AddAttr()
4683 Writer->isWritingStdCXXNamedModules())) in AddAttr()
4686 Record.push_back(A->getKind() + 1); // FIXME: stable encoding, target attrs in AddAttr()
4688 Record.AddIdentifierRef(A->getAttrName()); in AddAttr()
4689 Record.AddIdentifierRef(A->getScopeName()); in AddAttr()
4690 Record.AddSourceRange(A->getRange()); in AddAttr()
4691 Record.AddSourceLocation(A->getScopeLoc()); in AddAttr()
4692 Record.push_back(A->getParsedKind()); in AddAttr()
4693 Record.push_back(A->getSyntax()); in AddAttr()
4694 Record.push_back(A->getAttributeSpellingListIndexRaw()); in AddAttr()
4695 Record.push_back(A->isRegularKeywordAttribute()); in AddAttr()
4719 AddToken(Info->PragmaName, Record); in AddToken()
4720 AddToken(Info->Option, Record); in AddToken()
4721 Record.push_back(Info->Toks.size()); in AddToken()
4722 for (const auto &T : Info->Toks) in AddToken()
4729 Record.push_back(static_cast<unsigned>(Info->Action)); in AddToken()
4730 AddString(Info->SlotLabel, Record); in AddToken()
4731 AddToken(Info->Alignment, Record); in AddToken()
4762 if (PathStr == "<built-in>" || PathStr == "<command line>") in PreparePathForOutput()
4766 cleanPathForOutput(Context->getSourceManager().getFileManager(), Path); in PreparePathForOutput()
4773 Path.erase(Path.begin(), Path.begin() + (PathPtr - PathBegin)); in PreparePathForOutput()
4790 Stream.EmitRecordWithBlob(Abbrev, Record, FilePath); in EmitRecordWithPath()
4809 IdentifierID ID = IdentifierIDs[II]; in SetIdentifierOffset() local
4812 if (!isLocalIdentifierID(ID)) in SetIdentifierOffset()
4817 assert(ID != 0); in SetIdentifierOffset()
4818 ID -= NUM_PREDEF_IDENT_IDS; in SetIdentifierOffset()
4819 assert(ID < IdentifierOffsets.size()); in SetIdentifierOffset()
4820 IdentifierOffsets[ID] = Offset; in SetIdentifierOffset()
4826 unsigned ID = SelectorIDs[Sel]; in SetSelectorOffset() local
4827 assert(ID && "Unknown selector"); in SetSelectorOffset()
4830 if (ID < FirstSelectorID) in SetSelectorOffset()
4832 SelectorOffsets[ID - FirstSelectorID] = Offset; in SetSelectorOffset()
4835 ASTWriter::ASTWriter(llvm::BitstreamWriter &Stream, in ASTWriter() argument
4841 : Stream(Stream), Buffer(Buffer), ModuleCache(ModuleCache), in ASTWriter()
4846 if (auto Writer = Ext->createExtensionWriter(*this)) in ASTWriter()
4855 return Context->getLangOpts(); in getLangOpts()
4859 return IncludeTimestamps ? E->getModificationTime() : 0; in getTimestampForOutput()
4872 Stream.Emit((unsigned)'C', 8); in WriteAST()
4873 Stream.Emit((unsigned)'P', 8); in WriteAST()
4874 Stream.Emit((unsigned)'C', 8); in WriteAST()
4875 Stream.Emit((unsigned)'H', 8); in WriteAST()
4881 this->WritingModule = WritingModule; in WriteAST()
4885 this->WritingModule = nullptr; in WriteAST()
4886 this->BaseDirectory.clear(); in WriteAST()
4916 SourceManager &SrcMgr = PP->getSourceManager(); in computeNonAffectingInputFiles()
4940 if (!SLoc->isFile()) in computeNonAffectingInputFiles()
4942 const SrcMgr::FileInfo &File = SLoc->getFile(); in computeNonAffectingInputFiles()
4944 if (!Cache->OrigEntry) in computeNonAffectingInputFiles()
4956 if (llvm::is_contained(*AffectingModuleMaps, *Cache->OrigEntry)) in computeNonAffectingInputFiles()
4965 // If the previous file was non-affecting as well, just extend its entry in computeNonAffectingInputFiles()
4968 NonAffectingFileIDs.back().ID == FID.ID - 1) { in computeNonAffectingInputFiles()
4983 if (!PP->getHeaderSearchInfo().getHeaderSearchOpts().ModulesIncludeVFSUsage) in computeNonAffectingInputFiles()
4986 FileManager &FileMgr = PP->getFileManager(); in computeNonAffectingInputFiles()
4988 // Lookup the paths in the VFS to trigger `-ivfsoverlay` usage tracking. in computeNonAffectingInputFiles()
4990 PP->getHeaderSearchInfo().getHeaderSearchOpts().VFSOverlayFiles) in computeNonAffectingInputFiles()
4995 if (!SLoc->isFile()) in computeNonAffectingInputFiles()
4997 const SrcMgr::FileInfo &File = SLoc->getFile(); in computeNonAffectingInputFiles()
4999 if (!Cache->OrigEntry) in computeNonAffectingInputFiles()
5002 Cache->OrigEntry->getNameAsRequested()); in computeNonAffectingInputFiles()
5014 auto RegisterPredefDecl = [&] (Decl *D, PredefinedDeclIDs ID) { in PrepareWritingSpecialDecls() argument
5016 assert(D->isCanonicalDecl() && "predefined decl is not canonical"); in PrepareWritingSpecialDecls()
5017 DeclIDs[D] = ID; in PrepareWritingSpecialDecls()
5054 for (const auto *D : TU->noload_decls()) { in PrepareWritingSpecialDecls()
5055 if (D->isFromASTFile()) in PrepareWritingSpecialDecls()
5059 if (D->isFromExplicitGlobalModule()) in PrepareWritingSpecialDecls()
5065 // language also specifies that the program exposes TU-local entities in PrepareWritingSpecialDecls()
5066 // is ill-formed. However, in practice, there are a lot of projects in PrepareWritingSpecialDecls()
5077 if (isWritingStdCXXNamedModules() && !D->getOwningModule() && in PrepareWritingSpecialDecls()
5078 D->isImplicit()) in PrepareWritingSpecialDecls()
5141 // Writing all delete-expressions that we would like to in PrepareWritingSpecialDecls()
5159 for (const auto &ID : SemaRef.PP.getIdentifierTable()) { in PrepareWritingSpecialDecls() local
5160 const IdentifierInfo *II = ID.second; in PrepareWritingSpecialDecls()
5161 if (!Chain || !II->isFromAST() || II->hasChangedSinceDeserialization()) in PrepareWritingSpecialDecls()
5190 Stream.EmitRecord(EAGERLY_DESERIALIZED_DECLS, EagerlyDeserializedDecls); in WriteSpecialDeclRecords()
5193 Stream.EmitRecord(MODULAR_CODEGEN_DECLS, ModularCodegenDecls); in WriteSpecialDeclRecords()
5200 Stream.EmitRecord(TENTATIVE_DEFINITIONS, TentativeDefinitions); in WriteSpecialDeclRecords()
5208 Stream.EmitRecord(UNUSED_FILESCOPED_DECLS, UnusedFileScopedDecls); in WriteSpecialDeclRecords()
5214 Stream.EmitRecord(EXT_VECTOR_DECLS, ExtVectorDecls); in WriteSpecialDeclRecords()
5228 Stream.EmitRecord(VTABLE_USES, VTableUses); in WriteSpecialDeclRecords()
5236 Stream.EmitRecord(UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES, in WriteSpecialDeclRecords()
5249 Stream.EmitRecord(PENDING_IMPLICIT_INSTANTIATIONS, PendingInstantiations); in WriteSpecialDeclRecords()
5266 Stream.EmitRecord(SEMA_DECL_REFS, SemaDeclRefs); in WriteSpecialDeclRecords()
5274 Stream.EmitRecord(DECLS_TO_CHECK_FOR_DEFERRED_DIAGS, in WriteSpecialDeclRecords()
5277 // Write the record containing CUDA-specific declaration references. in WriteSpecialDeclRecords()
5282 Stream.EmitRecord(CUDA_SPECIAL_DECL_REFS, CUDASpecialDeclRefs); in WriteSpecialDeclRecords()
5291 Stream.EmitRecord(DELEGATING_CTORS, DelegatingCtorDecls); in WriteSpecialDeclRecords()
5300 Stream.EmitRecord(KNOWN_NAMESPACES, KnownNamespaces); in WriteSpecialDeclRecords()
5314 Stream.EmitRecord(UNDEFINED_BUT_USED, UndefinedButUsed); in WriteSpecialDeclRecords()
5316 // Write all delete-expressions that we would like to in WriteSpecialDeclRecords()
5334 Stream.EmitRecord(DELETE_EXPRS_TO_ANALYZE, DeleteExprsToAnalyze); in WriteSpecialDeclRecords()
5345 Stream.EmitRecord(VTABLES_TO_EMIT, VTablesToEmit); in WriteSpecialDeclRecords()
5356 Chain->finalizeForWriting(); in WriteASTCore()
5367 // Don't reuse type ID and Identifier ID from readers for C++ standard named in WriteASTCore()
5368 // modules since we want to support no-transitive-change model for named in WriteASTCore()
5369 // modules. The theory for no-transitive-change model is, in WriteASTCore()
5374 // indirectly imported modules arbitrarily. So we choose to clear these ID in WriteASTCore()
5388 // Identifier ID is stable. in WriteASTCore()
5390 for (const auto &ID : PP.getIdentifierTable()) in WriteASTCore() local
5391 if (IsInterestingNonMacroIdentifier(ID.second, *this)) in WriteASTCore()
5392 IIs.push_back(ID.second); in WriteASTCore()
5430 Stream.FlushToWord(); in WriteASTCore()
5431 ASTBlockRange.first = Stream.GetCurrentBitNo() >> 3; in WriteASTCore()
5432 Stream.EnterSubblock(AST_BLOCK_ID, 5); in WriteASTCore()
5433 ASTBlockStartOffset = Stream.GetCurrentBitNo(); in WriteASTCore()
5439 Stream.EmitRecord(METADATA_OLD_FORMAT, Record); in WriteASTCore()
5457 // each of those modules were mapped into our own offset/ID space, so that in WriteASTCore()
5458 // the reader can build the appropriate mapping to its own offset/ID space. in WriteASTCore()
5460 // *(module-kind:i8 in WriteASTCore()
5461 // module-name-len:i16 module-name:len*i8 in WriteASTCore()
5462 // source-location-offset:i32 in WriteASTCore()
5463 // identifier-id:i32 in WriteASTCore()
5464 // preprocessed-entity-id:i32 in WriteASTCore()
5465 // macro-definition-id:i32 in WriteASTCore()
5466 // submodule-id:i32 in WriteASTCore()
5467 // selector-id:i32 in WriteASTCore()
5468 // declaration-id:i32 in WriteASTCore()
5469 // c++-base-specifiers-id:i32 in WriteASTCore()
5470 // type-id:i32) in WriteASTCore()
5472 // module-kind is the ModuleKind enum value. If it is MK_PrebuiltModule, in WriteASTCore()
5473 // MK_ExplicitModule or MK_ImplicitModule, then the module-name is the in WriteASTCore()
5476 Abbrev->Add(BitCodeAbbrevOp(MODULE_OFFSET_MAP)); in WriteASTCore()
5477 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); in WriteASTCore()
5478 unsigned ModuleOffsetMapAbbrev = Stream.EmitAbbrev(std::move(Abbrev)); in WriteASTCore()
5482 for (ModuleFile &M : Chain->ModuleMgr) { in WriteASTCore()
5491 // Note: if a base ID was uint max, it would not be possible to load in WriteASTCore()
5496 assert(BaseID < std::numeric_limits<uint32_t>::max() && "base id too high"); in WriteASTCore()
5513 Stream.EmitRecordWithBlob(ModuleOffsetMapAbbrev, Record, in WriteASTCore()
5536 Stream.EmitRecord(SPECIAL_TYPES, SpecialTypes); in WriteASTCore()
5542 Stream.EmitRecord(WEAK_UNDECLARED_IDENTIFIERS, in WriteASTCore()
5548 uint64_t ID; in WriteASTCore() member
5550 ModuleInfo(uint64_t ID, Module *M) : ID(ID), M(M) {} in WriteASTCore()
5554 assert(SubmoduleIDs.contains(I->getImportedModule())); in WriteASTCore()
5555 Imports.push_back(ModuleInfo(SubmoduleIDs[I->getImportedModule()], in WriteASTCore()
5556 I->getImportedModule())); in WriteASTCore()
5561 return A.ID < B.ID; in WriteASTCore()
5564 return A.ID == B.ID; in WriteASTCore()
5574 ImportedModules.push_back(Import.ID); in WriteASTCore()
5581 Stream.EmitRecord(IMPORTED_MODULES, ImportedModules); in WriteASTCore()
5597 Stream.EmitRecord(STATISTICS, Record); in WriteASTCore()
5598 Stream.ExitBlock(); in WriteASTCore()
5599 Stream.FlushToWord(); in WriteASTCore()
5600 ASTBlockRange.second = Stream.GetCurrentBitNo() >> 3; in WriteASTCore()
5620 if (D->isFromASTFile()) in AddedManglingNumber()
5626 if (D->isFromASTFile()) in AddedStaticLocalNumbers()
5637 if (NamespaceDecl *NS = TU->getAnonymousNamespace()) { in AddedAnonymousNamespace()
5648 Stream.EnterSubblock(DECLTYPES_BLOCK_ID, /*bits for abbreviations*/5); in WriteDeclAndTypes()
5649 DeclTypesBlockStartOffset = Stream.GetCurrentBitNo(); in WriteDeclAndTypes()
5676 LexicalOffset -= DeclTypesBlockStartOffset; in WriteDeclAndTypes()
5679 VisibleOffset -= DeclTypesBlockStartOffset; in WriteDeclAndTypes()
5691 Stream.ExitBlock(); in WriteDeclAndTypes()
5696 Stream.EmitRecord(DECL_UPDATE_OFFSETS, DeclUpdatesOffsetsRecord); in WriteDeclAndTypes()
5699 Stream.EmitRecord(DELAYED_NAMESPACE_LEXICAL_VISIBLE_RECORD, in WriteDeclAndTypes()
5706 for (const auto *D : TU->noload_decls()) { in WriteDeclAndTypes()
5707 if (D->isFromASTFile()) in WriteDeclAndTypes()
5714 NewGlobalKindDeclPairs.push_back(D->getKind()); in WriteDeclAndTypes()
5719 Abv->Add(llvm::BitCodeAbbrevOp(TU_UPDATE_LEXICAL)); in WriteDeclAndTypes()
5720 Abv->Add(llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::Blob)); in WriteDeclAndTypes()
5721 unsigned TuUpdateLexicalAbbrev = Stream.EmitAbbrev(std::move(Abv)); in WriteDeclAndTypes()
5724 Stream.EmitRecordWithBlob(TuUpdateLexicalAbbrev, Record, in WriteDeclAndTypes()
5728 Abv->Add(llvm::BitCodeAbbrevOp(UPDATE_VISIBLE)); in WriteDeclAndTypes()
5729 Abv->Add(llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::VBR, 6)); in WriteDeclAndTypes()
5730 Abv->Add(llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::Blob)); in WriteDeclAndTypes()
5731 UpdateVisibleAbbrev = Stream.EmitAbbrev(std::move(Abv)); in WriteDeclAndTypes()
5790 cast<ParmVarDecl>(Update.getDecl())->getDefaultArg()); in WriteDeclUpdatesBlocks()
5795 cast<FieldDecl>(Update.getDecl())->getInClassInitializer()); in WriteDeclUpdatesBlocks()
5800 UpdatedDeclContexts.insert(RD->getPrimaryContext()); in WriteDeclUpdatesBlocks()
5801 Record.push_back(RD->isParamDestroyedInCallee()); in WriteDeclUpdatesBlocks()
5802 Record.push_back(llvm::to_underlying(RD->getArgPassingRestrictions())); in WriteDeclUpdatesBlocks()
5809 if (auto *MSInfo = RD->getMemberSpecializationInfo()) { in WriteDeclUpdatesBlocks()
5810 Record.push_back(MSInfo->getTemplateSpecializationKind()); in WriteDeclUpdatesBlocks()
5811 Record.AddSourceLocation(MSInfo->getPointOfInstantiation()); in WriteDeclUpdatesBlocks()
5814 Record.push_back(Spec->getTemplateSpecializationKind()); in WriteDeclUpdatesBlocks()
5815 Record.AddSourceLocation(Spec->getPointOfInstantiation()); in WriteDeclUpdatesBlocks()
5819 auto From = Spec->getInstantiatedFrom(); in WriteDeclUpdatesBlocks()
5825 &Spec->getTemplateInstantiationArgs()); in WriteDeclUpdatesBlocks()
5830 Record.push_back(llvm::to_underlying(RD->getTagKind())); in WriteDeclUpdatesBlocks()
5831 Record.AddSourceLocation(RD->getLocation()); in WriteDeclUpdatesBlocks()
5832 Record.AddSourceLocation(RD->getBeginLoc()); in WriteDeclUpdatesBlocks()
5833 Record.AddSourceRange(RD->getBraceRange()); in WriteDeclUpdatesBlocks()
5836 Record.push_back(D->hasAttrs()); in WriteDeclUpdatesBlocks()
5837 if (D->hasAttrs()) in WriteDeclUpdatesBlocks()
5838 Record.AddAttributes(D->getAttrs()); in WriteDeclUpdatesBlocks()
5846 Record.AddStmt(cast<CXXDestructorDecl>(D)->getOperatorDeleteThisArg()); in WriteDeclUpdatesBlocks()
5851 cast<FunctionDecl>(D)->getType()->castAs<FunctionProtoType>(); in WriteDeclUpdatesBlocks()
5852 Record.writeExceptionSpecInfo(prototype->getExceptionSpecInfo()); in WriteDeclUpdatesBlocks()
5870 D->getAttr<OMPThreadPrivateDeclAttr>()->getRange()); in WriteDeclUpdatesBlocks()
5874 auto *A = D->getAttr<OMPAllocateDeclAttr>(); in WriteDeclUpdatesBlocks()
5875 Record.push_back(A->getAllocatorType()); in WriteDeclUpdatesBlocks()
5876 Record.AddStmt(A->getAllocator()); in WriteDeclUpdatesBlocks()
5877 Record.AddStmt(A->getAlignment()); in WriteDeclUpdatesBlocks()
5878 Record.AddSourceRange(A->getRange()); in WriteDeclUpdatesBlocks()
5883 Record.push_back(D->getAttr<OMPDeclareTargetDeclAttr>()->getMapType()); in WriteDeclUpdatesBlocks()
5885 D->getAttr<OMPDeclareTargetDeclAttr>()->getRange()); in WriteDeclUpdatesBlocks()
5904 Record.push_back(Def->isInlined()); in WriteDeclUpdatesBlocks()
5905 Record.AddSourceLocation(Def->getInnerLocStart()); in WriteDeclUpdatesBlocks()
5910 Record.push_back(VD->isInline()); in WriteDeclUpdatesBlocks()
5911 Record.push_back(VD->isInlineSpecified()); in WriteDeclUpdatesBlocks()
5928 if (FID.isInvalid() || PP->getSourceManager().isLoadedFileID(FID) || in getAdjustedFileID()
5934 return FileID::get(FID.getOpaqueValue() - Offset); in getAdjustedFileID()
5938 unsigned NumCreatedFIDs = PP->getSourceManager() in getAdjustedNumCreatedFIDs()
5939 .getLocalSLocEntry(FID.ID) in getAdjustedNumCreatedFIDs()
5944 for (unsigned I = FID.ID, N = I + NumCreatedFIDs; I != N; ++I) in getAdjustedNumCreatedFIDs()
5953 return Loc.getLocWithOffset(-getAdjustment(Loc.getOffset())); in getAdjustedLocation()
5956 SourceRange ASTWriter::getAdjustedRange(SourceRange Range) const { in getAdjustedRange()
5957 return SourceRange(getAdjustedLocation(Range.getBegin()), in getAdjustedRange()
5958 getAdjustedLocation(Range.getEnd())); in getAdjustedRange()
5963 return Offset - getAdjustment(Offset); in getAdjustedOffset()
5971 if (PP->getSourceManager().isLoadedOffset(Offset)) in getAdjustment()
5980 auto Contains = [](const SourceRange &Range, SourceLocation::UIntTy Offset) { in getAdjustment() argument
5981 return Range.getEnd().getOffset() < Offset; in getAdjustment()
5999 if (Context->getSourceManager().isLoadedSourceLocation(Loc) && in getRawSourceLocationEncoding()
6002 auto SLocMapI = getChain()->GlobalSLocOffsetMap.find( in getRawSourceLocationEncoding()
6003 SourceManager::MaxLoadedOffset - Loc.getOffset() - 1); in getRawSourceLocationEncoding()
6004 assert(SLocMapI != getChain()->GlobalSLocOffsetMap.end() && in getRawSourceLocationEncoding()
6006 ModuleFile *F = SLocMapI->second; in getRawSourceLocationEncoding()
6007 BaseOffset = F->SLocEntryBaseOffset - 2; in getRawSourceLocationEncoding()
6010 ModuleFileIndex = F->Index + 1; in getRawSourceLocationEncoding()
6011 assert(&getChain()->getModuleManager()[F->Index] == F); in getRawSourceLocationEncoding()
6023 void ASTWriter::AddSourceRange(SourceRange Range, RecordDataImpl &Record, in AddSourceRange() argument
6025 AddSourceLocation(Range.getBegin(), Record, Seq); in AddSourceRange()
6026 AddSourceLocation(Range.getEnd(), Record, Seq); in AddSourceRange()
6041 IdentifierID &ID = IdentifierIDs[II]; in getIdentifierRef() local
6042 if (ID == 0) in getIdentifierRef()
6043 ID = NextIdentID++; in getIdentifierRef()
6044 return ID; in getIdentifierRef()
6051 if (!MI || MI->isBuiltinMacro()) in getMacroRef()
6054 MacroID &ID = MacroIDs[MI]; in getMacroRef() local
6055 if (ID == 0) { in getMacroRef()
6056 ID = NextMacroID++; in getMacroRef()
6057 MacroInfoToEmitData Info = { Name, MI, ID }; in getMacroRef()
6060 return ID; in getMacroRef()
6064 if (!MI || MI->isBuiltinMacro()) in getMacroID()
6076 Record->push_back(Writer->getSelectorRef(SelRef)); in AddSelectorRef()
6086 // This might trigger a ReadSelector callback, which will set the ID for in getSelectorRef()
6088 Chain->LoadSelector(Sel); in getSelectorRef()
6099 AddDeclRef(Temp->getDestructor()); in AddCXXTemporary()
6137 Record->push_back(InfoHasSameExpr); in AddTemplateArgumentLoc()
6150 AddTypeRef(TInfo->getType()); in AddTypeSourceInfo()
6151 AddTypeLoc(TInfo->getTypeLoc()); in AddTypeSourceInfo()
6192 return MakeTypeID(*Context, T, [&](QualType T) -> TypeIdx { in GetOrCreateTypeID()
6204 // We haven't seen this type before. Assign it a new ID and put it in GetOrCreateTypeID()
6225 assert(WritingAST && "Cannot request a declaration ID before AST writing"); in GetDeclRef()
6234 for (DeclUpdate &Update : Iter->second) in GetDeclRef()
6239 // If D comes from an AST file, its declaration ID is already known and in GetDeclRef()
6241 if (D->isFromASTFile()) { in GetDeclRef()
6242 if (isWritingStdCXXNamedModules() && D->getOwningModule()) in GetDeclRef()
6243 TouchedTopLevelModules.insert(D->getOwningModule()->getTopLevelModule()); in GetDeclRef()
6245 return LocalDeclID(D->getGlobalID()); in GetDeclRef()
6249 LocalDeclID &ID = DeclIDs[D]; in GetDeclRef() local
6250 if (ID.isInvalid()) { in GetDeclRef()
6256 // We haven't seen this declaration before. Give it a new ID and in GetDeclRef()
6258 ID = NextDeclID++; in GetDeclRef()
6262 return ID; in GetDeclRef()
6269 // If D comes from an AST file, its declaration ID is already known and in getDeclID()
6271 if (D->isFromASTFile()) in getDeclID()
6272 return LocalDeclID(D->getGlobalID()); in getDeclID()
6284 if (D->isFromASTFile()) in wasDeclEmitted()
6288 assert((Emitted || (!D->getOwningModule() && isWritingStdCXXNamedModules()) || in wasDeclEmitted()
6294 void ASTWriter::associateDeclWithFile(const Decl *D, LocalDeclID ID) { in associateDeclWithFile() argument
6295 assert(ID.isValid()); in associateDeclWithFile()
6298 SourceLocation Loc = D->getLocation(); in associateDeclWithFile()
6302 // We only keep track of the file-level declarations of each file. in associateDeclWithFile()
6303 if (!D->getLexicalDeclContext()->isFileContext()) in associateDeclWithFile()
6312 SourceManager &SM = Context->getSourceManager(); in associateDeclWithFile()
6321 assert(IsSLocAffecting[FID.ID]); in associateDeclWithFile()
6327 std::pair<unsigned, LocalDeclID> LocDecl(Offset, ID); in associateDeclWithFile()
6328 LocDeclIDsTy &Decls = Info->DeclIDs; in associateDeclWithFile()
6340 auto *DC = D->getLexicalDeclContext(); in getAnonymousDeclarationNumber()
6350 return It->second; in getAnonymousDeclarationNumber()
6389 Record->push_back(Info.NumTemplParamLists); in AddQualifierInfo()
6399 // Push each of the nested-name-specifiers's onto a stack for in AddNestedNameSpecifierLoc()
6406 Record->push_back(NestedNames.size()); in AddNestedNameSpecifierLoc()
6410 = NNS.getNestedNameSpecifier()->getKind(); in AddNestedNameSpecifierLoc()
6411 Record->push_back(Kind); in AddNestedNameSpecifierLoc()
6414 AddIdentifierRef(NNS.getNestedNameSpecifier()->getAsIdentifier()); in AddNestedNameSpecifierLoc()
6419 AddDeclRef(NNS.getNestedNameSpecifier()->getAsNamespace()); in AddNestedNameSpecifierLoc()
6424 AddDeclRef(NNS.getNestedNameSpecifier()->getAsNamespaceAlias()); in AddNestedNameSpecifierLoc()
6430 Record->push_back(Kind == NestedNameSpecifier::TypeSpecWithTemplate); in AddNestedNameSpecifierLoc()
6441 AddDeclRef(NNS.getNestedNameSpecifier()->getAsRecordDecl()); in AddNestedNameSpecifierLoc()
6451 AddSourceLocation(TemplateParams->getTemplateLoc()); in AddTemplateParameterList()
6452 AddSourceLocation(TemplateParams->getLAngleLoc()); in AddTemplateParameterList()
6453 AddSourceLocation(TemplateParams->getRAngleLoc()); in AddTemplateParameterList()
6455 Record->push_back(TemplateParams->size()); in AddTemplateParameterList()
6458 if (const Expr *RequiresClause = TemplateParams->getRequiresClause()) { in AddTemplateParameterList()
6459 Record->push_back(true); in AddTemplateParameterList()
6462 Record->push_back(false); in AddTemplateParameterList()
6470 Record->push_back(TemplateArgs->size()); in AddTemplateArgumentList()
6471 for (int i = 0, e = TemplateArgs->size(); i != e; ++i) in AddTemplateArgumentList()
6472 AddTemplateArgument(TemplateArgs->get(i)); in AddTemplateArgumentList()
6478 AddSourceLocation(ASTTemplArgList->LAngleLoc); in AddASTTemplateArgumentListInfo()
6479 AddSourceLocation(ASTTemplArgList->RAngleLoc); in AddASTTemplateArgumentListInfo()
6480 Record->push_back(ASTTemplArgList->NumTemplateArgs); in AddASTTemplateArgumentListInfo()
6481 const TemplateArgumentLoc *TemplArgs = ASTTemplArgList->getTemplateArgs(); in AddASTTemplateArgumentListInfo()
6482 for (int i = 0, e = ASTTemplArgList->NumTemplateArgs; i != e; ++i) in AddASTTemplateArgumentListInfo()
6487 Record->push_back(Set.size()); in AddUnresolvedSet()
6491 Record->push_back(I.getAccess()); in AddUnresolvedSet()
6497 Record->push_back(Base.isVirtual()); in AddCXXBaseSpecifier()
6498 Record->push_back(Base.isBaseOfClass()); in AddCXXBaseSpecifier()
6499 Record->push_back(Base.getAccessSpecifierAsWritten()); in AddCXXBaseSpecifier()
6500 Record->push_back(Base.getInheritConstructors()); in AddCXXBaseSpecifier()
6532 if (Init->isBaseInitializer()) { in EmitCXXCtorInitializers()
6534 Writer.AddTypeSourceInfo(Init->getTypeSourceInfo()); in EmitCXXCtorInitializers()
6535 Writer.push_back(Init->isBaseVirtual()); in EmitCXXCtorInitializers()
6536 } else if (Init->isDelegatingInitializer()) { in EmitCXXCtorInitializers()
6538 Writer.AddTypeSourceInfo(Init->getTypeSourceInfo()); in EmitCXXCtorInitializers()
6539 } else if (Init->isMemberInitializer()){ in EmitCXXCtorInitializers()
6541 Writer.AddDeclRef(Init->getMember()); in EmitCXXCtorInitializers()
6544 Writer.AddDeclRef(Init->getIndirectMember()); in EmitCXXCtorInitializers()
6547 Writer.AddSourceLocation(Init->getMemberLocation()); in EmitCXXCtorInitializers()
6548 Writer.AddStmt(Init->getInit()); in EmitCXXCtorInitializers()
6549 Writer.AddSourceLocation(Init->getLParenLoc()); in EmitCXXCtorInitializers()
6550 Writer.AddSourceLocation(Init->getRParenLoc()); in EmitCXXCtorInitializers()
6551 Writer.push_back(Init->isWritten()); in EmitCXXCtorInitializers()
6552 if (Init->isWritten()) in EmitCXXCtorInitializers()
6553 Writer.push_back(Init->getSourceOrder()); in EmitCXXCtorInitializers()
6566 auto &Data = D->data(); in AddCXXDefinitionData()
6568 Record->push_back(Data.IsLambda); in AddCXXDefinitionData()
6574 Record->push_back(DefinitionBits); \ in AddCXXDefinitionData()
6582 Record->push_back(DefinitionBits); in AddCXXDefinitionData()
6586 Record->push_back(D->getODRHash()); in AddCXXDefinitionData()
6589 !D->isDependentType() && in AddCXXDefinitionData()
6590 (Writer->Context->getLangOpts().ModulesDebugInfo || in AddCXXDefinitionData()
6591 D->isInNamedModule()); in AddCXXDefinitionData()
6592 Record->push_back(ModulesCodegen); in AddCXXDefinitionData()
6594 Writer->AddDeclRef(D, Writer->ModularCodegenDecls); in AddCXXDefinitionData()
6598 AddUnresolvedSet(Data.Conversions.get(*Writer->Context)); in AddCXXDefinitionData()
6599 Record->push_back(Data.ComputedVisibleConversions); in AddCXXDefinitionData()
6601 AddUnresolvedSet(Data.VisibleConversions.get(*Writer->Context)); in AddCXXDefinitionData()
6605 Record->push_back(Data.NumBases); in AddCXXDefinitionData()
6610 Record->push_back(Data.NumVBases); in AddCXXDefinitionData()
6614 AddDeclRef(D->getFirstFriend()); in AddCXXDefinitionData()
6616 auto &Lambda = D->getLambdaData(); in AddCXXDefinitionData()
6624 Record->push_back(LambdaBits); in AddCXXDefinitionData()
6626 Record->push_back(Lambda.NumExplicitCaptures); in AddCXXDefinitionData()
6627 Record->push_back(Lambda.ManglingNumber); in AddCXXDefinitionData()
6628 Record->push_back(D->getDeviceLambdaManglingNumber()); in AddCXXDefinitionData()
6639 Record->push_back(CaptureBits); in AddCXXDefinitionData()
6660 const Expr *Init = VD->getInit(); in AddVarDeclInit()
6667 if (EvaluatedStmt *ES = VD->getEvaluatedStmt()) { in AddVarDeclInit()
6668 Val |= (ES->HasConstantInitialization ? 2 : 0); in AddVarDeclInit()
6669 Val |= (ES->HasConstantDestruction ? 4 : 0); in AddVarDeclInit()
6670 APValue *Evaluated = VD->getEvaluatedValue(); in AddVarDeclInit()
6672 if (Evaluated && (Evaluated->isInt() || Evaluated->isFloat())) in AddVarDeclInit()
6677 AddAPValue(*VD->getEvaluatedValue()); in AddVarDeclInit()
6698 FirstMacroID = NUM_PREDEF_MACRO_IDS + Chain->getTotalNumMacros(); in ReaderInitialized()
6699 FirstSubmoduleID = NUM_PREDEF_SUBMODULE_IDS + Chain->getTotalNumSubmodules(); in ReaderInitialized()
6700 FirstSelectorID = NUM_PREDEF_SELECTOR_IDS + Chain->getTotalNumSelectors(); in ReaderInitialized()
6706 void ASTWriter::IdentifierRead(IdentifierID ID, IdentifierInfo *II) { in IdentifierRead() argument
6707 // Don't reuse Type ID from external modules for named modules. See the in IdentifierRead()
6715 // Always keep the local identifier ID. See \p TypeRead() for more in IdentifierRead()
6720 // Otherwise, keep the highest ID since the module file comes later has in IdentifierRead()
6722 if (ID > StoredID) in IdentifierRead()
6723 StoredID = ID; in IdentifierRead()
6726 void ASTWriter::MacroRead(serialization::MacroID ID, MacroInfo *MI) { in MacroRead() argument
6727 // Always keep the highest ID. See \p TypeRead() for more information. in MacroRead()
6729 if (ID > StoredID) in MacroRead()
6730 StoredID = ID; in MacroRead()
6734 // Don't reuse Type ID from external modules for named modules. See the in TypeRead()
6754 // Otherwise, keep the highest ID since the module file comes later has in TypeRead()
6760 void ASTWriter::PredefinedDeclBuilt(PredefinedDeclIDs ID, const Decl *D) { in PredefinedDeclBuilt() argument
6761 assert(D->isCanonicalDecl() && "predefined decl is not canonical"); in PredefinedDeclBuilt()
6762 DeclIDs[D] = LocalDeclID(ID); in PredefinedDeclBuilt()
6766 void ASTWriter::SelectorRead(SelectorID ID, Selector S) { in SelectorRead() argument
6767 // Always keep the highest ID. See \p TypeRead() for more information. in SelectorRead()
6769 if (ID > StoredID) in SelectorRead()
6770 StoredID = ID; in SelectorRead()
6773 void ASTWriter::MacroDefinitionRead(serialization::PreprocessedEntityID ID, in MacroDefinitionRead() argument
6776 MacroDefinitions[MD] = ID; in MacroDefinitionRead()
6779 void ASTWriter::ModuleRead(serialization::SubmoduleID ID, Module *Mod) { in ModuleRead() argument
6781 SubmoduleIDs[Mod] = ID; in ModuleRead()
6785 if (Chain && Chain->isProcessingUpdateRecords()) return; in CompletedTagDefinition()
6786 assert(D->isCompleteDefinition()); in CompletedTagDefinition()
6790 if (RD->isFromASTFile()) { in CompletedTagDefinition()
6794 assert(isTemplateInstantiation(RD->getTemplateSpecializationKind()) && in CompletedTagDefinition()
6803 if (D->isFromASTFile()) in isImportedDeclContext()
6808 return D == D->getASTContext().getVaListTagDecl(); in isImportedDeclContext()
6812 if (Chain && Chain->isProcessingUpdateRecords()) return; in AddedVisibleDecl()
6813 assert(DC->isLookupContext() && in AddedVisibleDecl()
6814 "Should not add lookup results to non-lookup contexts!"); in AddedVisibleDecl()
6824 if (isa<NamespaceDecl>(DC) && D->getFriendObjectKind() == Decl::FOK_None && in AddedVisibleDecl()
6830 if (D->isFromASTFile() || !isImportedDeclContext(Chain, cast<Decl>(DC))) in AddedVisibleDecl()
6833 assert(DC == DC->getPrimaryContext() && "added to non-primary context"); in AddedVisibleDecl()
6836 if (UpdatedDeclContexts.insert(DC) && !cast<Decl>(DC)->isFromASTFile()) { in AddedVisibleDecl()
6840 llvm::append_range(DeclsToEmitEvenIfUnreferenced, DC->decls()); in AddedVisibleDecl()
6846 if (Chain && Chain->isProcessingUpdateRecords()) return; in AddedCXXImplicitMember()
6847 assert(D->isImplicit()); in AddedCXXImplicitMember()
6851 if (D->isFromASTFile() || !isImportedDeclContext(Chain, RD)) in AddedCXXImplicitMember()
6858 assert(RD->isCompleteDefinition()); in AddedCXXImplicitMember()
6864 if (Chain && Chain->isProcessingUpdateRecords()) return; in ResolvedExceptionSpec()
6867 Chain->forEachImportedKeyDecl(FD, [&](const Decl *D) { in ResolvedExceptionSpec()
6871 ->getType() in ResolvedExceptionSpec()
6872 ->castAs<FunctionProtoType>() in ResolvedExceptionSpec()
6873 ->getExceptionSpecType())) in ResolvedExceptionSpec()
6879 if (Chain && Chain->isProcessingUpdateRecords()) return; in DeducedReturnType()
6882 Chain->forEachImportedKeyDecl(FD, [&](const Decl *D) { in DeducedReturnType()
6891 if (Chain && Chain->isProcessingUpdateRecords()) return; in ResolvedOperatorDelete()
6895 Chain->forEachImportedKeyDecl(DD, [&](const Decl *D) { in ResolvedOperatorDelete()
6901 if (Chain && Chain->isProcessingUpdateRecords()) return; in CompletedImplicitDefinition()
6903 if (!D->isFromASTFile()) in CompletedImplicitDefinition()
6911 if (Chain && Chain->isProcessingUpdateRecords()) return; in VariableDefinitionInstantiated()
6913 if (!D->isFromASTFile()) in VariableDefinitionInstantiated()
6920 if (Chain && Chain->isProcessingUpdateRecords()) return; in FunctionDefinitionInstantiated()
6922 if (!D->isFromASTFile()) in FunctionDefinitionInstantiated()
6929 if (Chain && Chain->isProcessingUpdateRecords()) return; in InstantiationRequested()
6931 if (!D->isFromASTFile()) in InstantiationRequested()
6938 POI = VD->getPointOfInstantiation(); in InstantiationRequested()
6940 POI = cast<FunctionDecl>(D)->getPointOfInstantiation(); in InstantiationRequested()
6945 if (Chain && Chain->isProcessingUpdateRecords()) return; in DefaultArgumentInstantiated()
6947 if (!D->isFromASTFile()) in DefaultArgumentInstantiated()
6956 if (!D->isFromASTFile()) in DefaultMemberInitializerInstantiated()
6965 if (Chain && Chain->isProcessingUpdateRecords()) return; in AddedObjCCategoryToInterface()
6967 if (!IFD->isFromASTFile()) in AddedObjCCategoryToInterface()
6970 assert(IFD->getDefinition() && "Category on a class without a definition?"); in AddedObjCCategoryToInterface()
6972 const_cast<ObjCInterfaceDecl *>(IFD->getDefinition())); in AddedObjCCategoryToInterface()
6976 if (Chain && Chain->isProcessingUpdateRecords()) return; in DeclarationMarkedUsed()
6982 for (auto Prev = D->getMostRecentDecl(); Prev; Prev = Prev->getPreviousDecl()) in DeclarationMarkedUsed()
6990 if (Chain && Chain->isProcessingUpdateRecords()) return; in DeclarationMarkedOpenMPThreadPrivate()
6992 if (!D->isFromASTFile()) in DeclarationMarkedOpenMPThreadPrivate()
6999 if (Chain && Chain->isProcessingUpdateRecords()) return; in DeclarationMarkedOpenMPAllocate()
7001 if (!D->isFromASTFile()) in DeclarationMarkedOpenMPAllocate()
7009 if (Chain && Chain->isProcessingUpdateRecords()) return; in DeclarationMarkedOpenMPDeclareTarget()
7011 if (!D->isFromASTFile()) in DeclarationMarkedOpenMPDeclareTarget()
7019 if (Chain && Chain->isProcessingUpdateRecords()) return; in RedefinedHiddenDefinition()
7021 assert(!D->isUnconditionallyVisible() && "expected a hidden declaration"); in RedefinedHiddenDefinition()
7027 if (Chain && Chain->isProcessingUpdateRecords()) return; in AddedAttributeToRecord()
7029 if (!Record->isFromASTFile()) in AddedAttributeToRecord()
7038 if (!TD->getFirstDecl()->isFromASTFile()) in AddedCXXTemplateSpecialization()
7040 if (Chain && Chain->isProcessingUpdateRecords()) in AddedCXXTemplateSpecialization()
7050 if (!TD->getFirstDecl()->isFromASTFile()) in AddedCXXTemplateSpecialization()
7052 if (Chain && Chain->isProcessingUpdateRecords()) in AddedCXXTemplateSpecialization()
7062 if (!TD->getFirstDecl()->isFromASTFile()) in AddedCXXTemplateSpecialization()
7064 if (Chain && Chain->isProcessingUpdateRecords()) in AddedCXXTemplateSpecialization()
7070 //===----------------------------------------------------------------------===//
7072 ////===----------------------------------------------------------------------===//
7096 Record.push_back(unsigned(C->getClauseKind())); in writeClause()
7098 Record.AddSourceLocation(C->getBeginLoc()); in writeClause()
7099 Record.AddSourceLocation(C->getEndLoc()); in writeClause()
7103 Record.push_back(uint64_t(C->getCaptureRegion())); in VisitOMPClauseWithPreInit()
7104 Record.AddStmt(C->getPreInitStmt()); in VisitOMPClauseWithPreInit()
7109 Record.AddStmt(C->getPostUpdateExpr()); in VisitOMPClauseWithPostUpdate()
7114 Record.push_back(uint64_t(C->getNameModifier())); in VisitOMPIfClause()
7115 Record.AddSourceLocation(C->getNameModifierLoc()); in VisitOMPIfClause()
7116 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPIfClause()
7117 Record.AddStmt(C->getCondition()); in VisitOMPIfClause()
7118 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPIfClause()
7123 Record.AddStmt(C->getCondition()); in VisitOMPFinalClause()
7124 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPFinalClause()
7129 Record.AddStmt(C->getNumThreads()); in VisitOMPNumThreadsClause()
7130 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPNumThreadsClause()
7134 Record.AddStmt(C->getSafelen()); in VisitOMPSafelenClause()
7135 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPSafelenClause()
7139 Record.AddStmt(C->getSimdlen()); in VisitOMPSimdlenClause()
7140 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPSimdlenClause()
7144 Record.push_back(C->getNumSizes()); in VisitOMPSizesClause()
7145 for (Expr *Size : C->getSizesRefs()) in VisitOMPSizesClause()
7147 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPSizesClause()
7153 Record.AddStmt(C->getFactor()); in VisitOMPPartialClause()
7154 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPPartialClause()
7158 Record.AddStmt(C->getAllocator()); in VisitOMPAllocatorClause()
7159 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPAllocatorClause()
7163 Record.AddStmt(C->getNumForLoops()); in VisitOMPCollapseClause()
7164 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPCollapseClause()
7168 Record.AddStmt(C->getEventHandler()); in VisitOMPDetachClause()
7169 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPDetachClause()
7173 Record.push_back(unsigned(C->getDefaultKind())); in VisitOMPDefaultClause()
7174 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPDefaultClause()
7175 Record.AddSourceLocation(C->getDefaultKindKwLoc()); in VisitOMPDefaultClause()
7179 Record.push_back(unsigned(C->getProcBindKind())); in VisitOMPProcBindClause()
7180 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPProcBindClause()
7181 Record.AddSourceLocation(C->getProcBindKindKwLoc()); in VisitOMPProcBindClause()
7186 Record.push_back(C->getScheduleKind()); in VisitOMPScheduleClause()
7187 Record.push_back(C->getFirstScheduleModifier()); in VisitOMPScheduleClause()
7188 Record.push_back(C->getSecondScheduleModifier()); in VisitOMPScheduleClause()
7189 Record.AddStmt(C->getChunkSize()); in VisitOMPScheduleClause()
7190 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPScheduleClause()
7191 Record.AddSourceLocation(C->getFirstScheduleModifierLoc()); in VisitOMPScheduleClause()
7192 Record.AddSourceLocation(C->getSecondScheduleModifierLoc()); in VisitOMPScheduleClause()
7193 Record.AddSourceLocation(C->getScheduleKindLoc()); in VisitOMPScheduleClause()
7194 Record.AddSourceLocation(C->getCommaLoc()); in VisitOMPScheduleClause()
7198 Record.push_back(C->getLoopNumIterations().size()); in VisitOMPOrderedClause()
7199 Record.AddStmt(C->getNumForLoops()); in VisitOMPOrderedClause()
7200 for (Expr *NumIter : C->getLoopNumIterations()) in VisitOMPOrderedClause()
7202 for (unsigned I = 0, E = C->getLoopNumIterations().size(); I <E; ++I) in VisitOMPOrderedClause()
7203 Record.AddStmt(C->getLoopCounter(I)); in VisitOMPOrderedClause()
7204 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPOrderedClause()
7218 Record.push_back(C->isExtended() ? 1 : 0); in VisitOMPUpdateClause()
7219 if (C->isExtended()) { in VisitOMPUpdateClause()
7220 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPUpdateClause()
7221 Record.AddSourceLocation(C->getArgumentLoc()); in VisitOMPUpdateClause()
7222 Record.writeEnum(C->getDependencyKind()); in VisitOMPUpdateClause()
7232 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPFailClause()
7233 Record.AddSourceLocation(C->getFailParameterLoc()); in VisitOMPFailClause()
7234 Record.writeEnum(C->getFailParameter()); in VisitOMPFailClause()
7256 Record.push_back(C->varlist_size()); in VisitOMPInitClause()
7257 for (Expr *VE : C->varlists()) in VisitOMPInitClause()
7259 Record.writeBool(C->getIsTarget()); in VisitOMPInitClause()
7260 Record.writeBool(C->getIsTargetSync()); in VisitOMPInitClause()
7261 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPInitClause()
7262 Record.AddSourceLocation(C->getVarLoc()); in VisitOMPInitClause()
7266 Record.AddStmt(C->getInteropVar()); in VisitOMPUseClause()
7267 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPUseClause()
7268 Record.AddSourceLocation(C->getVarLoc()); in VisitOMPUseClause()
7272 Record.AddStmt(C->getInteropVar()); in VisitOMPDestroyClause()
7273 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPDestroyClause()
7274 Record.AddSourceLocation(C->getVarLoc()); in VisitOMPDestroyClause()
7279 Record.AddStmt(C->getCondition()); in VisitOMPNovariantsClause()
7280 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPNovariantsClause()
7285 Record.AddStmt(C->getCondition()); in VisitOMPNocontextClause()
7286 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPNocontextClause()
7291 Record.AddStmt(C->getThreadID()); in VisitOMPFilterClause()
7292 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPFilterClause()
7296 Record.AddStmt(C->getAlignment()); in VisitOMPAlignClause()
7297 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPAlignClause()
7301 Record.push_back(C->varlist_size()); in VisitOMPPrivateClause()
7302 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPPrivateClause()
7303 for (auto *VE : C->varlists()) { in VisitOMPPrivateClause()
7306 for (auto *VE : C->private_copies()) { in VisitOMPPrivateClause()
7312 Record.push_back(C->varlist_size()); in VisitOMPFirstprivateClause()
7314 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPFirstprivateClause()
7315 for (auto *VE : C->varlists()) { in VisitOMPFirstprivateClause()
7318 for (auto *VE : C->private_copies()) { in VisitOMPFirstprivateClause()
7321 for (auto *VE : C->inits()) { in VisitOMPFirstprivateClause()
7327 Record.push_back(C->varlist_size()); in VisitOMPLastprivateClause()
7329 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPLastprivateClause()
7330 Record.writeEnum(C->getKind()); in VisitOMPLastprivateClause()
7331 Record.AddSourceLocation(C->getKindLoc()); in VisitOMPLastprivateClause()
7332 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPLastprivateClause()
7333 for (auto *VE : C->varlists()) in VisitOMPLastprivateClause()
7335 for (auto *E : C->private_copies()) in VisitOMPLastprivateClause()
7337 for (auto *E : C->source_exprs()) in VisitOMPLastprivateClause()
7339 for (auto *E : C->destination_exprs()) in VisitOMPLastprivateClause()
7341 for (auto *E : C->assignment_ops()) in VisitOMPLastprivateClause()
7346 Record.push_back(C->varlist_size()); in VisitOMPSharedClause()
7347 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPSharedClause()
7348 for (auto *VE : C->varlists()) in VisitOMPSharedClause()
7353 Record.push_back(C->varlist_size()); in VisitOMPReductionClause()
7354 Record.writeEnum(C->getModifier()); in VisitOMPReductionClause()
7356 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPReductionClause()
7357 Record.AddSourceLocation(C->getModifierLoc()); in VisitOMPReductionClause()
7358 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPReductionClause()
7359 Record.AddNestedNameSpecifierLoc(C->getQualifierLoc()); in VisitOMPReductionClause()
7360 Record.AddDeclarationNameInfo(C->getNameInfo()); in VisitOMPReductionClause()
7361 for (auto *VE : C->varlists()) in VisitOMPReductionClause()
7363 for (auto *VE : C->privates()) in VisitOMPReductionClause()
7365 for (auto *E : C->lhs_exprs()) in VisitOMPReductionClause()
7367 for (auto *E : C->rhs_exprs()) in VisitOMPReductionClause()
7369 for (auto *E : C->reduction_ops()) in VisitOMPReductionClause()
7371 if (C->getModifier() == clang::OMPC_REDUCTION_inscan) { in VisitOMPReductionClause()
7372 for (auto *E : C->copy_ops()) in VisitOMPReductionClause()
7374 for (auto *E : C->copy_array_temps()) in VisitOMPReductionClause()
7376 for (auto *E : C->copy_array_elems()) in VisitOMPReductionClause()
7382 Record.push_back(C->varlist_size()); in VisitOMPTaskReductionClause()
7384 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPTaskReductionClause()
7385 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPTaskReductionClause()
7386 Record.AddNestedNameSpecifierLoc(C->getQualifierLoc()); in VisitOMPTaskReductionClause()
7387 Record.AddDeclarationNameInfo(C->getNameInfo()); in VisitOMPTaskReductionClause()
7388 for (auto *VE : C->varlists()) in VisitOMPTaskReductionClause()
7390 for (auto *VE : C->privates()) in VisitOMPTaskReductionClause()
7392 for (auto *E : C->lhs_exprs()) in VisitOMPTaskReductionClause()
7394 for (auto *E : C->rhs_exprs()) in VisitOMPTaskReductionClause()
7396 for (auto *E : C->reduction_ops()) in VisitOMPTaskReductionClause()
7401 Record.push_back(C->varlist_size()); in VisitOMPInReductionClause()
7403 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPInReductionClause()
7404 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPInReductionClause()
7405 Record.AddNestedNameSpecifierLoc(C->getQualifierLoc()); in VisitOMPInReductionClause()
7406 Record.AddDeclarationNameInfo(C->getNameInfo()); in VisitOMPInReductionClause()
7407 for (auto *VE : C->varlists()) in VisitOMPInReductionClause()
7409 for (auto *VE : C->privates()) in VisitOMPInReductionClause()
7411 for (auto *E : C->lhs_exprs()) in VisitOMPInReductionClause()
7413 for (auto *E : C->rhs_exprs()) in VisitOMPInReductionClause()
7415 for (auto *E : C->reduction_ops()) in VisitOMPInReductionClause()
7417 for (auto *E : C->taskgroup_descriptors()) in VisitOMPInReductionClause()
7422 Record.push_back(C->varlist_size()); in VisitOMPLinearClause()
7424 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPLinearClause()
7425 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPLinearClause()
7426 Record.push_back(C->getModifier()); in VisitOMPLinearClause()
7427 Record.AddSourceLocation(C->getModifierLoc()); in VisitOMPLinearClause()
7428 for (auto *VE : C->varlists()) { in VisitOMPLinearClause()
7431 for (auto *VE : C->privates()) { in VisitOMPLinearClause()
7434 for (auto *VE : C->inits()) { in VisitOMPLinearClause()
7437 for (auto *VE : C->updates()) { in VisitOMPLinearClause()
7440 for (auto *VE : C->finals()) { in VisitOMPLinearClause()
7443 Record.AddStmt(C->getStep()); in VisitOMPLinearClause()
7444 Record.AddStmt(C->getCalcStep()); in VisitOMPLinearClause()
7445 for (auto *VE : C->used_expressions()) in VisitOMPLinearClause()
7450 Record.push_back(C->varlist_size()); in VisitOMPAlignedClause()
7451 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPAlignedClause()
7452 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPAlignedClause()
7453 for (auto *VE : C->varlists()) in VisitOMPAlignedClause()
7455 Record.AddStmt(C->getAlignment()); in VisitOMPAlignedClause()
7459 Record.push_back(C->varlist_size()); in VisitOMPCopyinClause()
7460 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPCopyinClause()
7461 for (auto *VE : C->varlists()) in VisitOMPCopyinClause()
7463 for (auto *E : C->source_exprs()) in VisitOMPCopyinClause()
7465 for (auto *E : C->destination_exprs()) in VisitOMPCopyinClause()
7467 for (auto *E : C->assignment_ops()) in VisitOMPCopyinClause()
7472 Record.push_back(C->varlist_size()); in VisitOMPCopyprivateClause()
7473 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPCopyprivateClause()
7474 for (auto *VE : C->varlists()) in VisitOMPCopyprivateClause()
7476 for (auto *E : C->source_exprs()) in VisitOMPCopyprivateClause()
7478 for (auto *E : C->destination_exprs()) in VisitOMPCopyprivateClause()
7480 for (auto *E : C->assignment_ops()) in VisitOMPCopyprivateClause()
7485 Record.push_back(C->varlist_size()); in VisitOMPFlushClause()
7486 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPFlushClause()
7487 for (auto *VE : C->varlists()) in VisitOMPFlushClause()
7492 Record.AddStmt(C->getDepobj()); in VisitOMPDepobjClause()
7493 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPDepobjClause()
7497 Record.push_back(C->varlist_size()); in VisitOMPDependClause()
7498 Record.push_back(C->getNumLoops()); in VisitOMPDependClause()
7499 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPDependClause()
7500 Record.AddStmt(C->getModifier()); in VisitOMPDependClause()
7501 Record.push_back(C->getDependencyKind()); in VisitOMPDependClause()
7502 Record.AddSourceLocation(C->getDependencyLoc()); in VisitOMPDependClause()
7503 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPDependClause()
7504 Record.AddSourceLocation(C->getOmpAllMemoryLoc()); in VisitOMPDependClause()
7505 for (auto *VE : C->varlists()) in VisitOMPDependClause()
7507 for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I) in VisitOMPDependClause()
7508 Record.AddStmt(C->getLoopData(I)); in VisitOMPDependClause()
7513 Record.writeEnum(C->getModifier()); in VisitOMPDeviceClause()
7514 Record.AddStmt(C->getDevice()); in VisitOMPDeviceClause()
7515 Record.AddSourceLocation(C->getModifierLoc()); in VisitOMPDeviceClause()
7516 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPDeviceClause()
7520 Record.push_back(C->varlist_size()); in VisitOMPMapClause()
7521 Record.push_back(C->getUniqueDeclarationsNum()); in VisitOMPMapClause()
7522 Record.push_back(C->getTotalComponentListNum()); in VisitOMPMapClause()
7523 Record.push_back(C->getTotalComponentsNum()); in VisitOMPMapClause()
7524 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPMapClause()
7527 Record.push_back(C->getMapTypeModifier(I)); in VisitOMPMapClause()
7528 Record.AddSourceLocation(C->getMapTypeModifierLoc(I)); in VisitOMPMapClause()
7529 if (C->getMapTypeModifier(I) == OMPC_MAP_MODIFIER_iterator) in VisitOMPMapClause()
7532 Record.AddNestedNameSpecifierLoc(C->getMapperQualifierLoc()); in VisitOMPMapClause()
7533 Record.AddDeclarationNameInfo(C->getMapperIdInfo()); in VisitOMPMapClause()
7534 Record.push_back(C->getMapType()); in VisitOMPMapClause()
7535 Record.AddSourceLocation(C->getMapLoc()); in VisitOMPMapClause()
7536 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPMapClause()
7537 for (auto *E : C->varlists()) in VisitOMPMapClause()
7539 for (auto *E : C->mapperlists()) in VisitOMPMapClause()
7542 Record.AddStmt(C->getIteratorModifier()); in VisitOMPMapClause()
7543 for (auto *D : C->all_decls()) in VisitOMPMapClause()
7545 for (auto N : C->all_num_lists()) in VisitOMPMapClause()
7547 for (auto N : C->all_lists_sizes()) in VisitOMPMapClause()
7549 for (auto &M : C->all_components()) { in VisitOMPMapClause()
7556 Record.push_back(C->varlist_size()); in VisitOMPAllocateClause()
7557 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPAllocateClause()
7558 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPAllocateClause()
7559 Record.AddStmt(C->getAllocator()); in VisitOMPAllocateClause()
7560 for (auto *VE : C->varlists()) in VisitOMPAllocateClause()
7566 Record.AddStmt(C->getNumTeams()); in VisitOMPNumTeamsClause()
7567 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPNumTeamsClause()
7572 Record.AddStmt(C->getThreadLimit()); in VisitOMPThreadLimitClause()
7573 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPThreadLimitClause()
7578 Record.AddStmt(C->getPriority()); in VisitOMPPriorityClause()
7579 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPPriorityClause()
7584 Record.writeEnum(C->getModifier()); in VisitOMPGrainsizeClause()
7585 Record.AddStmt(C->getGrainsize()); in VisitOMPGrainsizeClause()
7586 Record.AddSourceLocation(C->getModifierLoc()); in VisitOMPGrainsizeClause()
7587 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPGrainsizeClause()
7592 Record.writeEnum(C->getModifier()); in VisitOMPNumTasksClause()
7593 Record.AddStmt(C->getNumTasks()); in VisitOMPNumTasksClause()
7594 Record.AddSourceLocation(C->getModifierLoc()); in VisitOMPNumTasksClause()
7595 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPNumTasksClause()
7599 Record.AddStmt(C->getHint()); in VisitOMPHintClause()
7600 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPHintClause()
7605 Record.push_back(C->getDistScheduleKind()); in VisitOMPDistScheduleClause()
7606 Record.AddStmt(C->getChunkSize()); in VisitOMPDistScheduleClause()
7607 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPDistScheduleClause()
7608 Record.AddSourceLocation(C->getDistScheduleKindLoc()); in VisitOMPDistScheduleClause()
7609 Record.AddSourceLocation(C->getCommaLoc()); in VisitOMPDistScheduleClause()
7613 Record.push_back(C->getDefaultmapKind()); in VisitOMPDefaultmapClause()
7614 Record.push_back(C->getDefaultmapModifier()); in VisitOMPDefaultmapClause()
7615 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPDefaultmapClause()
7616 Record.AddSourceLocation(C->getDefaultmapModifierLoc()); in VisitOMPDefaultmapClause()
7617 Record.AddSourceLocation(C->getDefaultmapKindLoc()); in VisitOMPDefaultmapClause()
7621 Record.push_back(C->varlist_size()); in VisitOMPToClause()
7622 Record.push_back(C->getUniqueDeclarationsNum()); in VisitOMPToClause()
7623 Record.push_back(C->getTotalComponentListNum()); in VisitOMPToClause()
7624 Record.push_back(C->getTotalComponentsNum()); in VisitOMPToClause()
7625 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPToClause()
7627 Record.push_back(C->getMotionModifier(I)); in VisitOMPToClause()
7628 Record.AddSourceLocation(C->getMotionModifierLoc(I)); in VisitOMPToClause()
7630 Record.AddNestedNameSpecifierLoc(C->getMapperQualifierLoc()); in VisitOMPToClause()
7631 Record.AddDeclarationNameInfo(C->getMapperIdInfo()); in VisitOMPToClause()
7632 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPToClause()
7633 for (auto *E : C->varlists()) in VisitOMPToClause()
7635 for (auto *E : C->mapperlists()) in VisitOMPToClause()
7637 for (auto *D : C->all_decls()) in VisitOMPToClause()
7639 for (auto N : C->all_num_lists()) in VisitOMPToClause()
7641 for (auto N : C->all_lists_sizes()) in VisitOMPToClause()
7643 for (auto &M : C->all_components()) { in VisitOMPToClause()
7651 Record.push_back(C->varlist_size()); in VisitOMPFromClause()
7652 Record.push_back(C->getUniqueDeclarationsNum()); in VisitOMPFromClause()
7653 Record.push_back(C->getTotalComponentListNum()); in VisitOMPFromClause()
7654 Record.push_back(C->getTotalComponentsNum()); in VisitOMPFromClause()
7655 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPFromClause()
7657 Record.push_back(C->getMotionModifier(I)); in VisitOMPFromClause()
7658 Record.AddSourceLocation(C->getMotionModifierLoc(I)); in VisitOMPFromClause()
7660 Record.AddNestedNameSpecifierLoc(C->getMapperQualifierLoc()); in VisitOMPFromClause()
7661 Record.AddDeclarationNameInfo(C->getMapperIdInfo()); in VisitOMPFromClause()
7662 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPFromClause()
7663 for (auto *E : C->varlists()) in VisitOMPFromClause()
7665 for (auto *E : C->mapperlists()) in VisitOMPFromClause()
7667 for (auto *D : C->all_decls()) in VisitOMPFromClause()
7669 for (auto N : C->all_num_lists()) in VisitOMPFromClause()
7671 for (auto N : C->all_lists_sizes()) in VisitOMPFromClause()
7673 for (auto &M : C->all_components()) { in VisitOMPFromClause()
7681 Record.push_back(C->varlist_size()); in VisitOMPUseDevicePtrClause()
7682 Record.push_back(C->getUniqueDeclarationsNum()); in VisitOMPUseDevicePtrClause()
7683 Record.push_back(C->getTotalComponentListNum()); in VisitOMPUseDevicePtrClause()
7684 Record.push_back(C->getTotalComponentsNum()); in VisitOMPUseDevicePtrClause()
7685 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPUseDevicePtrClause()
7686 for (auto *E : C->varlists()) in VisitOMPUseDevicePtrClause()
7688 for (auto *VE : C->private_copies()) in VisitOMPUseDevicePtrClause()
7690 for (auto *VE : C->inits()) in VisitOMPUseDevicePtrClause()
7692 for (auto *D : C->all_decls()) in VisitOMPUseDevicePtrClause()
7694 for (auto N : C->all_num_lists()) in VisitOMPUseDevicePtrClause()
7696 for (auto N : C->all_lists_sizes()) in VisitOMPUseDevicePtrClause()
7698 for (auto &M : C->all_components()) { in VisitOMPUseDevicePtrClause()
7705 Record.push_back(C->varlist_size()); in VisitOMPUseDeviceAddrClause()
7706 Record.push_back(C->getUniqueDeclarationsNum()); in VisitOMPUseDeviceAddrClause()
7707 Record.push_back(C->getTotalComponentListNum()); in VisitOMPUseDeviceAddrClause()
7708 Record.push_back(C->getTotalComponentsNum()); in VisitOMPUseDeviceAddrClause()
7709 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPUseDeviceAddrClause()
7710 for (auto *E : C->varlists()) in VisitOMPUseDeviceAddrClause()
7712 for (auto *D : C->all_decls()) in VisitOMPUseDeviceAddrClause()
7714 for (auto N : C->all_num_lists()) in VisitOMPUseDeviceAddrClause()
7716 for (auto N : C->all_lists_sizes()) in VisitOMPUseDeviceAddrClause()
7718 for (auto &M : C->all_components()) { in VisitOMPUseDeviceAddrClause()
7725 Record.push_back(C->varlist_size()); in VisitOMPIsDevicePtrClause()
7726 Record.push_back(C->getUniqueDeclarationsNum()); in VisitOMPIsDevicePtrClause()
7727 Record.push_back(C->getTotalComponentListNum()); in VisitOMPIsDevicePtrClause()
7728 Record.push_back(C->getTotalComponentsNum()); in VisitOMPIsDevicePtrClause()
7729 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPIsDevicePtrClause()
7730 for (auto *E : C->varlists()) in VisitOMPIsDevicePtrClause()
7732 for (auto *D : C->all_decls()) in VisitOMPIsDevicePtrClause()
7734 for (auto N : C->all_num_lists()) in VisitOMPIsDevicePtrClause()
7736 for (auto N : C->all_lists_sizes()) in VisitOMPIsDevicePtrClause()
7738 for (auto &M : C->all_components()) { in VisitOMPIsDevicePtrClause()
7745 Record.push_back(C->varlist_size()); in VisitOMPHasDeviceAddrClause()
7746 Record.push_back(C->getUniqueDeclarationsNum()); in VisitOMPHasDeviceAddrClause()
7747 Record.push_back(C->getTotalComponentListNum()); in VisitOMPHasDeviceAddrClause()
7748 Record.push_back(C->getTotalComponentsNum()); in VisitOMPHasDeviceAddrClause()
7749 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPHasDeviceAddrClause()
7750 for (auto *E : C->varlists()) in VisitOMPHasDeviceAddrClause()
7752 for (auto *D : C->all_decls()) in VisitOMPHasDeviceAddrClause()
7754 for (auto N : C->all_num_lists()) in VisitOMPHasDeviceAddrClause()
7756 for (auto N : C->all_lists_sizes()) in VisitOMPHasDeviceAddrClause()
7758 for (auto &M : C->all_components()) { in VisitOMPHasDeviceAddrClause()
7777 Record.push_back(C->getAtomicDefaultMemOrderKind()); in VisitOMPAtomicDefaultMemOrderClause()
7778 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPAtomicDefaultMemOrderClause()
7779 Record.AddSourceLocation(C->getAtomicDefaultMemOrderKindKwLoc()); in VisitOMPAtomicDefaultMemOrderClause()
7783 Record.push_back(C->getAtKind()); in VisitOMPAtClause()
7784 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPAtClause()
7785 Record.AddSourceLocation(C->getAtKindKwLoc()); in VisitOMPAtClause()
7789 Record.push_back(C->getSeverityKind()); in VisitOMPSeverityClause()
7790 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPSeverityClause()
7791 Record.AddSourceLocation(C->getSeverityKindKwLoc()); in VisitOMPSeverityClause()
7795 Record.AddStmt(C->getMessageString()); in VisitOMPMessageClause()
7796 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPMessageClause()
7800 Record.push_back(C->varlist_size()); in VisitOMPNontemporalClause()
7801 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPNontemporalClause()
7802 for (auto *VE : C->varlists()) in VisitOMPNontemporalClause()
7804 for (auto *E : C->private_refs()) in VisitOMPNontemporalClause()
7809 Record.push_back(C->varlist_size()); in VisitOMPInclusiveClause()
7810 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPInclusiveClause()
7811 for (auto *VE : C->varlists()) in VisitOMPInclusiveClause()
7816 Record.push_back(C->varlist_size()); in VisitOMPExclusiveClause()
7817 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPExclusiveClause()
7818 for (auto *VE : C->varlists()) in VisitOMPExclusiveClause()
7823 Record.writeEnum(C->getKind()); in VisitOMPOrderClause()
7824 Record.writeEnum(C->getModifier()); in VisitOMPOrderClause()
7825 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPOrderClause()
7826 Record.AddSourceLocation(C->getKindKwLoc()); in VisitOMPOrderClause()
7827 Record.AddSourceLocation(C->getModifierKwLoc()); in VisitOMPOrderClause()
7831 Record.push_back(C->getNumberOfAllocators()); in VisitOMPUsesAllocatorsClause()
7832 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPUsesAllocatorsClause()
7833 for (unsigned I = 0, E = C->getNumberOfAllocators(); I < E; ++I) { in VisitOMPUsesAllocatorsClause()
7834 OMPUsesAllocatorsClause::Data Data = C->getAllocatorData(I); in VisitOMPUsesAllocatorsClause()
7843 Record.push_back(C->varlist_size()); in VisitOMPAffinityClause()
7844 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPAffinityClause()
7845 Record.AddStmt(C->getModifier()); in VisitOMPAffinityClause()
7846 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPAffinityClause()
7847 for (Expr *E : C->varlists()) in VisitOMPAffinityClause()
7852 Record.writeEnum(C->getBindKind()); in VisitOMPBindClause()
7853 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPBindClause()
7854 Record.AddSourceLocation(C->getBindKindLoc()); in VisitOMPBindClause()
7859 Record.AddStmt(C->getSize()); in VisitOMPXDynCGroupMemClause()
7860 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPXDynCGroupMemClause()
7864 Record.push_back(C->varlist_size()); in VisitOMPDoacrossClause()
7865 Record.push_back(C->getNumLoops()); in VisitOMPDoacrossClause()
7866 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPDoacrossClause()
7867 Record.push_back(C->getDependenceType()); in VisitOMPDoacrossClause()
7868 Record.AddSourceLocation(C->getDependenceLoc()); in VisitOMPDoacrossClause()
7869 Record.AddSourceLocation(C->getColonLoc()); in VisitOMPDoacrossClause()
7870 for (auto *VE : C->varlists()) in VisitOMPDoacrossClause()
7872 for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I) in VisitOMPDoacrossClause()
7873 Record.AddStmt(C->getLoopData(I)); in VisitOMPDoacrossClause()
7877 Record.AddAttributes(C->getAttrs()); in VisitOMPXAttributeClause()
7878 Record.AddSourceLocation(C->getBeginLoc()); in VisitOMPXAttributeClause()
7879 Record.AddSourceLocation(C->getLParenLoc()); in VisitOMPXAttributeClause()
7880 Record.AddSourceLocation(C->getEndLoc()); in VisitOMPXAttributeClause()
7886 writeUInt32(TI->Sets.size()); in writeOMPTraitInfo()
7887 for (const auto &Set : TI->Sets) { in writeOMPTraitInfo()
7905 writeUInt32(Data->getNumClauses()); in writeOMPChildren()
7906 writeUInt32(Data->getNumChildren()); in writeOMPChildren()
7907 writeBool(Data->hasAssociatedStmt()); in writeOMPChildren()
7908 for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I) in writeOMPChildren()
7909 writeOMPClause(Data->getClauses()[I]); in writeOMPChildren()
7910 if (Data->hasAssociatedStmt()) in writeOMPChildren()
7911 AddStmt(Data->getAssociatedStmt()); in writeOMPChildren()
7912 for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I) in writeOMPChildren()
7913 AddStmt(Data->getChildren()[I]); in writeOMPChildren()
7917 writeUInt32(C->getVarList().size()); in writeOpenACCVarList()
7918 for (Expr *E : C->getVarList()) in writeOpenACCVarList()
7929 writeEnum(C->getClauseKind()); in writeOpenACCClause()
7930 writeSourceLocation(C->getBeginLoc()); in writeOpenACCClause()
7931 writeSourceLocation(C->getEndLoc()); in writeOpenACCClause()
7933 switch (C->getClauseKind()) { in writeOpenACCClause()
7936 writeSourceLocation(DC->getLParenLoc()); in writeOpenACCClause()
7937 writeEnum(DC->getDefaultClauseKind()); in writeOpenACCClause()
7942 writeSourceLocation(IC->getLParenLoc()); in writeOpenACCClause()
7943 AddStmt(const_cast<Expr*>(IC->getConditionExpr())); in writeOpenACCClause()
7948 writeSourceLocation(SC->getLParenLoc()); in writeOpenACCClause()
7949 writeBool(SC->hasConditionExpr()); in writeOpenACCClause()
7950 if (SC->hasConditionExpr()) in writeOpenACCClause()
7951 AddStmt(const_cast<Expr*>(SC->getConditionExpr())); in writeOpenACCClause()
7956 writeSourceLocation(NGC->getLParenLoc()); in writeOpenACCClause()
7957 writeUInt32(NGC->getIntExprs().size()); in writeOpenACCClause()
7958 for (Expr *E : NGC->getIntExprs()) in writeOpenACCClause()
7964 writeSourceLocation(NWC->getLParenLoc()); in writeOpenACCClause()
7965 AddStmt(const_cast<Expr*>(NWC->getIntExpr())); in writeOpenACCClause()
7970 writeSourceLocation(NWC->getLParenLoc()); in writeOpenACCClause()
7971 AddStmt(const_cast<Expr*>(NWC->getIntExpr())); in writeOpenACCClause()
7976 writeSourceLocation(PC->getLParenLoc()); in writeOpenACCClause()
7982 writeSourceLocation(FPC->getLParenLoc()); in writeOpenACCClause()
7988 writeSourceLocation(AC->getLParenLoc()); in writeOpenACCClause()
7994 writeSourceLocation(DPC->getLParenLoc()); in writeOpenACCClause()
8000 writeSourceLocation(NCC->getLParenLoc()); in writeOpenACCClause()
8006 writeSourceLocation(PC->getLParenLoc()); in writeOpenACCClause()
8014 writeSourceLocation(CC->getLParenLoc()); in writeOpenACCClause()
8022 writeSourceLocation(CIC->getLParenLoc()); in writeOpenACCClause()
8023 writeBool(CIC->isReadOnly()); in writeOpenACCClause()
8031 writeSourceLocation(COC->getLParenLoc()); in writeOpenACCClause()
8032 writeBool(COC->isZero()); in writeOpenACCClause()
8040 writeSourceLocation(CC->getLParenLoc()); in writeOpenACCClause()
8041 writeBool(CC->isZero()); in writeOpenACCClause()
8047 writeSourceLocation(AC->getLParenLoc()); in writeOpenACCClause()
8048 writeBool(AC->hasIntExpr()); in writeOpenACCClause()
8049 if (AC->hasIntExpr()) in writeOpenACCClause()
8050 AddStmt(const_cast<Expr*>(AC->getIntExpr())); in writeOpenACCClause()
8055 writeSourceLocation(WC->getLParenLoc()); in writeOpenACCClause()
8056 writeBool(WC->getDevNumExpr()); in writeOpenACCClause()
8057 if (Expr *DNE = WC->getDevNumExpr()) in writeOpenACCClause()
8059 writeSourceLocation(WC->getQueuesLoc()); in writeOpenACCClause()
8061 writeOpenACCIntExprList(WC->getQueueIdExprs()); in writeOpenACCClause()
8067 writeSourceLocation(DTC->getLParenLoc()); in writeOpenACCClause()
8068 writeUInt32(DTC->getArchitectures().size()); in writeOpenACCClause()
8069 for (const DeviceTypeArgument &Arg : DTC->getArchitectures()) { in writeOpenACCClause()
8079 writeSourceLocation(RC->getLParenLoc()); in writeOpenACCClause()
8080 writeEnum(RC->getReductionOp()); in writeOpenACCClause()