13#ifndef LLVM_CLANG_LIB_CODEGEN_CGDEBUGINFO_H
14#define LLVM_CLANG_LIB_CODEGEN_CGDEBUGINFO_H
26#include "llvm/ADT/DenseMap.h"
27#include "llvm/ADT/DenseSet.h"
28#include "llvm/IR/DIBuilder.h"
29#include "llvm/IR/DebugInfo.h"
30#include "llvm/IR/ValueHandle.h"
31#include "llvm/Support/Allocator.h"
39class ClassTemplateSpecializationDecl;
42class ObjCInterfaceDecl;
59 const llvm::codegenoptions::DebugInfoKind DebugKind;
60 bool DebugTypeExtRefs;
61 llvm::DIBuilder DBuilder;
62 llvm::DICompileUnit *TheCU =
nullptr;
66 llvm::MDNode *CurInlinedAt =
nullptr;
67 llvm::DIType *VTablePtrType =
nullptr;
68 llvm::DIType *ClassTy =
nullptr;
69 llvm::DICompositeType *ObjTy =
nullptr;
70 llvm::DIType *SelTy =
nullptr;
71#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
72 llvm::DIType *SingletonId = nullptr;
73#include "clang/Basic/OpenCLImageTypes.def"
74 llvm::DIType *OCLSamplerDITy =
nullptr;
75 llvm::DIType *OCLEventDITy =
nullptr;
76 llvm::DIType *OCLClkEventDITy =
nullptr;
77 llvm::DIType *OCLQueueDITy =
nullptr;
78 llvm::DIType *OCLNDRangeDITy =
nullptr;
79 llvm::DIType *OCLReserveIDDITy =
nullptr;
80#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
81 llvm::DIType *Id##Ty = nullptr;
82#include "clang/Basic/OpenCLExtensionTypes.def"
83#define WASM_TYPE(Name, Id, SingletonId) llvm::DIType *SingletonId = nullptr;
84#include "clang/Basic/WebAssemblyReferenceTypes.def"
87 llvm::DenseMap<const void *, llvm::TrackingMDRef> TypeCache;
91 llvm::SmallDenseMap<QualType, llvm::Metadata *> SizeExprCache;
95 const CGDebugInfo &Self;
98 PrintingCallbacks(
const CGDebugInfo &Self) : Self(Self) {}
99 std::string remapPath(StringRef Path)
const override {
100 return Self.remapDIPath(Path);
103 PrintingCallbacks PrintCB = {*
this};
105 struct ObjCInterfaceCacheEntry {
106 const ObjCInterfaceType *
Type;
109 ObjCInterfaceCacheEntry(
const ObjCInterfaceType *Type, llvm::DIType *Decl,
120 llvm::DenseMap<
const ObjCInterfaceDecl *,
121 std::vector<llvm::PointerIntPair<llvm::DISubprogram *, 1>>>
125 llvm::DenseMap<const Module *, llvm::TrackingMDRef> ModuleCache;
128 std::vector<void *> RetainedTypes;
131 std::vector<std::pair<const TagType *, llvm::TrackingMDRef>> ReplaceMap;
135 std::vector<std::pair<const DeclaratorDecl *, llvm::TrackingMDRef>>
139 std::vector<llvm::TypedTrackingMDRef<llvm::DIScope>> LexicalBlockStack;
140 llvm::DenseMap<const Decl *, llvm::TrackingMDRef> RegionMap;
144 std::vector<unsigned> FnBeginRegionCount;
148 llvm::BumpPtrAllocator DebugInfoNames;
151 llvm::DenseMap<const char *, llvm::TrackingMDRef> DIFileCache;
152 llvm::DenseMap<const FunctionDecl *, llvm::TrackingMDRef> SPCache;
156 llvm::DenseMap<const Decl *, llvm::TrackingMDRef> DeclCache;
157 llvm::DenseMap<const Decl *, llvm::TrackingMDRef> ImportedDeclCache;
158 llvm::DenseMap<const NamespaceDecl *, llvm::TrackingMDRef> NamespaceCache;
159 llvm::DenseMap<const NamespaceAliasDecl *, llvm::TrackingMDRef>
161 llvm::DenseMap<const Decl *, llvm::TypedTrackingMDRef<llvm::DIDerivedType>>
162 StaticDataMemberCache;
164 using ParamDecl2StmtTy = llvm::DenseMap<const ParmVarDecl *, const Stmt *>;
165 using Param2DILocTy =
166 llvm::DenseMap<const ParmVarDecl *, llvm::DILocalVariable *>;
169 ParamDecl2StmtTy CoroutineParameterMappings;
171 Param2DILocTy ParamDbgMappings;
177 llvm::DIType *CreateType(
const BuiltinType *Ty);
178 llvm::DIType *CreateType(
const ComplexType *Ty);
179 llvm::DIType *CreateType(
const BitIntType *Ty);
180 llvm::DIType *CreateQualifiedType(QualType Ty, llvm::DIFile *Fg);
181 llvm::DIType *CreateQualifiedType(
const FunctionProtoType *Ty,
183 llvm::DIType *CreateType(
const TypedefType *Ty, llvm::DIFile *Fg);
184 llvm::DIType *CreateType(
const TemplateSpecializationType *Ty,
186 llvm::DIType *CreateType(
const ObjCObjectPointerType *Ty, llvm::DIFile *F);
187 llvm::DIType *CreateType(
const PointerType *Ty, llvm::DIFile *F);
188 llvm::DIType *CreateType(
const BlockPointerType *Ty, llvm::DIFile *F);
189 llvm::DIType *CreateType(
const FunctionType *Ty, llvm::DIFile *F);
191 llvm::DIType *CreateType(
const RecordType *Tyg);
199 std::pair<llvm::DIType *, llvm::DIType *>
200 CreateTypeDefinition(
const RecordType *Ty);
201 llvm::DICompositeType *CreateLimitedType(
const RecordType *Ty);
202 void CollectContainingType(
const CXXRecordDecl *RD,
203 llvm::DICompositeType *CT);
205 llvm::DIType *CreateType(
const ObjCInterfaceType *Ty, llvm::DIFile *F);
206 llvm::DIType *CreateTypeDefinition(
const ObjCInterfaceType *Ty,
209 llvm::DIType *CreateType(
const ObjCObjectType *Ty, llvm::DIFile *F);
210 llvm::DIType *CreateType(
const ObjCTypeParamType *Ty, llvm::DIFile *Unit);
212 llvm::DIType *CreateType(
const VectorType *Ty, llvm::DIFile *F);
213 llvm::DIType *CreateType(
const ConstantMatrixType *Ty, llvm::DIFile *F);
214 llvm::DIType *CreateType(
const ArrayType *Ty, llvm::DIFile *F);
215 llvm::DIType *CreateType(
const LValueReferenceType *Ty, llvm::DIFile *F);
216 llvm::DIType *CreateType(
const RValueReferenceType *Ty, llvm::DIFile *Unit);
217 llvm::DIType *CreateType(
const MemberPointerType *Ty, llvm::DIFile *F);
218 llvm::DIType *CreateType(
const AtomicType *Ty, llvm::DIFile *F);
219 llvm::DIType *CreateType(
const PipeType *Ty, llvm::DIFile *F);
221 llvm::DIType *CreateEnumType(
const EnumType *Ty);
222 llvm::DIType *CreateTypeDefinition(
const EnumType *Ty);
229 llvm::DIType *CreateSelfType(
const QualType &QualTy, llvm::DIType *Ty);
234 llvm::DIType *getTypeOrNull(
const QualType);
239 llvm::DISubroutineType *getOrCreateMethodType(
const CXXMethodDecl *Method,
241 llvm::DISubroutineType *
242 getOrCreateInstanceMethodType(QualType ThisPtr,
const FunctionProtoType *
Func,
244 llvm::DISubroutineType *
245 getOrCreateFunctionType(
const Decl *D, QualType FnType, llvm::DIFile *F);
247 llvm::DIType *getOrCreateVTablePtrType(llvm::DIFile *F);
250 llvm::DINamespace *getOrCreateNamespace(
const NamespaceDecl *N);
251 llvm::DIType *CreatePointerLikeType(llvm::dwarf::Tag Tag,
const Type *Ty,
252 QualType PointeeTy, llvm::DIFile *F);
253 llvm::DIType *getOrCreateStructPtrType(StringRef Name, llvm::DIType *&
Cache);
257 llvm::DISubprogram *CreateCXXMemberFunction(
const CXXMethodDecl *Method,
259 llvm::DIType *RecordTy);
264 void CollectCXXMemberFunctions(
const CXXRecordDecl *
Decl, llvm::DIFile *F,
265 SmallVectorImpl<llvm::Metadata *> &E,
271 void CollectCXXBases(
const CXXRecordDecl *
Decl, llvm::DIFile *F,
272 SmallVectorImpl<llvm::Metadata *> &EltTys,
273 llvm::DIType *RecordTy);
277 void CollectCXXBasesAux(
278 const CXXRecordDecl *RD, llvm::DIFile *Unit,
279 SmallVectorImpl<llvm::Metadata *> &EltTys, llvm::DIType *RecordTy,
282 llvm::DINode::DIFlags StartingFlags);
287 llvm::DIType *GetPreferredNameType(
const CXXRecordDecl *RD,
290 struct TemplateArgs {
291 const TemplateParameterList *TList;
295 llvm::DINodeArray CollectTemplateParams(std::optional<TemplateArgs> Args,
299 llvm::DINodeArray CollectFunctionTemplateParams(
const FunctionDecl *FD,
304 llvm::DINodeArray CollectVarTemplateParams(
const VarDecl *VD,
307 std::optional<TemplateArgs> GetTemplateArgs(
const VarDecl *)
const;
308 std::optional<TemplateArgs> GetTemplateArgs(
const RecordDecl *)
const;
309 std::optional<TemplateArgs> GetTemplateArgs(
const FunctionDecl *)
const;
313 llvm::DINodeArray CollectCXXTemplateParams(
const RecordDecl *TS,
317 llvm::DINodeArray CollectBTFDeclTagAnnotations(
const Decl *D);
319 llvm::DIType *createFieldType(StringRef name, QualType
type,
321 uint64_t offsetInBits, uint32_t AlignInBits,
322 llvm::DIFile *tunit, llvm::DIScope *scope,
323 const RecordDecl *RD =
nullptr,
324 llvm::DINodeArray Annotations =
nullptr);
326 llvm::DIType *createFieldType(StringRef name, QualType
type,
328 uint64_t offsetInBits, llvm::DIFile *tunit,
329 llvm::DIScope *scope,
330 const RecordDecl *RD =
nullptr) {
331 return createFieldType(name,
type, loc, AS, offsetInBits, 0, tunit, scope,
336 llvm::DIDerivedType *createBitFieldType(
const FieldDecl *BitFieldDecl,
337 llvm::DIScope *RecordTy,
338 const RecordDecl *RD);
341 llvm::DIType *CreateBindingDeclType(
const BindingDecl *BD);
345 llvm::DIDerivedType *createBitFieldSeparatorIfNeeded(
346 const FieldDecl *BitFieldDecl,
const llvm::DIDerivedType *BitFieldDI,
351 void CollectRecordLambdaFields(
const CXXRecordDecl *CXXDecl,
352 SmallVectorImpl<llvm::Metadata *> &E,
353 llvm::DIType *RecordTy);
354 llvm::DIDerivedType *CreateRecordStaticField(
const VarDecl *Var,
355 llvm::DIType *RecordTy,
356 const RecordDecl *RD);
357 void CollectRecordNormalField(
const FieldDecl *Field, uint64_t OffsetInBits,
359 SmallVectorImpl<llvm::Metadata *> &E,
360 llvm::DIType *RecordTy,
const RecordDecl *RD);
361 void CollectRecordNestedType(
const TypeDecl *RD,
362 SmallVectorImpl<llvm::Metadata *> &E);
363 void CollectRecordFields(
const RecordDecl *
Decl, llvm::DIFile *F,
364 SmallVectorImpl<llvm::Metadata *> &E,
365 llvm::DICompositeType *RecordTy);
369 void CollectVTableInfo(
const CXXRecordDecl *
Decl, llvm::DIFile *F,
370 SmallVectorImpl<llvm::Metadata *> &EltTys);
374 void CreateLexicalBlock(SourceLocation Loc);
382 void AppendAddressSpaceXDeref(
unsigned AddressSpace,
383 SmallVectorImpl<uint64_t> &Expr)
const;
389 uint64_t collectDefaultElementTypesForBlockPointer(
390 const BlockPointerType *Ty, llvm::DIFile *Unit,
391 llvm::DIDerivedType *DescTy,
unsigned LineNo,
392 SmallVectorImpl<llvm::Metadata *> &EltTys);
396 void collectDefaultFieldsForBlockLiteralDeclare(
397 const CGBlockInfo &
Block,
const ASTContext &Context, SourceLocation Loc,
398 const llvm::StructLayout &BlockLayout, llvm::DIFile *Unit,
399 SmallVectorImpl<llvm::Metadata *> &Fields);
412 SizeExprCache[Ty] = SizeExpr;
441 void setInlinedAt(llvm::MDNode *InlinedAt) { CurInlinedAt = InlinedAt; }
463 llvm::Function *Fn,
bool CurFnIsThunk);
473 QualType FnType, llvm::Function *Fn =
nullptr);
496 llvm::DILocalVariable *
499 const bool UsePointerValue =
false);
508 const CGBlockInfo &blockInfo, llvm::Instruction *InsertPoint =
nullptr);
512 llvm::DILocalVariable *
514 CGBuilderTy &Builder,
bool UsePointerValue =
false);
519 StringRef Name,
unsigned ArgNo,
520 llvm::AllocaInst *LocalAddr,
602 return CoroutineParameterMappings;
609 llvm::DILocalVariable *EmitDeclare(
const VarDecl *
decl, llvm::Value *AI,
610 std::optional<unsigned> ArgNo,
612 const bool UsePointerValue =
false);
617 llvm::DILocalVariable *EmitDeclare(
const BindingDecl *
decl, llvm::Value *AI,
618 std::optional<unsigned> ArgNo,
620 const bool UsePointerValue =
false);
622 struct BlockByRefType {
624 llvm::DIType *BlockByRefWrapper;
626 llvm::DIType *WrappedType;
630 std::string GetName(
const Decl *,
bool Qualified =
false)
const;
633 BlockByRefType EmitTypeForVarWithBlocksAttr(
const VarDecl *VD,
637 llvm::DIScope *getDeclContextDescriptor(
const Decl *D);
639 llvm::DIScope *getContextDescriptor(
const Decl *Context,
642 llvm::DIScope *getCurrentContextDescriptor(
const Decl *
Decl);
645 llvm::DICompositeType *getOrCreateRecordFwdDecl(
const RecordType *,
649 StringRef getCurrentDirname();
652 void CreateCompileUnit();
655 std::optional<llvm::DIFile::ChecksumKind>
668 std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo,
669 std::optional<StringRef> Source);
672 llvm::DIType *getOrCreateType(
QualType Ty, llvm::DIFile *Fg);
677 bool CreateSkeletonCU);
680 llvm::DIModule *getParentModuleOrNull(
const Decl *D);
684 llvm::DICompositeType *getOrCreateLimitedType(
const RecordType *Ty);
687 llvm::DIType *CreateTypeNode(
QualType Ty, llvm::DIFile *Fg);
690 llvm::DIType *CreateMemberType(llvm::DIFile *Unit,
QualType FType,
691 StringRef Name, uint64_t *Offset);
695 llvm::DINode *getDeclarationOrDefinition(
const Decl *D);
699 llvm::DISubprogram *getFunctionDeclaration(
const Decl *D);
708 getObjCMethodDeclaration(
const Decl *D, llvm::DISubroutineType *FnType,
709 unsigned LineNo, llvm::DINode::DIFlags Flags,
710 llvm::DISubprogram::DISPFlags SPFlags);
716 llvm::DIDerivedType *
717 getOrCreateStaticDataMemberDeclarationOrNull(
const VarDecl *D);
720 llvm::DISubprogram *getFunctionFwdDeclOrStub(
GlobalDecl GD,
bool Stub);
724 llvm::DISubprogram *getFunctionForwardDeclaration(
GlobalDecl GD);
728 llvm::DISubprogram *getFunctionStub(
GlobalDecl GD);
732 llvm::DIGlobalVariable *
733 getGlobalVariableForwardDeclaration(
const VarDecl *VD);
742 llvm::DIGlobalVariableExpression *
743 CollectAnonRecordDecls(
const RecordDecl *RD, llvm::DIFile *Unit,
744 unsigned LineNo, StringRef LinkageName,
745 llvm::GlobalVariable *Var, llvm::DIScope *DContext);
750 llvm::DINode::DIFlags getCallSiteRelatedAttrs()
const;
766 StringRef getSelectorName(
Selector S);
776 StringRef getDynamicInitializerName(
const VarDecl *VD,
778 llvm::Function *InitFn);
791 void collectFunctionDeclProps(
GlobalDecl GD, llvm::DIFile *Unit,
792 StringRef &Name, StringRef &LinkageName,
793 llvm::DIScope *&FDContext,
794 llvm::DINodeArray &TParamsArray,
795 llvm::DINode::DIFlags &Flags);
798 void collectVarDeclProps(
const VarDecl *VD, llvm::DIFile *&Unit,
799 unsigned &LineNo,
QualType &
T, StringRef &Name,
800 StringRef &LinkageName,
801 llvm::MDTuple *&TemplateParameters,
802 llvm::DIScope *&VDContext);
806 llvm::DIExpression *createConstantValueExpression(
const clang::ValueDecl *VD,
812 StringRef internString(StringRef A, StringRef B = StringRef()) {
813 char *
Data = DebugInfoNames.Allocate<
char>(A.size() + B.size());
815 std::memcpy(
Data, A.data(), A.size());
817 std::memcpy(
Data + A.size(), B.data(), B.size());
818 return StringRef(
Data, A.size() + B.size());
826 void init(
SourceLocation TemporaryLocation,
bool DefaultToEmpty =
false);
830 llvm::DebugLoc OriginalLocation;
844 if (
this != &
Other) {
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
Defines the clang::Module class, which describes a module in the source code.
Defines the clang::SourceLocation class and associated facilities.
Allows QualTypes to be sorted and hence used in maps and sets.
TypePropertyCache< Private > Cache
C Language Family Type Representation.
APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat],...
Abstracts clang modules and precompiled header files and holds everything needed to generate debug in...
A binding in a decomposition declaration.
Represents a C++ struct/union/class.
llvm::iterator_range< base_class_const_iterator > base_class_const_range
Represents a class template specialization, which refers to a class template with a given set of temp...
A scoped helper to set the current debug location to the specified location or preferred location of ...
static ApplyDebugLocation CreateArtificial(CodeGenFunction &CGF)
Apply TemporaryLocation if it is valid.
static ApplyDebugLocation CreateDefaultArtificial(CodeGenFunction &CGF, SourceLocation TemporaryLocation)
Apply TemporaryLocation if it is valid.
ApplyDebugLocation(ApplyDebugLocation &&Other)
static ApplyDebugLocation CreateEmpty(CodeGenFunction &CGF)
Set the IRBuilder to not attach debug locations.
ApplyDebugLocation & operator=(ApplyDebugLocation &&Other)
A scoped helper to set the current debug location to an inlined location.
~ApplyInlineDebugLocation()
Restore everything back to the original state.
CGBlockInfo - Information to generate a block literal.
This class gathers all debug information during compilation and is responsible for emitting to llvm g...
llvm::MDNode * getInlinedAt() const
llvm::DIType * getOrCreateStandaloneType(QualType Ty, SourceLocation Loc)
Emit standalone debug info for a type.
void EmitLocation(CGBuilderTy &Builder, SourceLocation Loc)
Emit metadata to indicate a change in line/column information in the source file.
void EmitGlobalAlias(const llvm::GlobalValue *GV, const GlobalDecl Decl)
Emit information about global variable alias.
void EmitLabel(const LabelDecl *D, CGBuilderTy &Builder)
Emit call to llvm.dbg.label for an label.
void EmitGlobalVariable(llvm::GlobalVariable *GV, const VarDecl *Decl)
Emit information about a global variable.
void setInlinedAt(llvm::MDNode *InlinedAt)
Update the current inline scope.
void completeUnusedClass(const CXXRecordDecl &D)
SourceLocation getLocation() const
Return the current source location.
void EmitUsingShadowDecl(const UsingShadowDecl &USD)
Emit a shadow decl brought in by a using or using-enum.
void EmitUsingEnumDecl(const UsingEnumDecl &UD)
Emit C++ using-enum declaration.
void EmitFunctionEnd(CGBuilderTy &Builder, llvm::Function *Fn)
Constructs the debug code for exiting a function.
void EmitFuncDeclForCallSite(llvm::CallBase *CallOrInvoke, QualType CalleeType, const FunctionDecl *CalleeDecl)
Emit debug info for an extern function being called.
void EmitUsingDecl(const UsingDecl &UD)
Emit C++ using declaration.
llvm::DIMacroFile * CreateTempMacroFile(llvm::DIMacroFile *Parent, SourceLocation LineLoc, SourceLocation FileLoc)
Create debug info for a file referenced by an #include directive.
void completeTemplateDefinition(const ClassTemplateSpecializationDecl &SD)
void EmitExternalVariable(llvm::GlobalVariable *GV, const VarDecl *Decl)
Emit information about an external variable.
Param2DILocTy & getParamDbgMappings()
void emitFunctionStart(GlobalDecl GD, SourceLocation Loc, SourceLocation ScopeLoc, QualType FnType, llvm::Function *Fn, bool CurFnIsThunk)
Emit a call to llvm.dbg.function.start to indicate start of a new function.
llvm::DILocalVariable * EmitDeclareOfArgVariable(const VarDecl *Decl, llvm::Value *AI, unsigned ArgNo, CGBuilderTy &Builder, bool UsePointerValue=false)
Emit call to llvm.dbg.declare for an argument variable declaration.
void EmitLexicalBlockEnd(CGBuilderTy &Builder, SourceLocation Loc)
Emit metadata to indicate the end of a new lexical block and pop the current block.
void EmitUsingDirective(const UsingDirectiveDecl &UD)
Emit C++ using directive.
void completeRequiredType(const RecordDecl *RD)
void EmitAndRetainType(QualType Ty)
Emit the type even if it might not be used.
void EmitInlineFunctionEnd(CGBuilderTy &Builder)
End an inlined function scope.
ParamDecl2StmtTy & getCoroutineParameterMappings()
void EmitFunctionDecl(GlobalDecl GD, SourceLocation Loc, QualType FnType, llvm::Function *Fn=nullptr)
Emit debug info for a function declaration.
void AddStringLiteralDebugInfo(llvm::GlobalVariable *GV, const StringLiteral *S)
DebugInfo isn't attached to string literals by default.
llvm::DILocalVariable * EmitDeclareOfAutoVariable(const VarDecl *Decl, llvm::Value *AI, CGBuilderTy &Builder, const bool UsePointerValue=false)
Emit call to llvm.dbg.declare for an automatic variable declaration.
void completeClassData(const RecordDecl *RD)
void EmitInlineFunctionStart(CGBuilderTy &Builder, GlobalDecl GD)
Start a new scope for an inlined function.
void setModuleMap(ModuleMap &MMap)
When generating debug information for a clang module or precompiled header, this module map will be u...
void EmitImportDecl(const ImportDecl &ID)
Emit an @import declaration.
void EmitDeclareOfBlockLiteralArgVariable(const CGBlockInfo &block, StringRef Name, unsigned ArgNo, llvm::AllocaInst *LocalAddr, CGBuilderTy &Builder)
Emit call to llvm.dbg.declare for the block-literal argument to a block invocation function.
llvm::DebugLoc SourceLocToDebugLoc(SourceLocation Loc)
CGDebugInfo(CodeGenModule &CGM)
void completeClass(const RecordDecl *RD)
void EmitLexicalBlockStart(CGBuilderTy &Builder, SourceLocation Loc)
Emit metadata to indicate the beginning of a new lexical block and push the block onto the stack.
friend class SaveAndRestoreLocation
void setLocation(SourceLocation Loc)
Update the current source location.
llvm::DIMacro * CreateMacro(llvm::DIMacroFile *Parent, unsigned MType, SourceLocation LineLoc, StringRef Name, StringRef Value)
Create debug info for a macro defined by a #define directive or a macro undefined by a #undef directi...
llvm::DIType * getOrCreateRecordType(QualType Ty, SourceLocation L)
Emit record type's standalone debug info.
std::string remapDIPath(StringRef) const
Remap a given path with the current debug prefix map.
void EmitExplicitCastType(QualType Ty)
Emit the type explicitly casted to.
void addHeapAllocSiteMetadata(llvm::CallBase *CallSite, QualType AllocatedTy, SourceLocation Loc)
Add heapallocsite metadata for MSAllocator calls.
void setDwoId(uint64_t Signature)
Module debugging: Support for building PCMs.
QualType getFunctionType(const FunctionDecl *FD, QualType RetTy, const SmallVectorImpl< const VarDecl * > &Args)
llvm::DIType * getOrCreateInterfaceType(QualType Ty, SourceLocation Loc)
Emit an Objective-C interface type standalone debug info.
void setPCHDescriptor(ASTSourceDescriptor PCH)
When generating debug information for a clang module or precompiled header, this module map will be u...
void completeType(const EnumDecl *ED)
void registerVLASizeExpression(QualType Ty, llvm::Metadata *SizeExpr)
Register VLA size expression debug node with the qualified type.
void EmitDeclareOfBlockDeclRefVariable(const VarDecl *variable, llvm::Value *storage, CGBuilderTy &Builder, const CGBlockInfo &blockInfo, llvm::Instruction *InsertPoint=nullptr)
Emit call to llvm.dbg.declare for an imported variable declaration in a block.
llvm::DIImportedEntity * EmitNamespaceAlias(const NamespaceAliasDecl &NA)
Emit C++ namespace alias.
CodeGenFunction - This class organizes the per-function state that is used while generating LLVM code...
This class organizes the cross-function state that is used while generating LLVM code.
Decl - This represents one declaration (or definition), e.g.
This represents one expression.
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
Represents a function declaration or definition.
GlobalDecl - represents a global declaration.
Describes a module import declaration, which makes the contents of the named module visible in the cu...
Represents the declaration of a label.
Represents a C++ namespace alias.
ObjCMethodDecl - Represents an instance or class method declaration.
Callbacks to use to customize the behavior of the pretty-printer.
A (possibly-)qualified type.
Represents a struct/union/class.
A helper class that allows the use of isa/cast/dyncast to detect TagType objects of structs/unions/cl...
Smart pointer class that efficiently represents Objective-C method names.
Encodes a location in the source.
This class handles loading and caching of source files into memory.
StringLiteral - This represents a string literal expression, e.g.
Represents a C++ using-declaration.
Represents C++ using-directive.
Represents a C++ using-enum-declaration.
Represents a shadow declaration implicitly introduced into a scope by a (resolved) using-declaration ...
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.
@ Type
The l-value was considered opaque, so the alignment was determined from a type.
@ Decl
The l-value was an access to a declared entity or something equivalently strong, like the address of ...
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
const internal::VariadicAllOfMatcher< Decl > decl
Matches declarations.
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T
@ PCH
Disable validation for a precompiled header and the modules it depends on.
@ Other
Other implicit parameter.
AccessSpecifier
A C++ access specifier (public, private, protected), plus the special value "none" which means differ...
Diagnostic wrappers for TextAPI types for error reporting.
Describes how types, statements, expressions, and declarations should be printed.