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"
41class ClassTemplateSpecializationDecl;
45class ObjCInterfaceDecl;
62 const llvm::codegenoptions::DebugInfoKind DebugKind;
63 bool DebugTypeExtRefs;
64 llvm::DIBuilder DBuilder;
65 llvm::DICompileUnit *TheCU =
nullptr;
69 llvm::MDNode *CurInlinedAt =
nullptr;
70 llvm::DIType *VTablePtrType =
nullptr;
71 llvm::DIType *ClassTy =
nullptr;
72 llvm::DICompositeType *ObjTy =
nullptr;
73 llvm::DIType *SelTy =
nullptr;
74#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
75 llvm::DIType *SingletonId = nullptr;
76#include "clang/Basic/OpenCLImageTypes.def"
77 llvm::DIType *OCLSamplerDITy =
nullptr;
78 llvm::DIType *OCLEventDITy =
nullptr;
79 llvm::DIType *OCLClkEventDITy =
nullptr;
80 llvm::DIType *OCLQueueDITy =
nullptr;
81 llvm::DIType *OCLNDRangeDITy =
nullptr;
82 llvm::DIType *OCLReserveIDDITy =
nullptr;
83#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
84 llvm::DIType *Id##Ty = nullptr;
85#include "clang/Basic/OpenCLExtensionTypes.def"
86#define WASM_TYPE(Name, Id, SingletonId) llvm::DIType *SingletonId = nullptr;
87#include "clang/Basic/WebAssemblyReferenceTypes.def"
88#define AMDGPU_TYPE(Name, Id, SingletonId) llvm::DIType *SingletonId = nullptr;
89#include "clang/Basic/AMDGPUTypes.def"
92 llvm::DenseMap<const void *, llvm::TrackingMDRef> TypeCache;
96 llvm::SmallDenseMap<QualType, llvm::Metadata *> SizeExprCache;
100 const CGDebugInfo &Self;
103 PrintingCallbacks(
const CGDebugInfo &Self) : Self(Self) {}
104 std::string remapPath(StringRef
Path)
const override {
105 return Self.remapDIPath(
Path);
108 PrintingCallbacks PrintCB = {*
this};
110 struct ObjCInterfaceCacheEntry {
111 const ObjCInterfaceType *
Type;
114 ObjCInterfaceCacheEntry(
const ObjCInterfaceType *Type, llvm::DIType *Decl,
125 llvm::DenseMap<
const ObjCInterfaceDecl *,
126 std::vector<llvm::PointerIntPair<llvm::DISubprogram *, 1>>>
130 llvm::DenseMap<const Module *, llvm::TrackingMDRef> ModuleCache;
133 std::vector<void *> RetainedTypes;
136 std::vector<std::pair<const TagType *, llvm::TrackingMDRef>> ReplaceMap;
140 std::vector<std::pair<const DeclaratorDecl *, llvm::TrackingMDRef>>
144 std::vector<llvm::TypedTrackingMDRef<llvm::DIScope>> LexicalBlockStack;
145 llvm::DenseMap<const Decl *, llvm::TrackingMDRef> RegionMap;
149 std::vector<unsigned> FnBeginRegionCount;
153 llvm::BumpPtrAllocator DebugInfoNames;
156 llvm::DenseMap<const char *, llvm::TrackingMDRef> DIFileCache;
157 llvm::DenseMap<const FunctionDecl *, llvm::TrackingMDRef> SPCache;
161 llvm::DenseMap<const Decl *, llvm::TrackingMDRef> DeclCache;
162 llvm::DenseMap<const Decl *, llvm::TrackingMDRef> ImportedDeclCache;
163 llvm::DenseMap<const NamespaceDecl *, llvm::TrackingMDRef> NamespaceCache;
164 llvm::DenseMap<const NamespaceAliasDecl *, llvm::TrackingMDRef>
166 llvm::DenseMap<const Decl *, llvm::TypedTrackingMDRef<llvm::DIDerivedType>>
167 StaticDataMemberCache;
169 using ParamDecl2StmtTy = llvm::DenseMap<const ParmVarDecl *, const Stmt *>;
170 using Param2DILocTy =
171 llvm::DenseMap<const ParmVarDecl *, llvm::DILocalVariable *>;
174 ParamDecl2StmtTy CoroutineParameterMappings;
176 Param2DILocTy ParamDbgMappings;
182 llvm::DIType *CreateType(
const BuiltinType *Ty);
183 llvm::DIType *CreateType(
const ComplexType *Ty);
184 llvm::DIType *CreateType(
const BitIntType *Ty);
185 llvm::DIType *CreateQualifiedType(QualType Ty, llvm::DIFile *Fg);
186 llvm::DIType *CreateQualifiedType(
const FunctionProtoType *Ty,
188 llvm::DIType *CreateType(
const TypedefType *Ty, llvm::DIFile *Fg);
189 llvm::DIType *CreateType(
const TemplateSpecializationType *Ty,
191 llvm::DIType *CreateType(
const ObjCObjectPointerType *Ty, llvm::DIFile *F);
192 llvm::DIType *CreateType(
const PointerType *Ty, llvm::DIFile *F);
193 llvm::DIType *CreateType(
const BlockPointerType *Ty, llvm::DIFile *F);
194 llvm::DIType *CreateType(
const FunctionType *Ty, llvm::DIFile *F);
196 llvm::DIType *CreateType(
const RecordType *Tyg);
204 std::pair<llvm::DIType *, llvm::DIType *>
205 CreateTypeDefinition(
const RecordType *Ty);
206 llvm::DICompositeType *CreateLimitedType(
const RecordType *Ty);
207 void CollectContainingType(
const CXXRecordDecl *RD,
208 llvm::DICompositeType *CT);
210 llvm::DIType *CreateType(
const ObjCInterfaceType *Ty, llvm::DIFile *F);
211 llvm::DIType *CreateTypeDefinition(
const ObjCInterfaceType *Ty,
214 llvm::DIType *CreateType(
const ObjCObjectType *Ty, llvm::DIFile *F);
215 llvm::DIType *CreateType(
const ObjCTypeParamType *Ty, llvm::DIFile *Unit);
217 llvm::DIType *CreateType(
const VectorType *Ty, llvm::DIFile *F);
218 llvm::DIType *CreateType(
const ConstantMatrixType *Ty, llvm::DIFile *F);
219 llvm::DIType *CreateType(
const ArrayType *Ty, llvm::DIFile *F);
220 llvm::DIType *CreateType(
const LValueReferenceType *Ty, llvm::DIFile *F);
221 llvm::DIType *CreateType(
const RValueReferenceType *Ty, llvm::DIFile *Unit);
222 llvm::DIType *CreateType(
const MemberPointerType *Ty, llvm::DIFile *F);
223 llvm::DIType *CreateType(
const AtomicType *Ty, llvm::DIFile *F);
224 llvm::DIType *CreateType(
const PipeType *Ty, llvm::DIFile *F);
226 llvm::DIType *CreateEnumType(
const EnumType *Ty);
227 llvm::DIType *CreateTypeDefinition(
const EnumType *Ty);
234 llvm::DIType *CreateSelfType(
const QualType &QualTy, llvm::DIType *Ty);
239 llvm::DIType *getTypeOrNull(
const QualType);
244 llvm::DISubroutineType *getOrCreateMethodType(
const CXXMethodDecl *Method,
246 llvm::DISubroutineType *
247 getOrCreateInstanceMethodType(QualType ThisPtr,
const FunctionProtoType *
Func,
249 llvm::DISubroutineType *
250 getOrCreateFunctionType(
const Decl *
D, QualType FnType, llvm::DIFile *F);
252 llvm::DIType *getOrCreateVTablePtrType(llvm::DIFile *F);
255 llvm::DINamespace *getOrCreateNamespace(
const NamespaceDecl *N);
256 llvm::DIType *CreatePointerLikeType(llvm::dwarf::Tag Tag,
const Type *Ty,
257 QualType PointeeTy, llvm::DIFile *F);
258 llvm::DIType *getOrCreateStructPtrType(StringRef Name, llvm::DIType *&
Cache);
262 llvm::DISubprogram *CreateCXXMemberFunction(
const CXXMethodDecl *Method,
264 llvm::DIType *RecordTy);
269 void CollectCXXMemberFunctions(
const CXXRecordDecl *
Decl, llvm::DIFile *F,
270 SmallVectorImpl<llvm::Metadata *> &
E,
276 void CollectCXXBases(
const CXXRecordDecl *
Decl, llvm::DIFile *F,
277 SmallVectorImpl<llvm::Metadata *> &EltTys,
278 llvm::DIType *RecordTy);
282 void CollectCXXBasesAux(
283 const CXXRecordDecl *RD, llvm::DIFile *Unit,
284 SmallVectorImpl<llvm::Metadata *> &EltTys, llvm::DIType *RecordTy,
287 llvm::DINode::DIFlags StartingFlags);
292 llvm::DIType *GetPreferredNameType(
const CXXRecordDecl *RD,
295 struct TemplateArgs {
296 const TemplateParameterList *TList;
300 llvm::DINodeArray CollectTemplateParams(std::optional<TemplateArgs> Args,
304 llvm::DINodeArray CollectFunctionTemplateParams(
const FunctionDecl *FD,
309 llvm::DINodeArray CollectVarTemplateParams(
const VarDecl *VD,
312 std::optional<TemplateArgs> GetTemplateArgs(
const VarDecl *)
const;
313 std::optional<TemplateArgs> GetTemplateArgs(
const RecordDecl *)
const;
314 std::optional<TemplateArgs> GetTemplateArgs(
const FunctionDecl *)
const;
318 llvm::DINodeArray CollectCXXTemplateParams(
const RecordDecl *TS,
322 llvm::DINodeArray CollectBTFDeclTagAnnotations(
const Decl *
D);
324 llvm::DIType *createFieldType(StringRef name, QualType
type,
326 uint64_t offsetInBits, uint32_t AlignInBits,
327 llvm::DIFile *tunit, llvm::DIScope *scope,
328 const RecordDecl *RD =
nullptr,
329 llvm::DINodeArray Annotations =
nullptr);
331 llvm::DIType *createFieldType(StringRef name, QualType
type,
333 uint64_t offsetInBits, llvm::DIFile *tunit,
334 llvm::DIScope *scope,
335 const RecordDecl *RD =
nullptr) {
336 return createFieldType(name,
type, loc, AS, offsetInBits, 0, tunit, scope,
341 llvm::DIDerivedType *createBitFieldType(
const FieldDecl *BitFieldDecl,
342 llvm::DIScope *RecordTy,
343 const RecordDecl *RD);
347 llvm::DIDerivedType *createBitFieldSeparatorIfNeeded(
348 const FieldDecl *BitFieldDecl,
const llvm::DIDerivedType *BitFieldDI,
352 llvm::StringMap<llvm::DISubprogram *> InlinedTrapFuncMap;
356 llvm::DISubprogram *createInlinedTrapSubprogram(StringRef FuncName,
357 llvm::DIFile *FileScope);
361 void CollectRecordLambdaFields(
const CXXRecordDecl *CXXDecl,
362 SmallVectorImpl<llvm::Metadata *> &
E,
363 llvm::DIType *RecordTy);
364 llvm::DIDerivedType *CreateRecordStaticField(
const VarDecl *Var,
365 llvm::DIType *RecordTy,
366 const RecordDecl *RD);
367 void CollectRecordNormalField(
const FieldDecl *Field, uint64_t OffsetInBits,
369 SmallVectorImpl<llvm::Metadata *> &
E,
370 llvm::DIType *RecordTy,
const RecordDecl *RD);
371 void CollectRecordNestedType(
const TypeDecl *RD,
372 SmallVectorImpl<llvm::Metadata *> &
E);
373 void CollectRecordFields(
const RecordDecl *
Decl, llvm::DIFile *F,
374 SmallVectorImpl<llvm::Metadata *> &
E,
375 llvm::DICompositeType *RecordTy);
379 void CollectVTableInfo(
const CXXRecordDecl *
Decl, llvm::DIFile *F,
380 SmallVectorImpl<llvm::Metadata *> &EltTys);
384 void CreateLexicalBlock(SourceLocation
Loc);
392 void AppendAddressSpaceXDeref(
unsigned AddressSpace,
393 SmallVectorImpl<uint64_t> &Expr)
const;
399 uint64_t collectDefaultElementTypesForBlockPointer(
400 const BlockPointerType *Ty, llvm::DIFile *Unit,
401 llvm::DIDerivedType *DescTy,
unsigned LineNo,
402 SmallVectorImpl<llvm::Metadata *> &EltTys);
406 void collectDefaultFieldsForBlockLiteralDeclare(
407 const CGBlockInfo &
Block,
const ASTContext &Context, SourceLocation
Loc,
408 const llvm::StructLayout &BlockLayout, llvm::DIFile *Unit,
409 SmallVectorImpl<llvm::Metadata *> &Fields);
422 SizeExprCache[Ty] = SizeExpr;
451 void setInlinedAt(llvm::MDNode *InlinedAt) { CurInlinedAt = InlinedAt; }
473 llvm::Function *Fn,
bool CurFnIsThunk);
483 QualType FnType, llvm::Function *Fn =
nullptr);
506 llvm::DILocalVariable *
509 const bool UsePointerValue =
false);
518 const CGBlockInfo &blockInfo, llvm::Instruction *InsertPoint =
nullptr);
522 llvm::DILocalVariable *
524 CGBuilderTy &Builder,
bool UsePointerValue =
false);
529 StringRef Name,
unsigned ArgNo,
530 llvm::AllocaInst *LocalAddr,
618 return CoroutineParameterMappings;
631 StringRef FailureMsg);
637 llvm::DILocalVariable *EmitDeclare(
const VarDecl *
decl, llvm::Value *AI,
638 std::optional<unsigned> ArgNo,
640 const bool UsePointerValue =
false);
645 llvm::DILocalVariable *EmitDeclare(
const BindingDecl *
decl, llvm::Value *AI,
646 std::optional<unsigned> ArgNo,
648 const bool UsePointerValue =
false);
650 struct BlockByRefType {
652 llvm::DIType *BlockByRefWrapper;
654 llvm::DIType *WrappedType;
658 std::string GetName(
const Decl *,
bool Qualified =
false)
const;
661 BlockByRefType EmitTypeForVarWithBlocksAttr(
const VarDecl *VD,
665 llvm::DIScope *getDeclContextDescriptor(
const Decl *
D);
667 llvm::DIScope *getContextDescriptor(
const Decl *Context,
670 llvm::DIScope *getCurrentContextDescriptor(
const Decl *
Decl);
673 llvm::DICompositeType *getOrCreateRecordFwdDecl(
const RecordType *,
677 StringRef getCurrentDirname();
680 void CreateCompileUnit();
683 std::optional<llvm::DIFile::ChecksumKind>
696 std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo,
697 std::optional<StringRef> Source);
700 llvm::DIType *getOrCreateType(
QualType Ty, llvm::DIFile *Fg);
705 bool CreateSkeletonCU);
708 llvm::DIModule *getParentModuleOrNull(
const Decl *
D);
712 llvm::DICompositeType *getOrCreateLimitedType(
const RecordType *Ty);
715 llvm::DIType *CreateTypeNode(
QualType Ty, llvm::DIFile *Fg);
718 llvm::DIType *CreateMemberType(llvm::DIFile *Unit,
QualType FType,
719 StringRef Name, uint64_t *Offset);
723 llvm::DINode *getDeclarationOrDefinition(
const Decl *
D);
727 llvm::DISubprogram *getFunctionDeclaration(
const Decl *
D);
736 getObjCMethodDeclaration(
const Decl *
D, llvm::DISubroutineType *FnType,
737 unsigned LineNo, llvm::DINode::DIFlags Flags,
738 llvm::DISubprogram::DISPFlags SPFlags);
744 llvm::DIDerivedType *
745 getOrCreateStaticDataMemberDeclarationOrNull(
const VarDecl *
D);
748 llvm::DISubprogram *getFunctionFwdDeclOrStub(
GlobalDecl GD,
bool Stub);
752 llvm::DISubprogram *getFunctionForwardDeclaration(
GlobalDecl GD);
756 llvm::DISubprogram *getFunctionStub(
GlobalDecl GD);
760 llvm::DIGlobalVariable *
761 getGlobalVariableForwardDeclaration(
const VarDecl *VD);
770 llvm::DIGlobalVariableExpression *
771 CollectAnonRecordDecls(
const RecordDecl *RD, llvm::DIFile *Unit,
772 unsigned LineNo, StringRef LinkageName,
773 llvm::GlobalVariable *Var, llvm::DIScope *DContext);
778 llvm::DINode::DIFlags getCallSiteRelatedAttrs()
const;
794 StringRef getSelectorName(
Selector S);
804 StringRef getDynamicInitializerName(
const VarDecl *VD,
806 llvm::Function *InitFn);
819 void collectFunctionDeclProps(
GlobalDecl GD, llvm::DIFile *Unit,
820 StringRef &Name, StringRef &LinkageName,
821 llvm::DIScope *&FDContext,
822 llvm::DINodeArray &TParamsArray,
823 llvm::DINode::DIFlags &Flags);
826 void collectVarDeclProps(
const VarDecl *VD, llvm::DIFile *&Unit,
827 unsigned &LineNo,
QualType &
T, StringRef &Name,
828 StringRef &LinkageName,
829 llvm::MDTuple *&TemplateParameters,
830 llvm::DIScope *&VDContext);
834 llvm::DIExpression *createConstantValueExpression(
const clang::ValueDecl *VD,
840 StringRef internString(StringRef A, StringRef B = StringRef()) {
841 char *
Data = DebugInfoNames.Allocate<
char>(A.size() + B.size());
843 std::memcpy(
Data, A.data(), A.size());
845 std::memcpy(
Data + A.size(), B.data(), B.size());
846 return StringRef(
Data, A.size() + B.size());
854 void init(
SourceLocation TemporaryLocation,
bool DefaultToEmpty =
false);
858 llvm::DebugLoc OriginalLocation;
872 if (
this != &
Other) {
Defines the clang::ASTSourceDescriptor class, which abstracts clang modules and precompiled header fi...
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
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::DILocation * CreateTrapFailureMessageFor(llvm::DebugLoc TrapLocation, StringRef Category, StringRef FailureMsg)
Create a debug location from TrapLocation that adds an artificial inline frame where the frame name i...
llvm::DIType * getOrCreateRecordType(QualType Ty, SourceLocation L)
Emit record type's standalone debug info.
void EmitPseudoVariable(CGBuilderTy &Builder, llvm::Instruction *Value, QualType Ty)
Emit a pseudo variable and debug info for an intermediate value if it does not correspond to a variab...
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.
@ Module
Module linkage, which indicates that the entity can be referred to from other translation units withi...
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.