14#ifndef LLVM_CLANG_SERIALIZATION_ASTWRITER_H
15#define LLVM_CLANG_SERIALIZATION_ASTWRITER_H
29#include "llvm/ADT/ArrayRef.h"
30#include "llvm/ADT/DenseMap.h"
31#include "llvm/ADT/DenseSet.h"
32#include "llvm/ADT/MapVector.h"
33#include "llvm/ADT/STLExtras.h"
34#include "llvm/ADT/SetVector.h"
35#include "llvm/ADT/SmallVector.h"
36#include "llvm/ADT/StringRef.h"
37#include "llvm/Bitstream/BitstreamWriter.h"
55class FPOptionsOverride;
58class HeaderSearchOptions;
59class IdentifierResolver;
61class MacroDefinitionRecord;
64class InMemoryModuleCache;
65class ModuleFileExtension;
66class ModuleFileExtensionWriter;
68class ObjCInterfaceDecl;
69class PreprocessingRecord;
115 llvm::BitstreamWriter &Stream;
133 Module *WritingModule =
nullptr;
136 std::pair<uint64_t, uint64_t> UnhashedControlBlockRange;
138 uint64_t ASTBlockHashOffset = 0;
140 uint64_t SignatureOffset = 0;
143 uint64_t ASTBlockStartOffset = 0;
146 std::pair<uint64_t, uint64_t> ASTBlockRange;
149 std::string BaseDirectory;
155 bool IncludeTimestamps;
160 bool BuildingImplicitModule =
false;
164 bool WritingAST =
false;
168 bool DoneWritingDeclsAndTypes =
false;
171 bool ASTHasCompilerErrors =
false;
175 bool GeneratingReducedBMI =
false;
179 llvm::DenseMap<const FileEntry *, uint32_t> InputFileIDs;
184 DeclOrType(
Decl *D) : Stored(D), IsType(
false) {}
185 DeclOrType(
QualType T) : Stored(
T.getAsOpaquePtr()), IsType(
true) {}
187 bool isType()
const {
return IsType; }
188 bool isDecl()
const {
return !IsType; }
191 assert(isType() &&
"Not a type!");
195 Decl *getDecl()
const {
196 assert(isDecl() &&
"Not a decl!");
197 return static_cast<Decl *
>(Stored);
206 std::queue<DeclOrType> DeclTypesToEmit;
230 llvm::DenseMap<const Decl *, LocalDeclID> DeclIDs;
234 std::vector<serialization::DeclOffset> DeclOffsets;
238 uint64_t DeclTypesBlockStartOffset = 0;
242 struct DeclIDInFileInfo {
243 LocDeclIDsTy DeclIDs;
247 unsigned FirstDeclIndex;
249 using FileDeclIDsTy =
250 llvm::DenseMap<FileID, std::unique_ptr<DeclIDInFileInfo>>;
254 FileDeclIDsTy FileDeclIDs;
256 void associateDeclWithFile(
const Decl *D, LocalDeclID);
277 std::vector<serialization::UnalignedUInt64> TypeOffsets;
291 llvm::MapVector<const IdentifierInfo *, serialization::IdentifierID> IdentifierIDs;
300 llvm::DenseMap<MacroInfo *, serialization::MacroID> MacroIDs;
302 struct MacroInfoToEmitData {
303 const IdentifierInfo *Name;
309 std::vector<MacroInfoToEmitData> MacroInfosToEmit;
311 llvm::DenseMap<const IdentifierInfo *, uint32_t>
312 IdentMacroDirectivesOffsetMap;
322 llvm::DenseMap<Stmt *, uint64_t> SubStmtEntries;
328 std::vector<uint32_t> IdentifierOffsets;
345 llvm::MapVector<Selector, serialization::SelectorID> SelectorIDs;
349 std::vector<uint32_t> SelectorOffsets;
353 llvm::DenseMap<
const MacroDefinitionRecord *,
358 llvm::DenseMap<const Decl *, unsigned> AnonymousDeclarationNumbers;
377 const Attr *Attribute;
381 DeclUpdate(
unsigned Kind) :
Kind(
Kind), Dcl(nullptr) {}
382 DeclUpdate(
unsigned Kind,
const Decl *Dcl) :
Kind(
Kind), Dcl(Dcl) {}
383 DeclUpdate(
unsigned Kind, QualType Type)
385 DeclUpdate(
unsigned Kind, SourceLocation Loc)
387 DeclUpdate(
unsigned Kind,
unsigned Val) :
Kind(
Kind), Val(Val) {}
388 DeclUpdate(
unsigned Kind, Module *M) :
Kind(
Kind), Mod(M) {}
389 DeclUpdate(
unsigned Kind,
const Attr *Attribute)
390 :
Kind(
Kind), Attribute(Attribute) {}
392 unsigned getKind()
const {
return Kind; }
393 const Decl *getDecl()
const {
return Dcl; }
396 SourceLocation getLoc()
const {
400 unsigned getNumber()
const {
return Val; }
401 Module *getModule()
const {
return Mod; }
402 const Attr *getAttr()
const {
return Attribute; }
405 using UpdateRecord = SmallVector<DeclUpdate, 1>;
406 using DeclUpdateMap = llvm::MapVector<const Decl *, UpdateRecord>;
410 DeclUpdateMap DeclUpdates;
415 DeclUpdateMap DeclUpdatesFromGMF;
417 using FirstLatestDeclMap = llvm::DenseMap<Decl *, Decl *>;
421 FirstLatestDeclMap FirstLatestDecls;
449 SmallVector<const Decl *, 16> DeclsToEmitEvenIfUnreferenced;
453 llvm::SetVector<ObjCInterfaceDecl *> ObjCClassesWithCategories;
461 llvm::DenseMap<const Decl *, const Decl *> FirstLocalDeclCache;
464 llvm::DenseMap<SwitchCase *, unsigned> SwitchCaseIDs;
467 unsigned NumStatements = 0;
470 unsigned NumMacros = 0;
474 unsigned NumLexicalDeclContexts = 0;
478 unsigned NumVisibleDeclContexts = 0;
482 llvm::DenseMap<const Module *, unsigned> SubmoduleIDs;
485 std::vector<std::unique_ptr<ModuleFileExtensionWriter>>
486 ModuleFileExtensionWriters;
489 llvm::BitVector IsSLocAffecting;
492 std::vector<FileID> NonAffectingFileIDs;
493 std::vector<unsigned> NonAffectingFileIDAdjustments;
496 std::vector<SourceRange> NonAffectingRanges;
497 std::vector<SourceLocation::UIntTy> NonAffectingOffsetAdjustments;
502 void computeNonAffectingInputFiles();
506 SourceLocation getAffectingIncludeLoc(
const SourceManager &SourceMgr,
507 const SrcMgr::FileInfo &
File);
511 FileID getAdjustedFileID(FileID FID)
const;
514 unsigned getAdjustedNumCreatedFIDs(FileID FID)
const;
517 SourceLocation getAdjustedLocation(SourceLocation
Loc)
const;
520 SourceRange getAdjustedRange(SourceRange
Range)
const;
529 unsigned getSubmoduleID(Module *Mod);
532 void WriteSubStmt(Stmt *S);
534 void WriteBlockInfoBlock();
535 void WriteControlBlock(Preprocessor &PP, ASTContext &Context,
539 void writeUnhashedControlBlock(Preprocessor &PP, ASTContext &Context);
540 ASTFileSignature backpatchSignature();
543 std::pair<ASTFileSignature, ASTFileSignature> createSignature()
const;
544 ASTFileSignature createSignatureForNamedModule()
const;
546 void WriteInputFiles(SourceManager &SourceMgr, HeaderSearchOptions &HSOpts);
547 void WriteSourceManagerBlock(SourceManager &SourceMgr,
548 const Preprocessor &PP);
549 void WritePreprocessor(
const Preprocessor &PP,
bool IsModule);
550 void WriteHeaderSearch(
const HeaderSearch &HS);
551 void WritePreprocessorDetail(PreprocessingRecord &PPRec,
552 uint64_t MacroOffsetsBase);
553 void WriteSubmodules(Module *WritingModule);
555 void WritePragmaDiagnosticMappings(
const DiagnosticsEngine &
Diag,
558 unsigned TypeExtQualAbbrev = 0;
559 void WriteTypeAbbrevs();
560 void WriteType(QualType
T);
562 bool isLookupResultExternal(StoredDeclsList &
Result, DeclContext *DC);
563 bool isLookupResultEntirelyExternalOrUnreachable(StoredDeclsList &
Result,
566 void GenerateNameLookupTable(
const DeclContext *DC,
568 uint64_t WriteDeclContextLexicalBlock(ASTContext &Context,
569 const DeclContext *DC);
570 uint64_t WriteDeclContextVisibleBlock(ASTContext &Context, DeclContext *DC);
571 void WriteTypeDeclOffsets();
572 void WriteFileDeclIDsMap();
573 void WriteComments();
574 void WriteSelectors(Sema &SemaRef);
575 void WriteReferencedSelectorsPool(Sema &SemaRef);
576 void WriteIdentifierTable(Preprocessor &PP, IdentifierResolver &IdResolver,
578 void WriteDeclAndTypes(ASTContext &Context);
579 void PrepareWritingSpecialDecls(Sema &SemaRef);
580 void WriteSpecialDeclRecords(Sema &SemaRef);
582 void WriteDeclContextVisibleUpdate(
const DeclContext *DC);
583 void WriteFPPragmaOptions(
const FPOptionsOverride &Opts);
584 void WriteOpenCLExtensions(Sema &SemaRef);
585 void WriteCUDAPragmas(Sema &SemaRef);
586 void WriteObjCCategories();
587 void WriteLateParsedTemplates(Sema &SemaRef);
588 void WriteOptimizePragmaOptions(Sema &SemaRef);
589 void WriteMSStructPragmaOptions(Sema &SemaRef);
590 void WriteMSPointersToMembersPragmaOptions(Sema &SemaRef);
591 void WritePackPragmaOptions(Sema &SemaRef);
592 void WriteFloatControlPragmaOptions(Sema &SemaRef);
593 void WriteModuleFileExtension(Sema &SemaRef,
594 ModuleFileExtensionWriter &Writer);
596 unsigned DeclParmVarAbbrev = 0;
597 unsigned DeclContextLexicalAbbrev = 0;
598 unsigned DeclContextVisibleLookupAbbrev = 0;
599 unsigned UpdateVisibleAbbrev = 0;
600 unsigned DeclRecordAbbrev = 0;
601 unsigned DeclTypedefAbbrev = 0;
602 unsigned DeclVarAbbrev = 0;
603 unsigned DeclFieldAbbrev = 0;
604 unsigned DeclEnumAbbrev = 0;
605 unsigned DeclObjCIvarAbbrev = 0;
606 unsigned DeclCXXMethodAbbrev = 0;
607 unsigned DeclDependentNonTemplateCXXMethodAbbrev = 0;
608 unsigned DeclTemplateCXXMethodAbbrev = 0;
609 unsigned DeclMemberSpecializedCXXMethodAbbrev = 0;
610 unsigned DeclTemplateSpecializedCXXMethodAbbrev = 0;
611 unsigned DeclDependentSpecializationCXXMethodAbbrev = 0;
612 unsigned DeclTemplateTypeParmAbbrev = 0;
613 unsigned DeclUsingShadowAbbrev = 0;
615 unsigned DeclRefExprAbbrev = 0;
616 unsigned CharacterLiteralAbbrev = 0;
617 unsigned IntegerLiteralAbbrev = 0;
618 unsigned ExprImplicitCastAbbrev = 0;
619 unsigned BinaryOperatorAbbrev = 0;
620 unsigned CompoundAssignOperatorAbbrev = 0;
621 unsigned CallExprAbbrev = 0;
622 unsigned CXXOperatorCallExprAbbrev = 0;
623 unsigned CXXMemberCallExprAbbrev = 0;
625 unsigned CompoundStmtAbbrev = 0;
627 void WriteDeclAbbrevs();
628 void WriteDecl(ASTContext &Context, Decl *D);
630 ASTFileSignature WriteASTCore(Sema &SemaRef, StringRef isysroot,
631 Module *WritingModule);
636 ASTWriter(llvm::BitstreamWriter &Stream, SmallVectorImpl<char> &Buffer,
637 InMemoryModuleCache &ModuleCache,
638 ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
639 bool IncludeTimestamps =
true,
bool BuildingImplicitModule =
false,
640 bool GeneratingReducedBMI =
false);
644 assert(Context &&
"requested AST context when not writing AST");
670 Module *WritingModule, StringRef isysroot,
671 bool ShouldCacheASTInMemory =
false);
685 LocSeq *
Seq =
nullptr);
693 LocSeq *
Seq =
nullptr);
731 auto I = DeclIDs.find(D);
732 return (I == DeclIDs.end() ||
799 return TypeExtQualAbbrev;
812 return DeclCXXMethodAbbrev;
814 return DeclTemplateCXXMethodAbbrev;
816 return DeclMemberSpecializedCXXMethodAbbrev;
818 return DeclTemplateSpecializedCXXMethodAbbrev;
820 return DeclDependentNonTemplateCXXMethodAbbrev;
822 return DeclDependentSpecializationCXXMethodAbbrev;
824 llvm_unreachable(
"Unknwon Template Kind!");
827 return DeclTemplateTypeParmAbbrev;
837 return CompoundAssignOperatorAbbrev;
858 void ReaderInitialized(
ASTReader *Reader)
override;
868 void CompletedTagDefinition(
const TagDecl *D)
override;
871 void AddedCXXTemplateSpecialization(
874 void AddedCXXTemplateSpecialization(
879 void ResolvedExceptionSpec(
const FunctionDecl *FD)
override;
883 Expr *ThisArg)
override;
884 void CompletedImplicitDefinition(
const FunctionDecl *D)
override;
885 void InstantiationRequested(
const ValueDecl *D)
override;
886 void VariableDefinitionInstantiated(
const VarDecl *D)
override;
887 void FunctionDefinitionInstantiated(
const FunctionDecl *D)
override;
888 void DefaultArgumentInstantiated(
const ParmVarDecl *D)
override;
889 void DefaultMemberInitializerInstantiated(
const FieldDecl *D)
override;
892 void DeclarationMarkedUsed(
const Decl *D)
override;
893 void DeclarationMarkedOpenMPThreadPrivate(
const Decl *D)
override;
894 void DeclarationMarkedOpenMPDeclareTarget(
const Decl *D,
896 void DeclarationMarkedOpenMPAllocate(
const Decl *D,
const Attr *A)
override;
897 void RedefinedHiddenDefinition(
const NamedDecl *D,
Module *M)
override;
898 void AddedAttributeToRecord(
const Attr *
Attr,
900 void EnteringModulePurview()
override;
901 void AddedManglingNumber(
const Decl *D,
unsigned)
override;
902 void AddedStaticLocalNumbers(
const Decl *D,
unsigned)
override;
910 void anchor()
override;
913 std::string OutputFile;
914 std::string isysroot;
916 std::shared_ptr<PCHBuffer> Buffer;
917 llvm::BitstreamWriter Stream;
919 bool AllowASTWithErrors;
920 bool ShouldCacheASTInMemory;
939 StringRef OutputFile, StringRef isysroot,
940 std::shared_ptr<PCHBuffer> Buffer,
941 ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
942 bool AllowASTWithErrors =
false,
bool IncludeTimestamps =
true,
943 bool BuildingImplicitModule =
false,
944 bool ShouldCacheASTInMemory =
false,
945 bool GeneratingReducedBMI =
false);
956 void anchor()
override;
962 StringRef OutputFile,
bool GeneratingReducedBMI);
966 StringRef OutputFile)
974 void anchor()
override;
978 StringRef OutputFile)
992 constexpr static uint32_t BitIndexUpbound = 32u;
1003 return CurrentBitIndex + BitsWidth < BitIndexUpbound;
1007 UnderlyingValue =
Value;
1008 CurrentBitIndex = 0;
1013 assert(BitsWidth < BitIndexUpbound);
1014 assert((
Value < (1u << BitsWidth)) &&
"Passing narrower bit width!");
1016 "Inserting too much bits into a value!");
1018 UnderlyingValue |=
Value << CurrentBitIndex;
1019 CurrentBitIndex += BitsWidth;
1022 operator uint32_t() {
return UnderlyingValue; }
1025 uint32_t UnderlyingValue = 0;
1026 uint32_t CurrentBitIndex = 0;
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::Module class, which describes a module in the source code.
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.
ASTFileSignature WriteAST(Sema &SemaRef, StringRef OutputFile, Module *WritingModule, StringRef isysroot, bool ShouldCacheASTInMemory=false)
Write a precompiled header for the given semantic analysis.
serialization::TypeID getTypeID(QualType T) const
Determine the type ID of an already-emitted type.
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
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.
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
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()
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::TypeID GetOrCreateTypeID(QualType T)
Force a type to be emitted and get its ID.
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.
void AddTypeRef(QualType T, RecordDataImpl &Record)
Emit a reference to a type.
ASTContext & getASTContext() const
unsigned getCXXMemberCallExprAbbrev()
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
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
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.
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.
bool isFromASTFile() const
Determine whether this declaration came from an AST file (such as a precompiled header or module) rat...
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,...
PCHBuffer * getBufferPtr()
Preprocessor & getPreprocessor()
virtual Module * getEmittingModule(ASTContext &Ctx)
SmallVectorImpl< char > & getPCH() const
void InitializeSema(Sema &S) override
Initialize the semantic consumer with the Sema instance being used to perform semantic analysis on th...
StringRef getOutputFile() const
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.
DiagnosticsEngine & getDiagnostics() const
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 ...
uint32_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.
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.
uint32_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.
@ Seq
'seq' clause, allowed on 'loop' and 'routine' directives.
@ Delete
'delete' clause, allowed on the 'exit data' construct.
const unsigned int NUM_PREDEF_DECL_IDS
The number of declaration IDs that are predefined.
@ Module
Module linkage, which indicates that the entity can be referred to from other translation units withi...
@ 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.