13#ifndef LLVM_CLANG_SERIALIZATION_ASTREADER_H
14#define LLVM_CLANG_SERIALIZATION_ASTREADER_H
37#include "llvm/ADT/ArrayRef.h"
38#include "llvm/ADT/DenseMap.h"
39#include "llvm/ADT/DenseSet.h"
40#include "llvm/ADT/IntrusiveRefCntPtr.h"
41#include "llvm/ADT/MapVector.h"
42#include "llvm/ADT/PagedVector.h"
43#include "llvm/ADT/STLExtras.h"
44#include "llvm/ADT/SetVector.h"
45#include "llvm/ADT/SmallPtrSet.h"
46#include "llvm/ADT/SmallVector.h"
47#include "llvm/ADT/StringMap.h"
48#include "llvm/ADT/StringRef.h"
49#include "llvm/ADT/iterator.h"
50#include "llvm/ADT/iterator_range.h"
51#include "llvm/Bitstream/BitstreamReader.h"
52#include "llvm/Support/MemoryBuffer.h"
53#include "llvm/Support/SaveAndRestore.h"
54#include "llvm/Support/Timer.h"
55#include "llvm/Support/VersionTuple.h"
136 StringRef ModuleFilename,
bool Complain,
137 bool AllowCompatibleDifferences) {
145 StringRef ModuleFilename,
bool Complain,
146 bool AllowCompatibleDifferences) {
155 StringRef ModuleFilename,
bool Complain,
156 bool AllowCompatibleDifferences) {
165 StringRef ModuleFilename,
bool Complain) {
187 StringRef ModuleFilename,
188 StringRef SpecificModuleCachePath,
216 StringRef ModuleFilename,
217 bool ReadMacros,
bool Complain,
218 std::string &SuggestedPredefines) {
245 bool isOverridden,
bool isExplicitModule) {
256 StringRef Filename,
bool isSystem,
258 bool isExplicitModule) {
268 virtual void visitImport(StringRef ModuleName, StringRef Filename) {}
277 std::unique_ptr<ASTReaderListener> First;
278 std::unique_ptr<ASTReaderListener> Second;
283 std::unique_ptr<ASTReaderListener> Second)
284 : First(
std::move(First)), Second(
std::move(Second)) {}
286 std::unique_ptr<ASTReaderListener>
takeFirst() {
return std::move(First); }
287 std::unique_ptr<ASTReaderListener>
takeSecond() {
return std::move(Second); }
293 StringRef ModuleFilename,
bool Complain,
294 bool AllowCompatibleDifferences)
override;
296 StringRef ModuleFilename,
bool Complain,
297 bool AllowCompatibleDifferences)
override;
299 StringRef ModuleFilename,
bool Complain,
300 bool AllowCompatibleDifferences)
override;
302 StringRef ModuleFilename,
bool Complain)
override;
304 bool Complain)
override;
307 StringRef ModuleFilename,
308 StringRef SpecificModuleCachePath,
309 bool Complain)
override;
311 StringRef ModuleFilename,
bool ReadMacros,
313 std::string &SuggestedPredefines)
override;
321 bool isOverridden,
bool isExplicitModule)
override;
334 : PP(PP), Reader(Reader) {}
337 StringRef ModuleFilename,
bool Complain,
338 bool AllowCompatibleDifferences)
override;
340 StringRef ModuleFilename,
bool Complain,
341 bool AllowCompatibleDifferences)
override;
343 StringRef ModuleFilename,
bool Complain,
344 bool AllowCompatibleDifferences)
override;
346 StringRef ModuleFilename,
bool Complain)
override;
348 StringRef ModuleFilename,
bool ReadMacros,
350 std::string &SuggestedPredefines)
override;
352 StringRef ModuleFilename,
353 StringRef SpecificModuleCachePath,
354 bool Complain)
override;
369 StringRef ModuleFilename,
bool ReadMacros,
371 std::string &SuggestedPredefines)
override;
374namespace serialization {
376class ReadMethodPoolVisitor;
485 std::unique_ptr<ASTReaderListener> Listener;
490 bool OwnsDeserializationListener =
false;
502 Sema *SemaObj =
nullptr;
525 llvm::StringMap<std::shared_ptr<ModuleFileExtension>> ModuleFileExtensions;
528 std::unique_ptr<llvm::Timer> ReadTimer;
531 std::optional<llvm::TimeRegion> ReadTimeRegion;
538 std::optional<ModuleKind> CurrentDeserializingModuleKind;
541 std::unique_ptr<GlobalModuleIndex> GlobalIndex;
550 using GlobalSLocOffsetMapType =
555 GlobalSLocOffsetMapType GlobalSLocOffsetMap;
561 llvm::PagedVector<QualType> TypesLoaded;
567 llvm::PagedVector<Decl *> DeclsLoaded;
569 using FileOffset = std::pair<ModuleFile *, uint64_t>;
571 using DeclUpdateOffsetsMap = llvm::DenseMap<GlobalDeclID, FileOffsetsTy>;
575 DeclUpdateOffsetsMap DeclUpdateOffsets;
577 using DelayedNamespaceOffsetMapTy =
578 llvm::DenseMap<GlobalDeclID, LookupBlockOffsets>;
588 DelayedNamespaceOffsetMapTy DelayedNamespaceOffsetMap;
604 llvm::DenseMap<GlobalDeclID, SmallVector<GlobalDeclID, 4>> RelatedDeclsMap;
606 struct PendingUpdateRecord {
614 : D(D), ID(ID), JustLoaded(JustLoaded) {}
621 enum class PendingFakeDefinitionKind { NotFake, Fake, FakeLoaded };
625 llvm::DenseMap<void *, PendingFakeDefinitionKind> PendingFakeDefinitionData;
631 llvm::SmallMapVector<Decl *, FunctionDecl *, 4> PendingExceptionSpecUpdates;
636 llvm::SmallMapVector<FunctionDecl *, QualType, 4> PendingDeducedTypeUpdates;
644 llvm::DenseMap<std::pair<DeclContext *, IdentifierInfo *>, NamedDecl *>
645 ImportedTypedefNamesForLinkage;
649 llvm::DenseMap<Decl*, llvm::SmallVector<NamedDecl*, 2>>
650 AnonymousDeclarationsForMerging;
653 llvm::DenseMap<std::pair<const Decl *, unsigned>, NamedDecl *>
654 LambdaDeclarationsForMerging;
658 using LETemporaryKey = std::pair<Decl *, unsigned>;
661 llvm::DenseMap<LETemporaryKey, LifetimeExtendedTemporaryDecl *>
662 LETemporaryForMerging;
664 struct FileDeclsInfo {
668 FileDeclsInfo() =
default;
671 : Mod(Mod), Decls(Decls) {}
675 llvm::DenseMap<FileID, FileDeclsInfo> FileDeclIDs;
679 using LexicalContents = ArrayRef<serialization::unaligned_decl_id_t>;
682 llvm::DenseMap<const DeclContext*, std::pair<ModuleFile*, LexicalContents>>
686 std::vector<std::pair<ModuleFile*, LexicalContents>> TULexicalDecls;
689 llvm::DenseMap<
const DeclContext *,
690 serialization::reader::DeclContextLookupTable> Lookups;
691 llvm::DenseMap<
const DeclContext *,
692 serialization::reader::ModuleLocalLookupTable>
694 llvm::DenseMap<
const DeclContext *,
695 serialization::reader::DeclContextLookupTable>
698 using SpecLookupTableTy =
699 llvm::DenseMap<
const Decl *,
700 serialization::reader::LazySpecializationInfoLookupTable>;
702 SpecLookupTableTy SpecializationsLookups;
704 SpecLookupTableTy PartialSpecializationsLookups;
706 bool LoadExternalSpecializationsImpl(SpecLookupTableTy &SpecLookups,
708 bool LoadExternalSpecializationsImpl(SpecLookupTableTy &SpecLookups,
710 ArrayRef<TemplateArgument> TemplateArgs);
718 const unsigned char *Data;
720 using DeclContextVisibleUpdates = SmallVector<UpdateData, 1>;
724 llvm::DenseMap<GlobalDeclID, DeclContextVisibleUpdates> PendingVisibleUpdates;
725 llvm::DenseMap<GlobalDeclID, DeclContextVisibleUpdates>
726 PendingModuleLocalVisibleUpdates;
727 llvm::DenseMap<GlobalDeclID, DeclContextVisibleUpdates> TULocalUpdates;
729 using SpecializationsUpdate = SmallVector<UpdateData, 1>;
730 using SpecializationsUpdateMap =
731 llvm::DenseMap<GlobalDeclID, SpecializationsUpdate>;
732 SpecializationsUpdateMap PendingSpecializationsUpdates;
733 SpecializationsUpdateMap PendingPartialSpecializationsUpdates;
737 llvm::SmallPtrSet<Decl *, 4> PendingDefinitions;
739 using PendingBodiesMap =
741 llvm::SmallDenseMap<Decl *, unsigned, 4>,
742 SmallVector<std::pair<Decl *, uint64_t>, 4>>;
745 PendingBodiesMap PendingBodies;
749 llvm::SetVector<NamedDecl *> PendingMergedDefinitionsToDeduplicate;
754 llvm::SmallVector<std::pair<Decl *, Decl *>>
755 PendingWarningForDuplicatedDefsInModuleUnits;
758 bool ReadLexicalDeclContextStorage(
ModuleFile &M,
759 llvm::BitstreamCursor &Cursor,
760 uint64_t Offset, DeclContext *DC);
762 enum class VisibleDeclContextStorageKind {
769 bool ReadVisibleDeclContextStorage(
ModuleFile &M,
770 llvm::BitstreamCursor &Cursor,
771 uint64_t Offset, GlobalDeclID ID,
772 VisibleDeclContextStorageKind VisibleKind);
774 bool ReadSpecializations(
ModuleFile &M, llvm::BitstreamCursor &Cursor,
775 uint64_t Offset, Decl *D,
bool IsPartial);
776 void AddSpecializations(
const Decl *D,
const unsigned char *
Data,
785 std::vector<IdentifierInfo *> IdentifiersLoaded;
793 std::vector<MacroInfo *> MacrosLoaded;
795 using LoadedMacroInfo =
796 std::pair<IdentifierInfo *, serialization::SubmoduleID>;
801 llvm::DenseSet<LoadedMacroInfo> LoadedUndefs;
807 SmallVector<Module *, 2> SubmodulesLoaded;
809 using GlobalSubmoduleMapType =
810 ContinuousRangeMap<serialization::SubmoduleID, ModuleFile *, 4>;
815 GlobalSubmoduleMapType GlobalSubmoduleMap;
818 using HiddenNames = SmallVector<Decl *, 2>;
819 using HiddenNamesMapType = llvm::DenseMap<Module *, HiddenNames>;
823 HiddenNamesMapType HiddenNamesMap;
826 struct UnresolvedModuleRef {
834 enum { Import, Export, Conflict, Affecting } Kind;
840 LLVM_PREFERRED_TYPE(
bool)
841 unsigned IsWildcard : 1;
849 SmallVector<UnresolvedModuleRef, 2> UnresolvedModuleRefs;
856 SmallVector<Selector, 16> SelectorsLoaded;
858 using GlobalSelectorMapType =
859 ContinuousRangeMap<serialization::SelectorID, ModuleFile *, 4>;
863 GlobalSelectorMapType GlobalSelectorMap;
867 llvm::DenseMap<Selector, unsigned> SelectorGeneration;
871 llvm::DenseMap<Selector, bool> SelectorOutOfDate;
873 struct PendingMacroInfo {
878 PendingMacroInfo(
ModuleFile *M, uint32_t MacroDirectivesOffset)
879 : M(M), MacroDirectivesOffset(MacroDirectivesOffset) {}
882 using PendingMacroIDsMap =
883 llvm::MapVector<IdentifierInfo *, SmallVector<PendingMacroInfo, 2>>;
887 PendingMacroIDsMap PendingMacroIDs;
889 using GlobalPreprocessedEntityMapType =
890 ContinuousRangeMap<unsigned, ModuleFile *, 4>;
895 GlobalPreprocessedEntityMapType GlobalPreprocessedEntityMap;
897 using GlobalSkippedRangeMapType =
898 ContinuousRangeMap<unsigned, ModuleFile *, 4>;
902 GlobalSkippedRangeMapType GlobalSkippedRangeMap;
914 SmallVector<GlobalDeclID, 16> EagerlyDeserializedDecls;
919 SmallVector<GlobalDeclID, 16> VTablesToEmit;
926 SmallVector<GlobalDeclID, 16> TentativeDefinitions;
938 SmallVector<VTableUse> VTableUses;
946 struct PendingInstantiation {
950 SmallVector<PendingInstantiation, 64> PendingInstantiations;
960 SmallVector<GlobalDeclID, 16> UnusedFileScopedDecls;
964 SmallVector<GlobalDeclID, 4> DelegatingCtorDecls;
968 SmallVector<serialization::SelectorID, 64> ReferencedSelectorsData;
972 SmallVector<serialization::IdentifierID, 64> WeakUndeclaredIdentifiers;
977 SmallVector<GlobalDeclID, 4> ExtVectorDecls;
988 SmallVector<GlobalDeclID, 16> UnusedLocalTypedefNameCandidates;
992 unsigned ForceHostDeviceDepth = 0;
997 SmallVector<GlobalDeclID, 4> SemaDeclRefs;
1002 SmallVector<serialization::TypeID, 16> SpecialTypes;
1008 SmallVector<GlobalDeclID, 4> CUDASpecialDeclRefs;
1011 SmallVector<uint64_t, 1> FPPragmaOptions;
1014 SourceLocation OptimizeOffPragmaLocation;
1017 int PragmaMSStructState = -1;
1020 int PragmaMSPointersToMembersState = -1;
1021 SourceLocation PointersToMembersPragmaLocation;
1024 std::optional<FPOptionsOverride> FpPragmaCurrentValue;
1025 SourceLocation FpPragmaCurrentLocation;
1026 struct FpPragmaStackEntry {
1027 FPOptionsOverride Value;
1028 SourceLocation Location;
1029 SourceLocation PushLocation;
1030 StringRef SlotLabel;
1032 llvm::SmallVector<FpPragmaStackEntry, 2> FpPragmaStack;
1033 llvm::SmallVector<std::string, 2> FpPragmaStrings;
1036 std::optional<Sema::AlignPackInfo> PragmaAlignPackCurrentValue;
1037 SourceLocation PragmaAlignPackCurrentLocation;
1038 struct PragmaAlignPackStackEntry {
1039 Sema::AlignPackInfo Value;
1040 SourceLocation Location;
1041 SourceLocation PushLocation;
1042 StringRef SlotLabel;
1044 llvm::SmallVector<PragmaAlignPackStackEntry, 2> PragmaAlignPackStack;
1045 llvm::SmallVector<std::string, 2> PragmaAlignPackStrings;
1048 OpenCLOptions OpenCLExtensions;
1051 llvm::DenseMap<const Type *, std::set<std::string>> OpenCLTypeExtMap;
1054 llvm::DenseMap<const Decl *, std::set<std::string>> OpenCLDeclExtMap;
1057 SmallVector<GlobalDeclID, 4> KnownNamespaces;
1061 struct UndefinedButUsedDecl {
1065 SmallVector<UndefinedButUsedDecl, 8> UndefinedButUsed;
1068 SmallVector<uint64_t, 8> DelayedDeleteExprs;
1071 SmallVector<std::pair<ModuleFile *, SmallVector<uint64_t, 1>>, 4>
1072 LateParsedTemplates;
1077 llvm::SmallSetVector<GlobalDeclID, 4> DeclsToCheckForDeferredDiags;
1080 SmallVector<GlobalDeclID> DeclsWithEffectsToVerify;
1083 SmallVector<bool, 3> RISCVVecIntrinsicPragma;
1086 struct ImportedSubmodule {
1088 SourceLocation ImportLoc;
1091 : ID(ID), ImportLoc(ImportLoc) {}
1098 SmallVector<ImportedSubmodule, 2> PendingImportedModules;
1102 SmallVector<ImportedSubmodule, 2> PendingImportedModulesSema;
1107 std::string isysroot;
1114 bool AllowASTWithCompilerErrors;
1118 bool AllowConfigurationMismatch;
1121 bool ValidateSystemInputs;
1124 bool ForceValidateUserInputs;
1127 bool ValidateASTInputFilesContent;
1130 bool UseGlobalIndex;
1133 bool TriedLoadingGlobalIndex =
false;
1136 bool ProcessingUpdateRecords =
false;
1138 using SwitchCaseMapTy = llvm::DenseMap<unsigned, SwitchCase *>;
1144 SwitchCaseMapTy SwitchCaseStmts;
1146 SwitchCaseMapTy *CurrSwitchCaseStmts;
1150 unsigned NumSLocEntriesRead = 0;
1153 unsigned TotalNumSLocEntries = 0;
1157 unsigned NumStatementsRead = 0;
1161 unsigned TotalNumStatements = 0;
1164 unsigned NumMacrosRead = 0;
1167 unsigned TotalNumMacros = 0;
1170 unsigned NumIdentifierLookups = 0;
1173 unsigned NumIdentifierLookupHits = 0;
1176 unsigned NumSelectorsRead = 0;
1179 unsigned NumMethodPoolEntriesRead = 0;
1183 unsigned NumMethodPoolLookups = 0;
1187 unsigned NumMethodPoolHits = 0;
1191 unsigned NumMethodPoolTableLookups = 0;
1195 unsigned NumMethodPoolTableHits = 0;
1198 unsigned TotalNumMethodPoolEntries = 0;
1201 unsigned NumLexicalDeclContextsRead = 0, TotalLexicalDeclContexts = 0;
1204 unsigned NumVisibleDeclContextsRead = 0, TotalVisibleDeclContexts = 0;
1207 unsigned NumModuleLocalVisibleDeclContexts = 0,
1208 TotalModuleLocalVisibleDeclContexts = 0;
1211 unsigned NumTULocalVisibleDeclContexts = 0,
1212 TotalTULocalVisibleDeclContexts = 0;
1215 uint64_t TotalModulesSizeInBits = 0;
1218 unsigned NumCurrentElementsDeserializing = 0;
1224 bool CanPassDeclsToConsumer =
true;
1231 llvm::MapVector<IdentifierInfo *, SmallVector<GlobalDeclID, 4>>
1232 PendingIdentifierInfos;
1236 llvm::SmallMapVector<const IdentifierInfo *, SmallVector<NamedDecl *, 2>, 16>
1237 PendingFakeLookupResults;
1241 llvm::DenseMap<const IdentifierInfo *, unsigned> IdentifierGeneration;
1249 std::deque<Decl *> PotentiallyInterestingDecls;
1254 SmallVector<std::pair<FunctionDecl *, serialization::TypeID>, 16>
1255 PendingDeducedFunctionTypes;
1260 SmallVector<std::pair<VarDecl *, serialization::TypeID>, 16>
1261 PendingDeducedVarTypes;
1266 SmallVector<std::pair<Decl *, uint64_t>, 16> PendingDeclChains;
1270 SmallVector<Decl *, 16> PendingIncompleteDeclChains;
1274 struct PendingDeclContextInfo {
1276 GlobalDeclID SemaDC;
1277 GlobalDeclID LexicalDC;
1285 std::deque<PendingDeclContextInfo> PendingDeclContextInfos;
1287 template <
typename DeclTy>
1288 using DuplicateObjCDecls = std::pair<DeclTy *, DeclTy *>;
1294 llvm::SmallMapVector<DuplicateObjCDecls<ObjCCategoryDecl>,
1295 llvm::SmallVector<DuplicateObjCDecls<ObjCIvarDecl>, 4>,
1297 PendingObjCExtensionIvarRedeclarations;
1302 SmallVector<std::pair<CXXRecordDecl*, Decl*>, 4> PendingAddedClassMembers;
1310 llvm::SmallVector<NamedDecl *, 16> PendingOdrMergeChecks;
1312 using DataPointers =
1313 std::pair<CXXRecordDecl *, struct CXXRecordDecl::DefinitionData *>;
1314 using ObjCInterfaceDataPointers =
1315 std::pair<ObjCInterfaceDecl *,
1316 struct ObjCInterfaceDecl::DefinitionData *>;
1317 using ObjCProtocolDataPointers =
1318 std::pair<ObjCProtocolDecl *, struct ObjCProtocolDecl::DefinitionData *>;
1321 llvm::SmallDenseMap<CXXRecordDecl *, llvm::SmallVector<DataPointers, 2>, 2>
1322 PendingOdrMergeFailures;
1325 llvm::SmallDenseMap<RecordDecl *, llvm::SmallVector<RecordDecl *, 2>, 2>
1326 PendingRecordOdrMergeFailures;
1329 llvm::SmallDenseMap<FunctionDecl *, llvm::SmallVector<FunctionDecl *, 2>, 2>
1330 PendingFunctionOdrMergeFailures;
1333 llvm::SmallDenseMap<EnumDecl *, llvm::SmallVector<EnumDecl *, 2>, 2>
1334 PendingEnumOdrMergeFailures;
1337 llvm::SmallDenseMap<ObjCInterfaceDecl *,
1338 llvm::SmallVector<ObjCInterfaceDataPointers, 2>, 2>
1339 PendingObjCInterfaceOdrMergeFailures;
1342 llvm::SmallDenseMap<ObjCProtocolDecl *,
1343 llvm::SmallVector<ObjCProtocolDataPointers, 2>, 2>
1344 PendingObjCProtocolOdrMergeFailures;
1347 llvm::SmallPtrSet<DeclContext*, 2> DiagnosedOdrMergeFailures;
1351 llvm::SmallPtrSet<ObjCCategoryDecl *, 16> CategoriesDeserialized;
1356 SmallVector<ObjCInterfaceDecl *, 16> ObjCClassesLoaded;
1358 using KeyDeclsMap = llvm::DenseMap<Decl *, SmallVector<GlobalDeclID, 2>>;
1365 KeyDeclsMap KeyDecls;
1370 llvm::DenseMap<DeclContext *, DeclContext *> MergedDeclContexts;
1374 llvm::DenseMap<EnumDecl *, EnumDecl *> EnumDefinitions;
1378 llvm::DenseMap<RecordDecl *, RecordDecl *> RecordDefinitions;
1381 SmallVector<Stmt *, 16> StmtStack;
1385 Read_None, Read_Decl, Read_Type, Read_Stmt
1389 ReadingKind ReadingKind = Read_None;
1392 class ReadingKindTracker {
1394 enum ReadingKind PrevKind;
1397 ReadingKindTracker(
enum ReadingKind newKind,
ASTReader &reader)
1398 : Reader(reader), PrevKind(Reader.ReadingKind) {
1399 Reader.ReadingKind = newKind;
1402 ReadingKindTracker(
const ReadingKindTracker &) =
delete;
1403 ReadingKindTracker &operator=(
const ReadingKindTracker &) =
delete;
1404 ~ReadingKindTracker() { Reader.ReadingKind = PrevKind; }
1408 class ProcessingUpdatesRAIIObj {
1413 ProcessingUpdatesRAIIObj(
ASTReader &reader)
1414 : Reader(reader), PrevState(Reader.ProcessingUpdateRecords) {
1415 Reader.ProcessingUpdateRecords =
true;
1418 ProcessingUpdatesRAIIObj(
const ProcessingUpdatesRAIIObj &) =
delete;
1419 ProcessingUpdatesRAIIObj &
1420 operator=(
const ProcessingUpdatesRAIIObj &) =
delete;
1421 ~ProcessingUpdatesRAIIObj() { Reader.ProcessingUpdateRecords = PrevState; }
1432 std::string SuggestedPredefines;
1434 llvm::DenseMap<const Decl *, bool> DefinitionSource;
1438 llvm::DenseSet<const FunctionDecl *> ThisDeclarationWasADefinitionSet;
1440 bool shouldDisableValidationForFile(
const serialization::ModuleFile &M)
const;
1446 serialization::InputFileInfo getInputFileInfo(
ModuleFile &F,
unsigned ID);
1450 serialization::InputFile getInputFile(
ModuleFile &F,
unsigned ID,
1451 bool Complain =
true);
1454 SmallString<0> PathBuf;
1457 class TemporarilyOwnedStringRef {
1459 llvm::SaveAndRestore<SmallString<0>> UnderlyingBuffer;
1462 TemporarilyOwnedStringRef(StringRef S, SmallString<0> &UnderlyingBuffer)
1463 : String(S), UnderlyingBuffer(UnderlyingBuffer, {}) {}
1466 const StringRef *operator->() const & {
return &String; }
1467 const StringRef &operator*() const & {
return String; }
1470 const StringRef *operator->() && =
delete;
1471 const StringRef &operator*() && =
delete;
1480 static TemporarilyOwnedStringRef
1484 static TemporarilyOwnedStringRef
1504 auto I = KeyDecls.find(D);
1505 if (I == KeyDecls.end() || I->second.empty())
1514 template <
typename Fn>
1520 auto It = KeyDecls.find(
const_cast<Decl*
>(D));
1521 if (It != KeyDecls.end())
1522 for (
auto ID : It->second)
1545 struct ImportedModule {
1553 : Mod(Mod), ImportedBy(ImportedBy), ImportLoc(ImportLoc) {}
1557 SourceLocation ImportLoc,
ModuleFile *ImportedBy,
1558 SmallVectorImpl<ImportedModule> &Loaded,
1559 off_t ExpectedSize, time_t ExpectedModTime,
1560 ASTFileSignature ExpectedSignature,
1561 unsigned ClientLoadCapabilities);
1563 SmallVectorImpl<ImportedModule> &Loaded,
1565 unsigned ClientLoadCapabilities);
1567 ReadOptionsBlock(llvm::BitstreamCursor &Stream, StringRef Filename,
1568 unsigned ClientLoadCapabilities,
1569 bool AllowCompatibleConfigurationMismatch,
1570 ASTReaderListener &Listener,
1571 std::string &SuggestedPredefines);
1578 unsigned ClientLoadCapabilities);
1581 ModuleFile *F, llvm::StringRef StreamData, StringRef Filename,
1582 unsigned ClientLoadCapabilities,
1583 bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
1584 bool ValidateDiagnosticOptions);
1586 llvm::Error ReadASTBlock(
ModuleFile &F,
unsigned ClientLoadCapabilities);
1587 llvm::Error ReadExtensionBlock(
ModuleFile &F);
1588 void ReadModuleOffsetMap(
ModuleFile &F)
const;
1590 llvm::Error ReadSourceManagerBlock(
ModuleFile &F);
1591 SourceLocation getImportLocation(
ModuleFile *F);
1594 unsigned ClientLoadCapabilities);
1595 llvm::Error ReadSubmoduleBlock(
ModuleFile &F,
1596 unsigned ClientLoadCapabilities);
1598 StringRef ModuleFilename,
bool Complain,
1599 ASTReaderListener &Listener,
1600 bool AllowCompatibleDifferences);
1602 StringRef ModuleFilename,
bool Complain,
1603 ASTReaderListener &Listener,
1604 bool AllowCompatibleDifferences);
1606 StringRef ModuleFilename,
bool Complain,
1607 ASTReaderListener &Listener,
1608 bool AllowCompatibleDifferences);
1610 StringRef ModuleFilename,
bool Complain,
1611 ASTReaderListener &Listener);
1612 static bool ParseFileSystemOptions(
const RecordData &
Record,
bool Complain,
1613 ASTReaderListener &Listener);
1615 StringRef ModuleFilename,
bool Complain,
1616 ASTReaderListener &Listener);
1617 static bool ParseHeaderSearchPaths(
const RecordData &
Record,
bool Complain,
1618 ASTReaderListener &Listener);
1620 StringRef ModuleFilename,
bool Complain,
1621 ASTReaderListener &Listener,
1622 std::string &SuggestedPredefines);
1624 struct RecordLocation {
1628 RecordLocation(
ModuleFile *M, uint64_t O) : F(M), Offset(O) {}
1633 void LoadedDecl(
unsigned Index, Decl *D);
1634 Decl *ReadDeclRecord(GlobalDeclID ID);
1635 void markIncompleteDeclChain(Decl *D);
1640 Decl *getMostRecentExistingDecl(Decl *D);
1642 RecordLocation DeclCursorForID(GlobalDeclID ID, SourceLocation &Location);
1643 void loadDeclUpdateRecords(PendingUpdateRecord &
Record);
1644 void loadPendingDeclChain(Decl *D, uint64_t LocalOffset);
1645 void loadObjCCategories(GlobalDeclID ID, ObjCInterfaceDecl *D,
1646 unsigned PreviousGeneration = 0);
1648 RecordLocation getLocalBitOffset(uint64_t GlobalOffset);
1653 unsigned findPreprocessedEntity(SourceLocation Loc,
bool EndsAfter)
const;
1661 unsigned findNextPreprocessedEntity(
1666 std::pair<ModuleFile *, unsigned>
1667 getModulePreprocessedEntity(
unsigned GlobalIndex);
1671 llvm::iterator_range<PreprocessingRecord::iterator>
1672 getModulePreprocessedEntities(
ModuleFile &Mod)
const;
1674 bool canRecoverFromOutOfDate(StringRef ModuleFileName,
1675 unsigned ClientLoadCapabilities);
1679 :
public llvm::iterator_adaptor_base<
1680 ModuleDeclIterator, const serialization::unaligned_decl_id_t *,
1681 std::random_access_iterator_tag, const Decl *, ptrdiff_t,
1682 const Decl *, const Decl *> {
1691 : iterator_adaptor_base(Pos), Reader(Reader), Mod(Mod) {}
1695 return Reader->GetDecl(Reader->getGlobalDeclID(*Mod, ID));
1701 assert(Reader == RHS.Reader && Mod == RHS.Mod);
1706 llvm::iterator_range<ModuleDeclIterator>
1710 bool isConsumerInterestedIn(
Decl *D);
1711 void PassInterestingDeclsToConsumer();
1712 void PassInterestingDeclToConsumer(
Decl *D);
1715 void finishPendingActions();
1716 void diagnoseOdrViolations();
1723 PendingDeclContextInfo Info = { D, SemaDC, LexicalDC };
1724 PendingDeclContextInfos.push_back(Info);
1731 void Error(StringRef Msg)
const;
1732 void Error(
unsigned DiagID, StringRef Arg1 = StringRef(),
1733 StringRef Arg2 = StringRef(), StringRef Arg3 = StringRef())
const;
1734 void Error(llvm::Error &&Err)
const;
1737 unsigned translateGlobalDeclIDToIndex(GlobalDeclID ID)
const;
1741 std::pair<ModuleFile *, unsigned>
1746 std::pair<ModuleFile *, unsigned>
1749 unsigned translatePreprocessedEntityIDToIndex(
1754 std::pair<ModuleFile *, unsigned>
1800 ASTReader(Preprocessor &PP, ModuleCache &ModCache, ASTContext *Context,
1801 const PCHContainerReader &PCHContainerRdr,
1802 const CodeGenOptions &CodeGenOpts,
1803 ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
1804 StringRef isysroot =
"",
1807 bool AllowASTWithCompilerErrors =
false,
1808 bool AllowConfigurationMismatch =
false,
1809 bool ValidateSystemInputs =
false,
1810 bool ForceValidateUserInputs =
true,
1811 bool ValidateASTInputFilesContent =
false,
1812 bool UseGlobalIndex =
true,
1813 std::unique_ptr<llvm::Timer> ReadTimer = {});
1877 unsigned ClientLoadCapabilities,
1902 return std::move(Listener);
1907 this->Listener = std::move(Listener);
1915 L = std::make_unique<ChainedASTReaderListener>(std::move(L),
1916 std::move(Listener));
1917 Listener = std::move(L);
1923 bool Chained =
false;
1928 auto Old = Reader.takeListener();
1931 L = std::make_unique<ChainedASTReaderListener>(std::move(L),
1934 Reader.setListener(std::move(L));
1938 auto New = Reader.takeListener();
1947 bool TakeOwnership =
false);
1951 return DeserializationListener;
1980 std::unique_ptr<llvm::MemoryBuffer> Buffer) {
1981 ModuleMgr.addInMemoryBuffer(
FileName, std::move(Buffer));
2001 return ModuleMgr.getPrimaryModule().OriginalSourceFileName;
2028 bool RequireStrictOptionMatches =
false);
2043 std::pair<unsigned, unsigned>
2061 return TotalNumSLocEntries;
2066 return static_cast<unsigned>(IdentifiersLoaded.size());
2071 return static_cast<unsigned>(MacrosLoaded.size());
2076 return static_cast<unsigned>(TypesLoaded.size());
2081 return static_cast<unsigned>(DeclsLoaded.size());
2086 return static_cast<unsigned>(SubmodulesLoaded.size());
2091 return static_cast<unsigned>(SelectorsLoaded.size());
2098 for (
const auto &M : ModuleMgr)
2099 Result += M.NumPreprocessedEntities;
2117 if (Idx >=
Record.size())
2193 template <
typename T>
2217 uint64_t *StartOfBlockOffset =
nullptr);
2247 llvm::function_ref<
bool(
Decl::Kind)> IsKindWeWant,
2316 llvm::MapVector<NamedDecl *, SourceLocation> &
Undefined)
override;
2343 SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs)
override;
2352 llvm::MapVector<
const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
2372 llvm::function_ref<
void()> Fn);
2419 unsigned LocalID)
const;
2460 unsigned LocalID)
const;
2474 std::pair<SourceLocation, unsigned>
2482 ReadModuleOffsetMap(MF);
2488 assert(!SourceMgr.isLoadedSourceLocation(Loc) &&
2489 "Run out source location space");
2519 unsigned &Idx)
const {
2525 assert(FID.ID >= 0 &&
"Reading non-local FileID.");
2536 const StringRef Blob);
2550 unsigned &Idx, StringRef &Blob);
2566 assert(ReadingKind == Read_Stmt &&
2567 "Should be called only during statement reading!");
2570 assert(!StmtStack.empty() &&
"Read too many sub-statements!");
2571 return StmtStack.pop_back_val();
2595 uint32_t MacroDirectivesOffset);
2611 assert(ContextObj &&
"requested AST context when not loading AST");
2658 bool IncludeSystem,
bool Complain,
2660 bool isSystem)> Visitor);
2673 constexpr static uint32_t BitsIndexUpbound = 32;
2685 CurrentBitsIndex = 0;
2688 void advance(uint32_t BitsWidth) { CurrentBitsIndex += BitsWidth; }
2692 return Value & (1 << CurrentBitsIndex++);
2697 assert(Width < BitsIndexUpbound);
2698 uint32_t Ret = (Value >> CurrentBitsIndex) & ((1 << Width) - 1);
2699 CurrentBitsIndex += Width;
2704 return CurrentBitsIndex + Width < BitsIndexUpbound;
2708 bool isValid()
const {
return CurrentBitsIndex < BitsIndexUpbound; }
2711 uint32_t CurrentBitsIndex = ~0;
Defines the Diagnostic-related interfaces.
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
static DiagnosticBuilder Diag(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, unsigned DiagID)
Produce a diagnostic highlighting some portion of a literal.
llvm::MachO::Record Record
Defines the clang::OpenCLOptions class.
Defines the clang::SourceLocation class and associated facilities.
Defines a utilitiy for warning once when close to out of stack space.
C Language Family Type Representation.
Defines version macros and version-related utility functions for Clang.
ASTConsumer - This is an abstract interface that should be implemented by clients that read ASTs.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
const LangOptions & getLangOpts() const
Abstract interface for callback invocations by the ASTReader.
virtual void ReadModuleMapFile(StringRef ModuleMapPath)
virtual bool needsInputFileVisitation()
Returns true if this ASTReaderListener wants to receive the input files of the AST file via visitInpu...
virtual bool ReadDiagnosticOptions(DiagnosticOptions &DiagOpts, StringRef ModuleFilename, bool Complain)
Receives the diagnostic options.
virtual bool ReadTargetOptions(const TargetOptions &TargetOpts, StringRef ModuleFilename, bool Complain, bool AllowCompatibleDifferences)
Receives the target options.
virtual bool visitInputFile(StringRef Filename, bool isSystem, bool isOverridden, bool isExplicitModule)
if needsInputFileVisitation returns true, this is called for each non-system input file of the AST Fi...
virtual bool ReadHeaderSearchPaths(const HeaderSearchOptions &HSOpts, bool Complain)
Receives the header search paths.
virtual bool ReadFileSystemOptions(const FileSystemOptions &FSOpts, bool Complain)
Receives the file system options.
virtual bool visitInputFileAsRequested(StringRef FilenameAsRequested, StringRef Filename, bool isSystem, bool isOverridden, bool isExplicitModule)
Similiar to member function of visitInputFile but should be defined when there is a distinction betwe...
virtual ~ASTReaderListener()
virtual bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts, StringRef ModuleFilename, bool ReadMacros, bool Complain, std::string &SuggestedPredefines)
Receives the preprocessor options.
virtual bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts, StringRef ModuleFilename, StringRef SpecificModuleCachePath, bool Complain)
Receives the header search options.
virtual void readModuleFileExtension(const ModuleFileExtensionMetadata &Metadata)
Indicates that a particular module file extension has been read.
virtual bool ReadLanguageOptions(const LangOptions &LangOpts, StringRef ModuleFilename, bool Complain, bool AllowCompatibleDifferences)
Receives the language options.
virtual void visitImport(StringRef ModuleName, StringRef Filename)
If needsImportVisitation returns true, this is called for each AST file imported by this AST file.
virtual void visitModuleFile(StringRef Filename, serialization::ModuleKind Kind)
This is called for each AST file loaded.
virtual bool needsImportVisitation() const
Returns true if this ASTReaderListener wants to receive the imports of the AST file via visitImport,...
virtual bool ReadFullVersionInformation(StringRef FullVersion)
Receives the full Clang version information.
virtual void ReadModuleName(StringRef ModuleName)
virtual void ReadCounter(const serialization::ModuleFile &M, uint32_t Value)
Receives COUNTER value.
virtual bool needsSystemInputFileVisitation()
Returns true if this ASTReaderListener wants to receive the system input files of the AST file via vi...
virtual bool ReadCodeGenOptions(const CodeGenOptions &CGOpts, StringRef ModuleFilename, bool Complain, bool AllowCompatibleDifferences)
Receives the codegen options.
ListenerScope(ASTReader &Reader, std::unique_ptr< ASTReaderListener > L)
value_type operator*() const
value_type operator->() const
bool operator==(const ModuleDeclIterator &RHS) const
ModuleDeclIterator(ASTReader *Reader, ModuleFile *Mod, const serialization::unaligned_decl_id_t *Pos)
Reads an AST files chain containing the contents of a translation unit.
std::optional< bool > isPreprocessedEntityInFileID(unsigned Index, FileID FID) override
Optionally returns true or false if the preallocated preprocessed entity with index Index came from f...
PreprocessedEntity * ReadPreprocessedEntity(unsigned Index) override
Read a preallocated preprocessed entity from the external source.
void markIdentifierUpToDate(const IdentifierInfo *II)
Note that this identifier is up-to-date.
void visitTopLevelModuleMaps(serialization::ModuleFile &MF, llvm::function_ref< void(FileEntryRef)> Visitor)
Visit all the top-level module maps loaded when building the given module file.
void setDeserializationListener(ASTDeserializationListener *Listener, bool TakeOwnership=false)
Set the AST deserialization listener.
SmallVectorImpl< uint64_t > RecordDataImpl
serialization::SubmoduleID getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) const
Retrieve the global submodule ID given a module and its local ID number.
ExtKind hasExternalDefinitions(const Decl *D) override
IdentifierTable & getIdentifierTable()
Retrieve the identifier table associated with the preprocessor.
SourceLocationEncoding::RawLocEncoding RawLocEncoding
ModuleManager & getModuleManager()
Retrieve the module manager.
ASTReader & operator=(const ASTReader &)=delete
bool isDeclIDFromModule(GlobalDeclID ID, ModuleFile &M) const
Returns true if global DeclID ID originated from module M.
friend class ASTIdentifierIterator
bool ReadSLocEntry(int ID) override
Read the source location entry with index ID.
void RecordSwitchCaseID(SwitchCase *SC, unsigned ID)
Record that the given ID maps to the given switch-case statement.
DiagnosticBuilder Diag(unsigned DiagID) const
Report a diagnostic.
unsigned getTotalNumPreprocessedEntities() const
Returns the number of preprocessed entities known to the AST reader.
ASTContext & getContext()
Retrieve the AST context that this AST reader supplements.
Decl * ReadDecl(ModuleFile &F, const RecordDataImpl &R, unsigned &I)
Reads a declaration from the given position in a record in the given module.
ModuleManager::ModuleIterator ModuleIterator
static std::string ReadString(const RecordDataImpl &Record, unsigned &Idx)
void ReadDeclsToCheckForDeferredDiags(llvm::SmallSetVector< Decl *, 4 > &Decls) override
Read the set of decls to be checked for deferred diags.
void InitializeSema(Sema &S) override
Initialize the semantic source with the Sema instance being used to perform semantic analysis on the ...
LoadFailureCapabilities
Flags that indicate what kind of AST loading failures the client of the AST reader can directly handl...
@ ARR_Missing
The client can handle an AST file that cannot load because it is missing.
@ ARR_None
The client can't handle any AST loading failures.
@ ARR_ConfigurationMismatch
The client can handle an AST file that cannot load because it's compiled configuration doesn't match ...
@ ARR_OutOfDate
The client can handle an AST file that cannot load because it is out-of-date relative to its input fi...
@ ARR_TreatModuleWithErrorsAsOutOfDate
If a module file is marked with errors treat it as out-of-date so the caller can rebuild it.
@ ARR_VersionMismatch
The client can handle an AST file that cannot load because it was built with a different version of C...
void ReadMismatchingDeleteExpressions(llvm::MapVector< FieldDecl *, llvm::SmallVector< std::pair< SourceLocation, bool >, 4 > > &Exprs) override
void FindFileRegionDecls(FileID File, unsigned Offset, unsigned Length, SmallVectorImpl< Decl * > &Decls) override
Get the decls that are contained in a file in the Offset/Length range.
std::string ReadPathBlob(StringRef BaseDirectory, const RecordData &Record, unsigned &Idx, StringRef &Blob)
SourceRange ReadSkippedRange(unsigned Index) override
Read a preallocated skipped range from the external source.
serialization::TypeID getGlobalTypeID(ModuleFile &F, serialization::LocalTypeID LocalID) const
Map a local type ID within a given AST file into a global type ID.
const std::string & getSuggestedPredefines()
Returns the suggested contents of the predefines buffer, which contains a (typically-empty) subset of...
void dump()
Dump information about the AST reader to standard error.
MacroInfo * ReadMacroRecord(ModuleFile &F, uint64_t Offset)
Reads the macro record located at the given offset.
SmallVector< std::pair< llvm::BitstreamCursor, serialization::ModuleFile * >, 8 > CommentsCursors
Cursors for comments blocks.
Selector getLocalSelector(ModuleFile &M, unsigned LocalID)
Retrieve a selector from the given module with its local ID number.
void FindExternalLexicalDecls(const DeclContext *DC, llvm::function_ref< bool(Decl::Kind)> IsKindWeWant, SmallVectorImpl< Decl * > &Decls) override
Read all of the declarations lexically stored in a declaration context.
ModuleFile * getOwningModuleFile(const Decl *D) const
Retrieve the module file that owns the given declaration, or NULL if the declaration is not from a mo...
std::optional< ASTSourceDescriptor > getSourceDescriptor(unsigned ID) override
Return a descriptor for the corresponding module.
const serialization::reader::DeclContextLookupTable * getLoadedLookupTables(DeclContext *Primary) const
Get the loaded lookup tables for Primary, if any.
T * ReadDeclAs(ModuleFile &F, const RecordDataImpl &R, unsigned &I)
Reads a declaration from the given position in a record in the given module.
QualType getLocalType(ModuleFile &F, serialization::LocalTypeID LocalID)
Resolve a local type ID within a given AST file into a type.
void ClearSwitchCaseIDs()
Sema::AlignPackInfo ReadAlignPackInfo(uint32_t Raw) const
Read a AlignPackInfo from raw form.
QualType readType(ModuleFile &F, const RecordData &Record, unsigned &Idx)
Read a type from the current position in the given record, which was read from the given AST file.
void SetGloballyVisibleDecls(IdentifierInfo *II, const SmallVectorImpl< GlobalDeclID > &DeclIDs, SmallVectorImpl< Decl * > *Decls=nullptr)
Set the globally-visible declarations associated with the given identifier.
serialization::ModuleKind ModuleKind
bool loadGlobalIndex()
Attempts to load the global index.
void ReadComments() override
Loads comments ranges.
SourceManager & getSourceManager() const
const serialization::reader::ModuleLocalLookupTable * getModuleLocalLookupTables(DeclContext *Primary) const
SourceLocation getSourceLocationForDeclID(GlobalDeclID ID)
Returns the source location for the decl ID.
const CodeGenOptions & getCodeGenOpts() const
void makeModuleVisible(Module *Mod, Module::NameVisibilityKind NameVisibility, SourceLocation ImportLoc)
Make the entities in the given module and any of its (non-explicit) submodules visible to name lookup...
unsigned getTotalNumSubmodules() const
Returns the number of submodules known.
ASTReader(const ASTReader &)=delete
SourceRange ReadSourceRange(ModuleFile &F, const RecordData &Record, unsigned &Idx)
Read a source range.
bool LoadExternalSpecializations(const Decl *D, bool OnlyPartial) override
Load all the external specializations for the Decl.
void finalizeForWriting()
Finalizes the AST reader's state before writing an AST file to disk.
Sema * getSema()
Retrieve the semantic analysis object used to analyze the translation unit in which the precompiled h...
static std::string ResolveImportedPathAndAllocate(SmallString< 0 > &Buf, StringRef Path, ModuleFile &ModF)
Resolve Path in the context of module file M.
friend class ASTDeclMerger
Types of AST files.
static StringRef ReadStringBlob(const RecordDataImpl &Record, unsigned &Idx, StringRef &Blob)
unsigned getTotalNumIdentifiers() const
Returns the number of identifiers found in the chain.
CXXCtorInitializer ** GetExternalCXXCtorInitializers(uint64_t Offset) override
Read the contents of a CXXCtorInitializer array.
void visitInputFileInfos(serialization::ModuleFile &MF, bool IncludeSystem, llvm::function_ref< void(const serialization::InputFileInfo &IFI, bool IsSystem)> Visitor)
Visit all the input file infos of the given module file.
const ModuleManager & getModuleManager() const
unsigned getTotalNumSLocs() const
Returns the number of source locations found in the chain.
void StartTranslationUnit(ASTConsumer *Consumer) override
Function that will be invoked when we begin parsing a new translation unit involving this external AS...
LocalDeclID mapGlobalIDToModuleFileGlobalID(ModuleFile &M, GlobalDeclID GlobalID)
Map a global declaration ID into the declaration ID used to refer to this declaration within the give...
void resolvePendingMacro(IdentifierInfo *II, const PendingMacroInfo &PMInfo)
void ReadTentativeDefinitions(SmallVectorImpl< VarDecl * > &TentativeDefs) override
Read the set of tentative definitions known to the external Sema source.
Decl * GetExternalDecl(GlobalDeclID ID) override
Resolve a declaration ID into a declaration, potentially building a new declaration.
serialization::MacroID ReadMacroID(ModuleFile &F, const RecordDataImpl &Record, unsigned &Idx)
Reads a macro ID from the given position in a record in the given module.
GlobalDeclID ReadDeclID(ModuleFile &F, const RecordDataImpl &Record, unsigned &Idx)
Reads a declaration ID from the given position in a record in the given module.
llvm::Expected< SourceLocation::UIntTy > readSLocOffset(ModuleFile *F, unsigned Index)
Try to read the offset of the SLocEntry at the given index in the given module file.
void forEachImportedKeyDecl(const Decl *D, Fn Visit)
Run a callback on each imported key declaration of D.
bool haveUnloadedSpecializations(const Decl *D) const
If we have any unloaded specialization for D.
friend class TypeLocReader
friend class PCHValidator
Stmt * ReadSubStmt()
Reads a sub-statement operand during statement reading.
void CompleteRedeclChain(const Decl *D) override
If any redeclarations of D have been imported since it was last checked, this digs out those redeclar...
Expr * ReadSubExpr()
Reads a sub-expression operand during statement reading.
SourceLocation TranslateSourceLocation(ModuleFile &ModuleFile, SourceLocation Loc) const
Translate a source location from another module file's source location space into ours.
static llvm::Error ReadBlockAbbrevs(llvm::BitstreamCursor &Cursor, unsigned BlockID, uint64_t *StartOfBlockOffset=nullptr)
ReadBlockAbbrevs - Enter a subblock of the specified BlockID with the specified cursor.
void SetIdentifierInfo(serialization::IdentifierID ID, IdentifierInfo *II)
std::pair< unsigned, unsigned > findPreprocessedEntitiesInRange(SourceRange Range) override
Returns a pair of [Begin, End) indices of preallocated preprocessed entities that Range encompasses.
IdentifierInfo * get(StringRef Name) override
Retrieve the IdentifierInfo for the named identifier.
IdentifierInfo * getLocalIdentifier(ModuleFile &M, uint64_t LocalID)
void visitInputFiles(serialization::ModuleFile &MF, bool IncludeSystem, bool Complain, llvm::function_ref< void(const serialization::InputFile &IF, bool isSystem)> Visitor)
Visit all the input files of the given module file.
Module * getModule(unsigned ID) override
Retrieve the module that corresponds to the given module ID.
friend class ASTDeclReader
static bool isAcceptableASTFile(StringRef Filename, FileManager &FileMgr, const ModuleCache &ModCache, const PCHContainerReader &PCHContainerRdr, const LangOptions &LangOpts, const CodeGenOptions &CGOpts, const TargetOptions &TargetOpts, const PreprocessorOptions &PPOpts, StringRef ExistingModuleCachePath, bool RequireStrictOptionMatches=false)
Determine whether the given AST file is acceptable to load into a translation unit with the given lan...
llvm::iterator_range< ModuleDeclIterator > getModuleFileLevelDecls(ModuleFile &Mod)
Stmt * GetExternalDeclStmt(uint64_t Offset) override
Resolve the offset of a statement into a statement.
Selector GetExternalSelector(serialization::SelectorID ID) override
Resolve a selector ID into a selector.
unsigned getTotalNumSelectors() const
Returns the number of selectors found in the chain.
MacroInfo * getMacro(serialization::MacroID ID)
Retrieve the macro with the given ID.
void ReadUndefinedButUsed(llvm::MapVector< NamedDecl *, SourceLocation > &Undefined) override
Load the set of used but not defined functions or variables with internal linkage,...
void ReadDelegatingConstructors(SmallVectorImpl< CXXConstructorDecl * > &Decls) override
Read the set of delegating constructors known to the external Sema source.
unsigned getTotalNumTypes() const
Returns the number of types found in the chain.
QualType GetType(serialization::TypeID ID)
Resolve a type ID into a type, potentially building a new type.
void addPendingMacro(IdentifierInfo *II, ModuleFile *M, uint32_t MacroDirectivesOffset)
Add a macro to deserialize its macro directive history.
GlobalDeclID getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const
Map from a local declaration ID within a given module to a global declaration ID.
Expr * ReadExpr(ModuleFile &F)
Reads an expression.
void ReadWeakUndeclaredIdentifiers(SmallVectorImpl< std::pair< IdentifierInfo *, WeakInfo > > &WeakIDs) override
Read the set of weak, undeclared identifiers known to the external Sema source.
void completeVisibleDeclsMap(const DeclContext *DC) override
Load all external visible decls in the given DeclContext.
void AssignedLambdaNumbering(CXXRecordDecl *Lambda) override
Notify the external source that a lambda was assigned a mangling number.
void ReadUnusedLocalTypedefNameCandidates(llvm::SmallSetVector< const TypedefNameDecl *, 4 > &Decls) override
Read the set of potentially unused typedefs known to the source.
IdentifierResolver & getIdResolver()
Get the identifier resolver used for name lookup / updates in the translation unit scope.
static bool readASTFileControlBlock(StringRef Filename, FileManager &FileMgr, const ModuleCache &ModCache, const PCHContainerReader &PCHContainerRdr, bool FindModuleFileExtensions, ASTReaderListener &Listener, bool ValidateDiagnosticOptions, unsigned ClientLoadCapabilities=ARR_ConfigurationMismatch|ARR_OutOfDate)
Read the control block for the named AST file.
void ReadExtVectorDecls(SmallVectorImpl< TypedefNameDecl * > &Decls) override
Read the set of ext_vector type declarations known to the external Sema source.
SmallVector< GlobalDeclID, 16 > PreloadedDeclIDs
std::pair< SourceLocation, StringRef > getModuleImportLoc(int ID) override
Retrieve the module import location and module name for the given source manager entry ID.
void ReadUnusedFileScopedDecls(SmallVectorImpl< const DeclaratorDecl * > &Decls) override
Read the set of unused file-scope declarations known to the external Sema source.
void ReadReferencedSelectors(SmallVectorImpl< std::pair< Selector, SourceLocation > > &Sels) override
Read the set of referenced selectors known to the external Sema source.
Selector DecodeSelector(serialization::SelectorID Idx)
ASTReadResult ReadAST(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, unsigned ClientLoadCapabilities, ModuleFile **NewLoadedModuleFile=nullptr)
Load the AST file designated by the given file name.
StringRef getOriginalSourceFile()
Retrieve the name of the original source file name for the primary module file.
std::string ReadPath(ModuleFile &F, const RecordData &Record, unsigned &Idx)
ASTDeserializationListener * getDeserializationListener()
Get the AST deserialization listener.
void addListener(std::unique_ptr< ASTReaderListener > L)
Add an AST callback listener.
unsigned getModuleFileID(ModuleFile *M)
Get an ID for the given module file.
Decl * getKeyDeclaration(Decl *D)
Returns the first key declaration for the given declaration.
bool FindExternalVisibleDeclsByName(const DeclContext *DC, DeclarationName Name, const DeclContext *OriginalDC) override
Finds all the visible declarations with a given name.
void setListener(std::unique_ptr< ASTReaderListener > Listener)
Set the AST callbacks listener.
Selector ReadSelector(ModuleFile &M, const RecordData &Record, unsigned &Idx)
ModuleManager::ModuleReverseIterator ModuleReverseIterator
IdentifierInfo * DecodeIdentifierInfo(serialization::IdentifierID ID)
ASTReadResult
The result of reading the control block of an AST file, which can fail for various reasons.
@ Success
The control block was read successfully.
@ ConfigurationMismatch
The AST file was written with a different language/target configuration.
@ OutOfDate
The AST file is out-of-date relative to its input files, and needs to be regenerated.
@ Failure
The AST file itself appears corrupted.
@ VersionMismatch
The AST file was written by a different version of Clang.
@ HadErrors
The AST file has errors.
@ Missing
The AST file was missing.
void addInMemoryBuffer(StringRef &FileName, std::unique_ptr< llvm::MemoryBuffer > Buffer)
Add in-memory (virtual file) buffer.
static VersionTuple ReadVersionTuple(const RecordData &Record, unsigned &Idx)
Read a version tuple.
SmallString< 0 > & getPathBuf()
Get the buffer for resolving paths.
Token ReadToken(ModuleFile &M, const RecordDataImpl &Record, unsigned &Idx)
Reads a token out of a record.
SwitchCase * getSwitchCaseWithID(unsigned ID)
Retrieve the switch-case statement with the given ID.
serialization::IdentifierID getGlobalIdentifierID(ModuleFile &M, uint64_t LocalID)
FileID TranslateFileID(ModuleFile &F, FileID FID) const
Translate a FileID from another module file's FileID space into ours.
void ReadLateParsedTemplates(llvm::MapVector< const FunctionDecl *, std::unique_ptr< LateParsedTemplate > > &LPTMap) override
Read the set of late parsed template functions for this source.
IdentifierIterator * getIdentifiers() override
Retrieve an iterator into the set of all identifiers in all loaded AST files.
serialization::ModuleManager ModuleManager
void ReadUsedVTables(SmallVectorImpl< ExternalVTableUse > &VTables) override
Read the set of used vtables known to the external Sema source.
bool isGlobalIndexUnavailable() const
Determine whether we tried to load the global index, but failed, e.g., because it is out-of-date or d...
uint32_t GetNumExternalSelectors() override
Returns the number of selectors known to the external AST source.
static TemporarilyOwnedStringRef ResolveImportedPath(SmallString< 0 > &Buf, StringRef Path, ModuleFile &ModF)
Resolve Path in the context of module file M.
void updateOutOfDateSelector(Selector Sel) override
Load the contents of the global method pool for a given selector if necessary.
Decl * GetExistingDecl(GlobalDeclID ID)
Resolve a declaration ID into a declaration.
Stmt * ReadStmt(ModuleFile &F)
Reads a statement.
static llvm::BitVector ReadBitVector(const RecordData &Record, const StringRef Blob)
ModuleFile * getLocalModuleFile(ModuleFile &M, unsigned ID) const
Retrieve the module file with a given local ID within the specified ModuleFile.
SourceLocation ReadSourceLocation(ModuleFile &ModuleFile, const RecordDataImpl &Record, unsigned &Idx)
Read a source location.
ASTReader(Preprocessor &PP, ModuleCache &ModCache, ASTContext *Context, const PCHContainerReader &PCHContainerRdr, const CodeGenOptions &CodeGenOpts, ArrayRef< std::shared_ptr< ModuleFileExtension > > Extensions, StringRef isysroot="", DisableValidationForModuleKind DisableValidationKind=DisableValidationForModuleKind::None, bool AllowASTWithCompilerErrors=false, bool AllowConfigurationMismatch=false, bool ValidateSystemInputs=false, bool ForceValidateUserInputs=true, bool ValidateASTInputFilesContent=false, bool UseGlobalIndex=true, std::unique_ptr< llvm::Timer > ReadTimer={})
Load the AST file and validate its contents against the given Preprocessor.
void ForgetSema() override
Inform the semantic consumer that Sema is no longer available.
DiagnosticsEngine & getDiags() const
void LoadSelector(Selector Sel)
Load a selector from disk, registering its ID if it exists.
void ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag)
void makeNamesVisible(const HiddenNames &Names, Module *Owner)
Make the names within this set of hidden names visible.
void UpdateSema()
Update the state of Sema after loading some additional modules.
Decl * GetDecl(GlobalDeclID ID)
Resolve a declaration ID into a declaration, potentially building a new declaration.
Decl * GetLocalDecl(ModuleFile &F, LocalDeclID LocalID)
Reads a declaration with the given local ID in the given module.
bool isProcessingUpdateRecords()
T * GetLocalDeclAs(ModuleFile &F, LocalDeclID LocalID)
Reads a declaration with the given local ID in the given module.
int getSLocEntryID(SourceLocation::UIntTy SLocOffset) override
Get the index ID for the loaded SourceLocation offset.
SourceLocation ReadSourceLocation(ModuleFile &MF, RawLocEncoding Raw) const
Read a source location from raw form.
void ReadPendingInstantiations(SmallVectorImpl< std::pair< ValueDecl *, SourceLocation > > &Pending) override
Read the set of pending instantiations known to the external Sema source.
Preprocessor & getPreprocessor() const
Retrieve the preprocessor.
serialization::reader::LazySpecializationInfoLookupTable * getLoadedSpecializationsLookupTables(const Decl *D, bool IsPartial)
Get the loaded specializations lookup tables for D, if any.
CXXTemporary * ReadCXXTemporary(ModuleFile &F, const RecordData &Record, unsigned &Idx)
void ReadKnownNamespaces(SmallVectorImpl< NamespaceDecl * > &Namespaces) override
Load the set of namespaces that are known to the external source, which will be used during typo corr...
const Decl * getKeyDeclaration(const Decl *D)
ModuleManager::ModuleConstIterator ModuleConstIterator
std::pair< SourceLocation, unsigned > ReadUntranslatedSourceLocation(RawLocEncoding Raw) const
Read a source location from raw form and return it in its originating module file's source location s...
Module * getSubmodule(serialization::SubmoduleID GlobalID)
Retrieve the submodule that corresponds to a global submodule ID.
void PrintStats() override
Print some statistics about AST usage.
void mergeDefinitionVisibility(NamedDecl *Def, NamedDecl *MergedDef)
Note that MergedDef is a redefinition of the canonical definition Def, so Def should be visible whene...
serialization::SelectorID getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const
Retrieve the global selector ID that corresponds to this the local selector ID in a given module.
void runWithSufficientStackSpace(SourceLocation Loc, llvm::function_ref< void()> Fn)
friend class ASTRecordReader
SmallVector< uint64_t, 64 > RecordData
unsigned getTotalNumMacros() const
Returns the number of macros found in the chain.
FileID ReadFileID(ModuleFile &F, const RecordDataImpl &Record, unsigned &Idx) const
Read a FileID.
void StartedDeserializing() override
Notify ASTReader that we started deserialization of a decl or type so until FinishedDeserializing is ...
serialization::MacroID getGlobalMacroID(ModuleFile &M, serialization::MacroID LocalID)
Retrieve the global macro ID corresponding to the given local ID within the given module file.
void ReadMethodPool(Selector Sel) override
Load the contents of the global method pool for a given selector.
void InitializeContext()
Initializes the ASTContext.
CXXBaseSpecifier * GetExternalCXXBaseSpecifiers(uint64_t Offset) override
Resolve the offset of a set of C++ base specifiers in the decl stream into an array of specifiers.
std::unique_ptr< ASTReaderListener > takeListener()
Take the AST callbacks listener.
const serialization::reader::DeclContextLookupTable * getTULocalLookupTables(DeclContext *Primary) const
void resetForReload()
Reset reader for a reload try.
FileManager & getFileManager() const
unsigned getTotalNumDecls() const
Returns the number of declarations found in the chain.
bool wasThisDeclarationADefinition(const FunctionDecl *FD) override
True if this function declaration was a definition before in its own module.
void FinishedDeserializing() override
Notify ASTReader that we finished the deserialization of a decl or type.
IdentifierInfo * readIdentifier(ModuleFile &M, const RecordData &Record, unsigned &Idx)
void updateOutOfDateIdentifier(const IdentifierInfo &II) override
Update an out-of-date identifier.
void ReadDefinedMacros() override
Read the set of macros defined by this external macro source.
GlobalModuleIndex * getGlobalIndex()
Return global module index.
IdentifierInfo * GetIdentifier(serialization::IdentifierID ID) override
Return the identifier associated with the given ID number.
HeaderFileInfo GetHeaderFileInfo(FileEntryRef FE) override
Read the header file information for the given file entry.
serialization::ModuleFile ModuleFile
bool hasGlobalIndex() const
Determine whether this AST reader has a global index.
serialization::PreprocessedEntityID getGlobalPreprocessedEntityID(ModuleFile &M, serialization::PreprocessedEntityID LocalID) const
Determine the global preprocessed entity ID that corresponds to the given local ID within the given m...
An object for streaming information from a record.
BitsUnpacker operator=(const BitsUnpacker &)=delete
uint32_t getNextBits(uint32_t Width)
void advance(uint32_t BitsWidth)
bool canGetNextNBits(uint32_t Width) const
BitsUnpacker(BitsUnpacker &&)=delete
BitsUnpacker(const BitsUnpacker &)=delete
void updateValue(uint32_t V)
BitsUnpacker operator=(BitsUnpacker &&)=delete
Represents a base class of a C++ class.
Represents a C++ base or member initializer.
Represents a C++ struct/union/class.
Represents a C++ temporary.
Simple wrapper class for chaining listeners.
void ReadCounter(const serialization::ModuleFile &M, uint32_t Value) override
Receives COUNTER value.
bool visitInputFile(StringRef Filename, bool isSystem, bool isOverridden, bool isExplicitModule) override
if needsInputFileVisitation returns true, this is called for each non-system input file of the AST Fi...
bool ReadCodeGenOptions(const CodeGenOptions &CGOpts, StringRef ModuleFilename, bool Complain, bool AllowCompatibleDifferences) override
Receives the codegen options.
std::unique_ptr< ASTReaderListener > takeSecond()
bool ReadFullVersionInformation(StringRef FullVersion) override
Receives the full Clang version information.
bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts, StringRef ModuleFilename, StringRef SpecificModuleCachePath, bool Complain) override
Receives the header search options.
bool ReadFileSystemOptions(const FileSystemOptions &FSOpts, bool Complain) override
Receives the file system options.
std::unique_ptr< ASTReaderListener > takeFirst()
void ReadModuleMapFile(StringRef ModuleMapPath) override
bool ReadLanguageOptions(const LangOptions &LangOpts, StringRef ModuleFilename, bool Complain, bool AllowCompatibleDifferences) override
Receives the language options.
bool ReadTargetOptions(const TargetOptions &TargetOpts, StringRef ModuleFilename, bool Complain, bool AllowCompatibleDifferences) override
Receives the target options.
void ReadModuleName(StringRef ModuleName) override
bool needsInputFileVisitation() override
Returns true if this ASTReaderListener wants to receive the input files of the AST file via visitInpu...
bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts, StringRef ModuleFilename, bool ReadMacros, bool Complain, std::string &SuggestedPredefines) override
Receives the preprocessor options.
ChainedASTReaderListener(std::unique_ptr< ASTReaderListener > First, std::unique_ptr< ASTReaderListener > Second)
Takes ownership of First and Second.
void readModuleFileExtension(const ModuleFileExtensionMetadata &Metadata) override
Indicates that a particular module file extension has been read.
void visitModuleFile(StringRef Filename, serialization::ModuleKind Kind) override
This is called for each AST file loaded.
bool needsSystemInputFileVisitation() override
Returns true if this ASTReaderListener wants to receive the system input files of the AST file via vi...
bool ReadDiagnosticOptions(DiagnosticOptions &DiagOpts, StringRef ModuleFilename, bool Complain) override
Receives the diagnostic options.
CodeGenOptions - Track various options which control how the code is optimized and passed to the back...
A map from continuous integer ranges to some value, with a very specialized interface.
typename Representation::const_iterator const_iterator
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
Decl - This represents one declaration (or definition), e.g.
bool isFromGlobalModule() const
Whether this declaration comes from global module.
ASTContext & getASTContext() const LLVM_READONLY
Kind
Lists the kind of concrete classes of Decl.
bool isFromASTFile() const
Determine whether this declaration came from an AST file (such as a precompiled header or module) rat...
bool isFromHeaderUnit() const
Whether this declaration comes from a header unit.
virtual Decl * getCanonicalDecl()
Retrieves the "canonical" declaration of the given declaration.
The name of a declaration.
Represents a ValueDecl that came out of a declarator.
A little helper class used to produce diagnostics.
Options for controlling the compiler diagnostics engine.
Concrete class used by the front-end to report problems and issues.
This represents one expression.
RAII class for safely pairing a StartedDeserializing call with FinishedDeserializing.
MemoryBufferSizes getMemoryBufferSizes() const
Return the amount of memory used by memory buffers, breaking down by heap-backed versus mmap'ed memor...
An abstract class that should be subclassed by any external source of preprocessing record entries.
Abstract interface for external sources of preprocessor information.
External source of source location entries.
ExternalSemaSource()=default
Represents a member of a struct/union/class.
A reference to a FileEntry that includes the name of the file as it was accessed by the FileManager's...
Cached information about one file (either on disk or in the virtual file system).
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
Implements support for file system lookup, file system caching, and directory search management.
Keeps track of options that affect how file operations are performed.
Represents a function declaration or definition.
A global index for a set of module files, providing information about the identifiers within those mo...
Provides lookups to, and iteration over, IdentiferInfo objects.
One of these records is kept for each identifier that is lexed.
An iterator that walks over all of the known identifiers in the lookup table.
IdentifierResolver - Keeps track of shadowed decls on enclosing scopes.
Implements an efficient mapping from strings to IdentifierInfo nodes.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
static LocalDeclID get(ASTReader &Reader, serialization::ModuleFile &MF, DeclID ID)
Encapsulates the data about a macro definition (e.g.
The module cache used for compiling modules implicitly.
Describes a module or submodule.
NameVisibilityKind
Describes the visibility of the various names within a particular module.
This represents a decl that may have a name.
Represent a C++ namespace.
ObjCCategoryDecl - Represents a category declaration.
Represents an ObjC class declaration.
This abstract interface provides operations for unwrapping containers for serialized ASTs (precompile...
bool ReadDiagnosticOptions(DiagnosticOptions &DiagOpts, StringRef ModuleFilename, bool Complain) override
Receives the diagnostic options.
bool ReadLanguageOptions(const LangOptions &LangOpts, StringRef ModuleFilename, bool Complain, bool AllowCompatibleDifferences) override
Receives the language options.
bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts, StringRef ModuleFilename, StringRef SpecificModuleCachePath, bool Complain) override
Receives the header search options.
PCHValidator(Preprocessor &PP, ASTReader &Reader)
void ReadCounter(const serialization::ModuleFile &M, uint32_t Value) override
Receives COUNTER value.
bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts, StringRef ModuleFilename, bool ReadMacros, bool Complain, std::string &SuggestedPredefines) override
Receives the preprocessor options.
bool ReadCodeGenOptions(const CodeGenOptions &CGOpts, StringRef ModuleFilename, bool Complain, bool AllowCompatibleDifferences) override
Receives the codegen options.
bool ReadTargetOptions(const TargetOptions &TargetOpts, StringRef ModuleFilename, bool Complain, bool AllowCompatibleDifferences) override
Receives the target options.
Base class that describes a preprocessed entity, which may be a preprocessor directive or macro expan...
PreprocessorOptions - This class is used for passing the various options used in preprocessor initial...
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
A (possibly-)qualified type.
Smart pointer class that efficiently represents Objective-C method names.
static AlignPackInfo getFromRawEncoding(unsigned Encoding)
Sema - This implements semantic analysis and AST building for C.
SimpleASTReaderListener(Preprocessor &PP)
bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts, StringRef ModuleFilename, bool ReadMacros, bool Complain, std::string &SuggestedPredefines) override
Receives the preprocessor options.
static std::pair< SourceLocation, unsigned > decode(RawLocEncoding)
Encodes a location in the source.
SourceLocation getLocWithOffset(IntTy Offset) const
Return a source location with the specified offset from this SourceLocation.
This class handles loading and caching of source files into memory.
A trivial tuple used to represent a source range.
Stmt - This represents one statement.
Options for controlling the target.
Token - This structure provides full information about a lexed token.
The base class of the type hierarchy.
Base class for declarations which introduce a typedef-name.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
Represents a variable declaration or definition.
Information about a module that has been loaded by the ASTReader.
int SLocEntryBaseID
The base ID in the source manager's view of this module.
StringRef ModuleOffsetMap
The module offset map data for this file.
llvm::SmallVector< ModuleFile *, 16 > TransitiveImports
List of modules which this modules dependent on.
Manages the set of modules loaded by an AST reader.
llvm::pointee_iterator< SmallVectorImpl< std::unique_ptr< ModuleFile > >::iterator > ModuleIterator
llvm::pointee_iterator< SmallVectorImpl< std::unique_ptr< ModuleFile > >::const_iterator > ModuleConstIterator
llvm::pointee_iterator< SmallVectorImpl< std::unique_ptr< ModuleFile > >::reverse_iterator > ModuleReverseIterator
Class that performs lookup for an identifier stored in an AST file.
std::variant< struct RequiresDecl, struct HeaderDecl, struct UmbrellaDirDecl, struct ModuleDecl, struct ExcludeDecl, struct ExportDecl, struct ExportAsDecl, struct ExternModuleDecl, struct UseDecl, struct LinkDecl, struct ConfigMacrosDecl, struct ConflictDecl > Decl
All declarations that can appear in a module declaration.
uint32_t SelectorID
An ID number that refers to an ObjC selector in an AST file.
uint64_t PreprocessedEntityID
An ID number that refers to an entity in the detailed preprocessing record.
llvm::support::detail::packed_endian_specific_integral< serialization::DeclID, llvm::endianness::native, llvm::support::unaligned > unaligned_decl_id_t
uint64_t MacroID
An ID number that refers to a macro in an AST file.
uint64_t TypeID
An ID number that refers to a type in an AST file.
ModuleKind
Specifies the kind of module that has been loaded.
uint32_t SubmoduleID
An ID number that refers to a submodule in a module file.
TypeID LocalTypeID
Same with TypeID except that the LocalTypeID is only meaningful with the corresponding ModuleFile.
uint64_t IdentifierID
An ID number that refers to an identifier in an AST file.
The JSON file list parser is used to communicate input to InstallAPI.
nullptr
This class represents a compute construct, representing a 'Kind' of ‘parallel’, 'serial',...
@ Module
Module linkage, which indicates that the entity can be referred to from other translation units withi...
PredefinedDeclIDs
Predefined declaration IDs.
@ Result
The result type of a method or function.
const FunctionProtoType * T
@ Type
The name was classified as a type.
DisableValidationForModuleKind
Whether to disable the normal validation performed on precompiled headers and module files when they ...
@ None
Perform validation, don't disable it.
bool shouldSkipCheckingODR(const Decl *D)
std::string getClangFullRepositoryVersion()
Retrieves the full repository version that is an amalgamation of the information in getClangRepositor...
UnsignedOrNone getPrimaryModuleHash(const Module *M)
Calculate a hash value for the primary module name of the given module.
uint64_t ModuleLocalOffset