14#ifndef LLVM_CLANG_SERIALIZATION_ASTWRITER_H
15#define LLVM_CLANG_SERIALIZATION_ASTWRITER_H
28#include "llvm/ADT/ArrayRef.h"
29#include "llvm/ADT/DenseMap.h"
30#include "llvm/ADT/DenseSet.h"
31#include "llvm/ADT/MapVector.h"
32#include "llvm/ADT/STLExtras.h"
33#include "llvm/ADT/SetVector.h"
34#include "llvm/ADT/SmallVector.h"
35#include "llvm/ADT/StringRef.h"
36#include "llvm/Bitstream/BitstreamWriter.h"
54class FPOptionsOverride;
57class HeaderSearchOptions;
58class IdentifierResolver;
60class MacroDefinitionRecord;
63class InMemoryModuleCache;
64class ModuleFileExtension;
65class ModuleFileExtensionWriter;
67class ObjCInterfaceDecl;
68class PreprocessingRecord;
114 llvm::BitstreamWriter &Stream;
129 Module *WritingModule =
nullptr;
132 std::pair<uint64_t, uint64_t> UnhashedControlBlockRange;
134 uint64_t ASTBlockHashOffset = 0;
136 uint64_t SignatureOffset = 0;
139 uint64_t ASTBlockStartOffset = 0;
142 std::pair<uint64_t, uint64_t> ASTBlockRange;
145 std::string BaseDirectory;
151 bool IncludeTimestamps;
156 bool BuildingImplicitModule =
false;
160 bool WritingAST =
false;
164 bool DoneWritingDeclsAndTypes =
false;
167 bool ASTHasCompilerErrors =
false;
171 bool GeneratingReducedBMI =
false;
175 llvm::DenseMap<const FileEntry *, uint32_t> InputFileIDs;
180 DeclOrType(
Decl *
D) : Stored(
D), IsType(
false) {}
181 DeclOrType(
QualType T) : Stored(
T.getAsOpaquePtr()), IsType(
true) {}
183 bool isType()
const {
return IsType; }
184 bool isDecl()
const {
return !IsType; }
187 assert(isType() &&
"Not a type!");
191 Decl *getDecl()
const {
192 assert(isDecl() &&
"Not a decl!");
193 return static_cast<Decl *
>(Stored);
202 std::queue<DeclOrType> DeclTypesToEmit;
226 llvm::DenseMap<const Decl *, LocalDeclID> DeclIDs;
238 llvm::DenseMap<LocalDeclID, SmallVector<LocalDeclID, 4>> RelatedDeclsMap;
242 std::vector<serialization::DeclOffset> DeclOffsets;
246 uint64_t DeclTypesBlockStartOffset = 0;
250 struct DeclIDInFileInfo {
251 LocDeclIDsTy DeclIDs;
255 unsigned FirstDeclIndex;
257 using FileDeclIDsTy =
258 llvm::DenseMap<FileID, std::unique_ptr<DeclIDInFileInfo>>;
262 FileDeclIDsTy FileDeclIDs;
264 void associateDeclWithFile(
const Decl *
D, LocalDeclID);
285 std::vector<serialization::UnalignedUInt64> TypeOffsets;
299 llvm::MapVector<const IdentifierInfo *, serialization::IdentifierID> IdentifierIDs;
308 llvm::DenseMap<MacroInfo *, serialization::MacroID> MacroIDs;
310 struct MacroInfoToEmitData {
311 const IdentifierInfo *Name;
317 std::vector<MacroInfoToEmitData> MacroInfosToEmit;
319 llvm::DenseMap<const IdentifierInfo *, uint32_t>
320 IdentMacroDirectivesOffsetMap;
326 llvm::DenseSet<Stmt *> ParentStmts;
330 llvm::DenseMap<Stmt *, uint64_t> SubStmtEntries;
336 std::vector<uint32_t> IdentifierOffsets;
353 llvm::MapVector<Selector, serialization::SelectorID> SelectorIDs;
357 std::vector<uint32_t> SelectorOffsets;
361 llvm::DenseMap<
const MacroDefinitionRecord *,
366 llvm::DenseMap<const Decl *, unsigned> AnonymousDeclarationNumbers;
373 llvm::DenseSet<Module *> TouchedTopLevelModules;
385 const Attr *Attribute;
389 DeclUpdate(
unsigned Kind) :
Kind(
Kind), Dcl(nullptr) {}
390 DeclUpdate(
unsigned Kind,
const Decl *Dcl) :
Kind(
Kind), Dcl(Dcl) {}
391 DeclUpdate(
unsigned Kind, QualType Type)
393 DeclUpdate(
unsigned Kind, SourceLocation Loc)
395 DeclUpdate(
unsigned Kind,
unsigned Val) :
Kind(
Kind), Val(Val) {}
396 DeclUpdate(
unsigned Kind, Module *M) :
Kind(
Kind), Mod(M) {}
397 DeclUpdate(
unsigned Kind,
const Attr *Attribute)
398 :
Kind(
Kind), Attribute(Attribute) {}
400 unsigned getKind()
const {
return Kind; }
401 const Decl *getDecl()
const {
return Dcl; }
404 SourceLocation getLoc()
const {
408 unsigned getNumber()
const {
return Val; }
409 Module *getModule()
const {
return Mod; }
410 const Attr *getAttr()
const {
return Attribute; }
413 using UpdateRecord = SmallVector<DeclUpdate, 1>;
414 using DeclUpdateMap = llvm::MapVector<const Decl *, UpdateRecord>;
418 DeclUpdateMap DeclUpdates;
423 DeclUpdateMap DeclUpdatesFromGMF;
427 using SpecializationUpdateMap =
428 llvm::MapVector<const NamedDecl *, SmallVector<const Decl *>>;
429 SpecializationUpdateMap SpecializationsUpdates;
430 SpecializationUpdateMap PartialSpecializationsUpdates;
432 using FirstLatestDeclMap = llvm::DenseMap<Decl *, Decl *>;
436 FirstLatestDeclMap FirstLatestDecls;
464 SmallVector<const Decl *, 16> DeclsToEmitEvenIfUnreferenced;
468 llvm::SetVector<ObjCInterfaceDecl *> ObjCClassesWithCategories;
476 llvm::DenseMap<const Decl *, const Decl *> FirstLocalDeclCache;
479 llvm::DenseMap<SwitchCase *, unsigned> SwitchCaseIDs;
482 unsigned NumStatements = 0;
485 unsigned NumMacros = 0;
489 unsigned NumLexicalDeclContexts = 0;
493 unsigned NumVisibleDeclContexts = 0;
497 llvm::DenseMap<const Module *, unsigned> SubmoduleIDs;
500 std::vector<std::unique_ptr<ModuleFileExtensionWriter>>
501 ModuleFileExtensionWriters;
504 llvm::BitVector IsSLocAffecting;
507 llvm::BitVector IsSLocFileEntryAffecting;
510 std::vector<FileID> NonAffectingFileIDs;
511 std::vector<unsigned> NonAffectingFileIDAdjustments;
514 std::vector<SourceRange> NonAffectingRanges;
515 std::vector<SourceLocation::UIntTy> NonAffectingOffsetAdjustments;
524 void computeNonAffectingInputFiles();
528 SourceLocation getAffectingIncludeLoc(
const SourceManager &SourceMgr,
529 const SrcMgr::FileInfo &
File);
533 FileID getAdjustedFileID(FileID FID)
const;
536 unsigned getAdjustedNumCreatedFIDs(FileID FID)
const;
539 SourceLocation getAdjustedLocation(SourceLocation
Loc)
const;
542 SourceRange getAdjustedRange(SourceRange
Range)
const;
551 unsigned getSubmoduleID(Module *Mod);
554 void WriteSubStmt(ASTContext &Context, Stmt *S);
556 void WriteBlockInfoBlock();
557 void WriteControlBlock(Preprocessor &PP, StringRef isysroot);
560 void writeUnhashedControlBlock(Preprocessor &PP);
561 ASTFileSignature backpatchSignature();
564 std::pair<ASTFileSignature, ASTFileSignature> createSignature()
const;
565 ASTFileSignature createSignatureForNamedModule()
const;
567 void WriteInputFiles(SourceManager &SourceMgr, HeaderSearchOptions &HSOpts);
568 void WriteSourceManagerBlock(SourceManager &SourceMgr);
569 void WritePreprocessor(
const Preprocessor &PP,
bool IsModule);
570 void WriteHeaderSearch(
const HeaderSearch &HS);
571 void WritePreprocessorDetail(PreprocessingRecord &PPRec,
572 uint64_t MacroOffsetsBase);
573 void WriteSubmodules(Module *WritingModule, ASTContext *Context);
575 void WritePragmaDiagnosticMappings(
const DiagnosticsEngine &
Diag,
578 unsigned TypeExtQualAbbrev = 0;
579 void WriteTypeAbbrevs();
580 void WriteType(ASTContext &Context, QualType
T);
582 bool isLookupResultExternal(StoredDeclsList &
Result, DeclContext *DC);
584 void GenerateSpecializationInfoLookupTable(
587 uint64_t WriteSpecializationInfoLookupTable(
590 void GenerateNameLookupTable(ASTContext &Context,
const DeclContext *DC,
592 uint64_t WriteDeclContextLexicalBlock(ASTContext &Context,
593 const DeclContext *DC);
594 uint64_t WriteDeclContextVisibleBlock(ASTContext &Context, DeclContext *DC);
595 void WriteTypeDeclOffsets();
596 void WriteFileDeclIDsMap();
597 void WriteComments(ASTContext &Context);
598 void WriteSelectors(Sema &SemaRef);
599 void WriteReferencedSelectorsPool(Sema &SemaRef);
600 void WriteIdentifierTable(Preprocessor &PP, IdentifierResolver *IdResolver,
602 void WriteDeclAndTypes(ASTContext &Context);
603 void PrepareWritingSpecialDecls(Sema &SemaRef);
604 void WriteSpecialDeclRecords(Sema &SemaRef);
605 void WriteSpecializationsUpdates(
bool IsPartial);
606 void WriteDeclUpdatesBlocks(ASTContext &Context,
608 void WriteDeclContextVisibleUpdate(ASTContext &Context,
609 const DeclContext *DC);
610 void WriteFPPragmaOptions(
const FPOptionsOverride &Opts);
611 void WriteOpenCLExtensions(Sema &SemaRef);
612 void WriteCUDAPragmas(Sema &SemaRef);
613 void WriteObjCCategories();
614 void WriteLateParsedTemplates(Sema &SemaRef);
615 void WriteOptimizePragmaOptions(Sema &SemaRef);
616 void WriteMSStructPragmaOptions(Sema &SemaRef);
617 void WriteMSPointersToMembersPragmaOptions(Sema &SemaRef);
618 void WritePackPragmaOptions(Sema &SemaRef);
619 void WriteFloatControlPragmaOptions(Sema &SemaRef);
620 void WriteDeclsWithEffectsToVerify(Sema &SemaRef);
621 void WriteModuleFileExtension(Sema &SemaRef,
622 ModuleFileExtensionWriter &Writer);
624 unsigned DeclParmVarAbbrev = 0;
625 unsigned DeclContextLexicalAbbrev = 0;
626 unsigned DeclContextVisibleLookupAbbrev = 0;
627 unsigned UpdateVisibleAbbrev = 0;
628 unsigned DeclRecordAbbrev = 0;
629 unsigned DeclTypedefAbbrev = 0;
630 unsigned DeclVarAbbrev = 0;
631 unsigned DeclFieldAbbrev = 0;
632 unsigned DeclEnumAbbrev = 0;
633 unsigned DeclObjCIvarAbbrev = 0;
634 unsigned DeclCXXMethodAbbrev = 0;
635 unsigned DeclSpecializationsAbbrev = 0;
636 unsigned DeclPartialSpecializationsAbbrev = 0;
638 unsigned DeclDependentNonTemplateCXXMethodAbbrev = 0;
639 unsigned DeclTemplateCXXMethodAbbrev = 0;
640 unsigned DeclMemberSpecializedCXXMethodAbbrev = 0;
641 unsigned DeclTemplateSpecializedCXXMethodAbbrev = 0;
642 unsigned DeclDependentSpecializationCXXMethodAbbrev = 0;
643 unsigned DeclTemplateTypeParmAbbrev = 0;
644 unsigned DeclUsingShadowAbbrev = 0;
646 unsigned DeclRefExprAbbrev = 0;
647 unsigned CharacterLiteralAbbrev = 0;
648 unsigned IntegerLiteralAbbrev = 0;
649 unsigned ExprImplicitCastAbbrev = 0;
650 unsigned BinaryOperatorAbbrev = 0;
651 unsigned CompoundAssignOperatorAbbrev = 0;
652 unsigned CallExprAbbrev = 0;
653 unsigned CXXOperatorCallExprAbbrev = 0;
654 unsigned CXXMemberCallExprAbbrev = 0;
656 unsigned CompoundStmtAbbrev = 0;
658 void WriteDeclAbbrevs();
659 void WriteDecl(ASTContext &Context, Decl *
D);
661 ASTFileSignature WriteASTCore(Sema *SemaPtr, StringRef isysroot,
662 Module *WritingModule);
667 ASTWriter(llvm::BitstreamWriter &Stream, SmallVectorImpl<char> &Buffer,
668 InMemoryModuleCache &ModuleCache,
669 ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
670 bool IncludeTimestamps =
true,
bool BuildingImplicitModule =
false,
671 bool GeneratingReducedBMI =
false);
699 StringRef OutputFile,
Module *WritingModule,
701 bool ShouldCacheASTInMemory =
false);
756 if (
D->isFromASTFile())
758 auto I = DeclIDs.find(
D);
829 return TypeExtQualAbbrev;
842 return DeclCXXMethodAbbrev;
844 return DeclTemplateCXXMethodAbbrev;
846 return DeclMemberSpecializedCXXMethodAbbrev;
848 return DeclTemplateSpecializedCXXMethodAbbrev;
850 return DeclDependentNonTemplateCXXMethodAbbrev;
852 return DeclDependentSpecializationCXXMethodAbbrev;
854 llvm_unreachable(
"Unknwon Template Kind!");
857 return DeclTemplateTypeParmAbbrev;
867 return CompoundAssignOperatorAbbrev;
889 return PredefinedDecls.count(
D);
896 void ReaderInitialized(
ASTReader *Reader)
override;
907 void CompletedTagDefinition(
const TagDecl *
D)
override;
910 void AddedCXXTemplateSpecialization(
913 void AddedCXXTemplateSpecialization(
918 void ResolvedExceptionSpec(
const FunctionDecl *FD)
override;
922 Expr *ThisArg)
override;
923 void CompletedImplicitDefinition(
const FunctionDecl *
D)
override;
924 void InstantiationRequested(
const ValueDecl *
D)
override;
925 void VariableDefinitionInstantiated(
const VarDecl *
D)
override;
926 void FunctionDefinitionInstantiated(
const FunctionDecl *
D)
override;
927 void DefaultArgumentInstantiated(
const ParmVarDecl *
D)
override;
928 void DefaultMemberInitializerInstantiated(
const FieldDecl *
D)
override;
931 void DeclarationMarkedUsed(
const Decl *
D)
override;
932 void DeclarationMarkedOpenMPThreadPrivate(
const Decl *
D)
override;
933 void DeclarationMarkedOpenMPDeclareTarget(
const Decl *
D,
935 void DeclarationMarkedOpenMPAllocate(
const Decl *
D,
const Attr *A)
override;
937 void AddedAttributeToRecord(
const Attr *
Attr,
939 void EnteringModulePurview()
override;
940 void AddedManglingNumber(
const Decl *
D,
unsigned)
override;
941 void AddedStaticLocalNumbers(
const Decl *
D,
unsigned)
override;
949 void anchor()
override;
952 llvm::PointerUnion<Sema *, Preprocessor *> Subject;
953 std::string OutputFile;
954 std::string isysroot;
955 std::shared_ptr<PCHBuffer> Buffer;
956 llvm::BitstreamWriter Stream;
958 bool AllowASTWithErrors;
959 bool ShouldCacheASTInMemory;
976 StringRef OutputFile, StringRef isysroot,
977 std::shared_ptr<PCHBuffer> Buffer,
978 ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
979 bool AllowASTWithErrors =
false,
bool IncludeTimestamps =
true,
980 bool BuildingImplicitModule =
false,
981 bool ShouldCacheASTInMemory =
false,
982 bool GeneratingReducedBMI =
false);
994 void anchor()
override;
1000 StringRef OutputFile,
bool GeneratingReducedBMI);
1004 StringRef OutputFile)
1012 void anchor()
override;
1016 StringRef OutputFile)
1030 constexpr static uint32_t BitIndexUpbound = 32u;
1041 return CurrentBitIndex + BitsWidth < BitIndexUpbound;
1045 UnderlyingValue =
Value;
1046 CurrentBitIndex = 0;
1051 assert(BitsWidth < BitIndexUpbound);
1052 assert((
Value < (1u << BitsWidth)) &&
"Passing narrower bit width!");
1054 "Inserting too much bits into a value!");
1056 UnderlyingValue |=
Value << CurrentBitIndex;
1057 CurrentBitIndex += BitsWidth;
1060 operator uint32_t() {
return UnderlyingValue; }
1063 uint32_t UnderlyingValue = 0;
1064 uint32_t CurrentBitIndex = 0;
enum clang::sema::@1718::IndirectLocalPathEntry::EntryKind Kind
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
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::SourceLocation class and associated facilities.
C Language Family Type Representation.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
An abstract interface that should be implemented by listeners that want to be notified when an AST en...
Reads an AST files chain containing the contents of a translation unit.
An object for streaming information to a record.
Writes an AST file containing the contents of a translation unit.
serialization::MacroID getMacroID(MacroInfo *MI)
Determine the ID of an already-emitted macro.
unsigned getDeclParmVarAbbrev() const
void AddEmittedDeclRef(const Decl *D, RecordDataImpl &Record)
void AddSourceRange(SourceRange Range, RecordDataImpl &Record, LocSeq *Seq=nullptr)
Emit a source range.
unsigned getBinaryOperatorAbbrev() const
unsigned getDeclTemplateTypeParmAbbrev() const
bool isWritingStdCXXNamedModules() const
ArrayRef< uint64_t > RecordDataRef
void EmitRecordWithPath(unsigned Abbrev, RecordDataRef Record, StringRef Path)
Emit the current record with the given path as a blob.
void AddFileID(FileID FID, RecordDataImpl &Record)
Emit a FileID.
unsigned getDeclObjCIvarAbbrev() const
unsigned getExprImplicitCastAbbrev() const
bool isDeclPredefined(const Decl *D) const
unsigned getDeclTypedefAbbrev() const
unsigned getSwitchCaseID(SwitchCase *S)
Retrieve the ID for the given switch-case statement.
void AddPath(StringRef Path, RecordDataImpl &Record)
Add a path to the given record.
SmallVectorImpl< uint64_t > RecordDataImpl
unsigned getDeclUsingShadowAbbrev() const
unsigned getTypeExtQualAbbrev() const
void AddVersionTuple(const VersionTuple &Version, RecordDataImpl &Record)
Add a version tuple to the given record.
bool isGeneratingReducedBMI() const
uint32_t getMacroDirectivesOffset(const IdentifierInfo *Name)
unsigned getDeclVarAbbrev() const
unsigned getDeclEnumAbbrev() const
void AddAlignPackInfo(const Sema::AlignPackInfo &Info, RecordDataImpl &Record)
Emit a AlignPackInfo.
void AddPathBlob(StringRef Str, RecordDataImpl &Record, SmallVectorImpl< char > &Blob)
bool IsLocalDecl(const Decl *D)
Is this a local declaration (that is, one that will be written to our AST file)? This is the case for...
unsigned getDeclRefExprAbbrev() const
void AddTypeRef(ASTContext &Context, QualType T, RecordDataImpl &Record)
Emit a reference to a type.
unsigned getCXXOperatorCallExprAbbrev()
bool wasDeclEmitted(const Decl *D) const
Whether or not the declaration got emitted.
void AddString(StringRef Str, RecordDataImpl &Record)
Add a string to the given record.
time_t getTimestampForOutput(const FileEntry *E) const
Get a timestamp for output into the AST file.
void ClearSwitchCaseIDs()
bool isWritingModule() const
LocalDeclID GetDeclRef(const Decl *D)
Force a declaration to be emitted and get its local ID to the module file been writing.
LocalDeclID getDeclID(const Decl *D)
Determine the local declaration ID of an already-emitted declaration.
void AddIdentifierRef(const IdentifierInfo *II, RecordDataImpl &Record)
Emit a reference to an identifier.
serialization::MacroID getMacroRef(MacroInfo *MI, const IdentifierInfo *Name)
Get the unique number used to refer to the given macro.
void AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record, LocSeq *Seq=nullptr)
Emit a source location.
unsigned getCXXMemberCallExprAbbrev()
ASTFileSignature WriteAST(llvm::PointerUnion< Sema *, Preprocessor * > Subject, StringRef OutputFile, Module *WritingModule, StringRef isysroot, bool ShouldCacheASTInMemory=false)
Write a precompiled header or a module with the AST produced by the Sema object, or a dependency scan...
ASTReader * getChain() const
unsigned getCompoundAssignOperatorAbbrev() const
bool getDoneWritingDeclsAndTypes() const
serialization::IdentifierID getIdentifierRef(const IdentifierInfo *II)
Get the unique number used to refer to the given identifier.
unsigned RecordSwitchCaseID(SwitchCase *S)
Record an ID for the given switch-case statement.
unsigned getCharacterLiteralAbbrev() const
unsigned getDeclCXXMethodAbbrev(FunctionDecl::TemplatedKind Kind) const
void handleVTable(CXXRecordDecl *RD)
unsigned getCompoundStmtAbbrev() const
unsigned getLocalOrImportedSubmoduleID(const Module *Mod)
Retrieve or create a submodule ID for this module, or return 0 if the submodule is neither local (a s...
const Decl * getFirstLocalDecl(const Decl *D)
Find the first local declaration of a given local redeclarable decl.
void AddToken(const Token &Tok, RecordDataImpl &Record)
Emit a token.
serialization::SelectorID getSelectorRef(Selector Sel)
Get the unique number used to refer to the given selector.
SourceLocationEncoding::RawLocEncoding getRawSourceLocationEncoding(SourceLocation Loc, LocSeq *Seq=nullptr)
Return the raw encodings for source locations.
ASTWriter(llvm::BitstreamWriter &Stream, SmallVectorImpl< char > &Buffer, InMemoryModuleCache &ModuleCache, ArrayRef< std::shared_ptr< ModuleFileExtension > > Extensions, bool IncludeTimestamps=true, bool BuildingImplicitModule=false, bool GeneratingReducedBMI=false)
Create a new precompiled header writer that outputs to the given bitstream.
SmallVector< uint64_t, 64 > RecordData
serialization::TypeID GetOrCreateTypeID(ASTContext &Context, QualType T)
Force a type to be emitted and get its ID.
unsigned getAnonymousDeclarationNumber(const NamedDecl *D)
unsigned getDeclFieldAbbrev() const
const LangOptions & getLangOpts() const
void SetSelectorOffset(Selector Sel, uint32_t Offset)
Note that the selector Sel occurs at the given offset within the method pool/selector table.
bool PreparePathForOutput(SmallVectorImpl< char > &Path)
Convert a path from this build process into one that is appropriate for emission in the module file.
unsigned getCallExprAbbrev() const
void SetIdentifierOffset(const IdentifierInfo *II, uint32_t Offset)
Note that the identifier II occurs at the given offset within the identifier table.
unsigned getDeclRecordAbbrev() const
void AddDeclRef(const Decl *D, RecordDataImpl &Record)
Emit a reference to a declaration.
void AddStringBlob(StringRef Str, RecordDataImpl &Record, SmallVectorImpl< char > &Blob)
unsigned getIntegerLiteralAbbrev() const
Attr - This represents one attribute.
A simple helper class to pack several bits in order into (a) 32 bit integer(s).
bool canWriteNextNBits(uint32_t BitsWidth) const
BitsPacker operator=(BitsPacker &&)=delete
BitsPacker(BitsPacker &&)=delete
void addBits(uint32_t Value, uint32_t BitsWidth)
void reset(uint32_t Value)
BitsPacker(const BitsPacker &)=delete
BitsPacker operator=(const BitsPacker &)=delete
void HandleTranslationUnit(ASTContext &Ctx) override
HandleTranslationUnit - This method is called when the ASTs for entire translation unit have been par...
virtual Module * getEmittingModule(ASTContext &Ctx) override
CXX20ModulesGenerator(Preprocessor &PP, InMemoryModuleCache &ModuleCache, StringRef OutputFile)
Represents a C++ destructor within a class.
Represents a C++ struct/union/class.
Declaration of a class template.
Represents a class template specialization, which refers to a class template with a given set of temp...
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.
Concrete class used by the front-end to report problems and issues.
This represents one expression.
Represents a member of a struct/union/class.
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...
Represents a function declaration or definition.
TemplatedKind
The kind of templated function a FunctionDecl can be.
@ TK_MemberSpecialization
@ TK_DependentNonTemplate
@ TK_FunctionTemplateSpecialization
@ TK_DependentFunctionTemplateSpecialization
Declaration of a template function.
One of these records is kept for each identifier that is lexed.
In-memory cache for modules.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Record the location of a macro definition.
Encapsulates the data about a macro definition (e.g.
Describes a module or submodule.
bool isNamedModule() const
Does this Module is a named module of a standard named module?
This represents a decl that may have a name.
Represent a C++ namespace.
ObjCCategoryDecl - Represents a category declaration.
Represents an ObjC class declaration.
AST and semantic-analysis consumer that generates a precompiled header from the parsed source code.
ASTMutationListener * GetASTMutationListener() override
If the consumer is interested in entities getting modified after their initial creation,...
void InitializeSema(Sema &S) override
Initialize the semantic consumer with the Sema instance being used to perform semantic analysis on th...
PCHBuffer * getBufferPtr()
Preprocessor & getPreprocessor()
virtual Module * getEmittingModule(ASTContext &Ctx)
SmallVectorImpl< char > & getPCH() const
StringRef getOutputFile() const
void HandleVTable(CXXRecordDecl *RD) override
Callback involved at the end of a translation unit to notify the consumer that a vtable for the given...
ASTDeserializationListener * GetASTDeserializationListener() override
If the consumer is interested in entities being deserialized from AST files, it should return a point...
const ASTWriter & getWriter() const
void HandleTranslationUnit(ASTContext &Ctx) override
HandleTranslationUnit - This method is called when the ASTs for entire translation unit have been par...
bool hasEmittedPCH() const
DiagnosticsEngine & getDiagnostics() const
Represents a parameter to a function.
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
A (possibly-)qualified type.
static QualType getFromOpaquePtr(const void *Ptr)
Represents a struct/union/class.
ReducedBMIGenerator(Preprocessor &PP, InMemoryModuleCache &ModuleCache, StringRef OutputFile)
Smart pointer class that efficiently represents Objective-C method names.
An abstract interface that should be implemented by clients that read ASTs and then require further s...
Sema - This implements semantic analysis and AST building for C.
Serialized encoding of a sequence of SourceLocations.
Encodes a location in the source.
static SourceLocation getFromRawEncoding(UIntTy Encoding)
Turn a raw encoding of a SourceLocation object into a real SourceLocation.
A trivial tuple used to represent a source range.
Represents the declaration of a struct/union/class/enum.
Token - This structure provides full information about a lexed token.
The top declaration context.
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.
Declaration of a variable template.
Represents a variable template specialization, which refers to a variable template with a given set o...
A type index; the type ID with the qualifier bits removed.
const unsigned NUM_PREDEF_TYPE_IDS
The number of predefined type IDs that are reserved for the PREDEF_TYPE_* constants.
@ Decl
The l-value was an access to a declared entity or something equivalently strong, like the address of ...
uint64_t TypeID
An ID number that refers to a type in an AST file.
const unsigned int NUM_PREDEF_IDENT_IDS
The number of predefined identifier IDs.
uint32_t SubmoduleID
An ID number that refers to a submodule in a module file.
uint32_t SelectorID
An ID number that refers to an ObjC selector in an AST file.
uint32_t PreprocessedEntityID
An ID number that refers to an entity in the detailed preprocessing record.
const unsigned int NUM_PREDEF_SUBMODULE_IDS
The number of predefined submodule IDs.
const unsigned int NUM_PREDEF_SELECTOR_IDS
The number of predefined selector IDs.
uint64_t IdentifierID
An ID number that refers to an identifier in an AST file.
const unsigned int NUM_PREDEF_MACRO_IDS
The number of predefined macro IDs.
uint32_t MacroID
An ID number that refers to a macro in an AST file.
The JSON file list parser is used to communicate input to InstallAPI.
@ Seq
'seq' clause, allowed on 'loop' and 'routine' directives.
@ Delete
'delete' clause, allowed on the 'exit data' construct.
@ Module
Module linkage, which indicates that the entity can be referred to from other translation units withi...
PredefinedDeclIDs
Predefined declaration IDs.
@ NUM_PREDEF_DECL_IDS
The number of declaration IDs that are predefined.
@ Result
The result type of a method or function.
bool CanElideDeclDef(const Decl *D)
If we can elide the definition of.
const FunctionProtoType * T
The signature of a module, which is a hash of the AST content.
A structure for putting "fast"-unqualified QualTypes into a DenseMap.