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, Width, Align) \
89 llvm::DIType *SingletonId = nullptr;
90#include "clang/Basic/AMDGPUTypes.def"
91#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) \
92 llvm::DIType *SingletonId = nullptr;
93#include "clang/Basic/HLSLIntangibleTypes.def"
96 llvm::DenseMap<const void *, llvm::TrackingMDRef> TypeCache;
100 llvm::SmallDenseMap<QualType, llvm::Metadata *> SizeExprCache;
104 const CGDebugInfo &Self;
107 PrintingCallbacks(
const CGDebugInfo &Self) : Self(Self) {}
108 std::string remapPath(StringRef
Path)
const override {
109 return Self.remapDIPath(
Path);
112 PrintingCallbacks PrintCB = {*
this};
114 struct ObjCInterfaceCacheEntry {
115 const ObjCInterfaceType *
Type;
118 ObjCInterfaceCacheEntry(
const ObjCInterfaceType *Type, llvm::DIType *Decl,
129 llvm::DenseMap<
const ObjCInterfaceDecl *,
130 std::vector<llvm::PointerIntPair<llvm::DISubprogram *, 1>>>
134 llvm::DenseMap<const Module *, llvm::TrackingMDRef> ModuleCache;
137 std::vector<void *> RetainedTypes;
140 std::vector<std::pair<const TagType *, llvm::TrackingMDRef>> ReplaceMap;
144 std::vector<std::pair<const DeclaratorDecl *, llvm::TrackingMDRef>>
148 std::vector<llvm::TypedTrackingMDRef<llvm::DIScope>> LexicalBlockStack;
149 llvm::DenseMap<const Decl *, llvm::TrackingMDRef> RegionMap;
153 std::vector<unsigned> FnBeginRegionCount;
157 llvm::BumpPtrAllocator DebugInfoNames;
160 llvm::DenseMap<const char *, llvm::TrackingMDRef> DIFileCache;
161 llvm::DenseMap<const FunctionDecl *, llvm::TrackingMDRef> SPCache;
165 llvm::DenseMap<const Decl *, llvm::TrackingMDRef> DeclCache;
166 llvm::DenseMap<const Decl *, llvm::TrackingMDRef> ImportedDeclCache;
167 llvm::DenseMap<const NamespaceDecl *, llvm::TrackingMDRef> NamespaceCache;
168 llvm::DenseMap<const NamespaceAliasDecl *, llvm::TrackingMDRef>
170 llvm::DenseMap<const Decl *, llvm::TypedTrackingMDRef<llvm::DIDerivedType>>
171 StaticDataMemberCache;
173 using ParamDecl2StmtTy = llvm::DenseMap<const ParmVarDecl *, const Stmt *>;
174 using Param2DILocTy =
175 llvm::DenseMap<const ParmVarDecl *, llvm::DILocalVariable *>;
178 ParamDecl2StmtTy CoroutineParameterMappings;
180 Param2DILocTy ParamDbgMappings;
186 llvm::DIType *CreateType(
const BuiltinType *Ty);
187 llvm::DIType *CreateType(
const ComplexType *Ty);
188 llvm::DIType *CreateType(
const BitIntType *Ty);
189 llvm::DIType *CreateQualifiedType(QualType Ty, llvm::DIFile *Fg);
190 llvm::DIType *CreateQualifiedType(
const FunctionProtoType *Ty,
192 llvm::DIType *CreateType(
const TypedefType *Ty, llvm::DIFile *Fg);
193 llvm::DIType *CreateType(
const TemplateSpecializationType *Ty,
195 llvm::DIType *CreateType(
const ObjCObjectPointerType *Ty, llvm::DIFile *F);
196 llvm::DIType *CreateType(
const PointerType *Ty, llvm::DIFile *F);
197 llvm::DIType *CreateType(
const BlockPointerType *Ty, llvm::DIFile *F);
198 llvm::DIType *CreateType(
const FunctionType *Ty, llvm::DIFile *F);
200 llvm::DIType *CreateType(
const RecordType *Tyg);
208 std::pair<llvm::DIType *, llvm::DIType *>
209 CreateTypeDefinition(
const RecordType *Ty);
210 llvm::DICompositeType *CreateLimitedType(
const RecordType *Ty);
211 void CollectContainingType(
const CXXRecordDecl *RD,
212 llvm::DICompositeType *CT);
214 llvm::DIType *CreateType(
const ObjCInterfaceType *Ty, llvm::DIFile *F);
215 llvm::DIType *CreateTypeDefinition(
const ObjCInterfaceType *Ty,
218 llvm::DIType *CreateType(
const ObjCObjectType *Ty, llvm::DIFile *F);
219 llvm::DIType *CreateType(
const ObjCTypeParamType *Ty, llvm::DIFile *Unit);
221 llvm::DIType *CreateType(
const VectorType *Ty, llvm::DIFile *F);
222 llvm::DIType *CreateType(
const ConstantMatrixType *Ty, llvm::DIFile *F);
223 llvm::DIType *CreateType(
const ArrayType *Ty, llvm::DIFile *F);
224 llvm::DIType *CreateType(
const LValueReferenceType *Ty, llvm::DIFile *F);
225 llvm::DIType *CreateType(
const RValueReferenceType *Ty, llvm::DIFile *Unit);
226 llvm::DIType *CreateType(
const MemberPointerType *Ty, llvm::DIFile *F);
227 llvm::DIType *CreateType(
const AtomicType *Ty, llvm::DIFile *F);
228 llvm::DIType *CreateType(
const PipeType *Ty, llvm::DIFile *F);
230 llvm::DIType *CreateEnumType(
const EnumType *Ty);
231 llvm::DIType *CreateTypeDefinition(
const EnumType *Ty);
238 llvm::DIType *CreateSelfType(
const QualType &QualTy, llvm::DIType *Ty);
243 llvm::DIType *getTypeOrNull(
const QualType);
248 llvm::DISubroutineType *getOrCreateMethodType(
const CXXMethodDecl *Method,
250 llvm::DISubroutineType *
251 getOrCreateInstanceMethodType(QualType ThisPtr,
const FunctionProtoType *
Func,
253 llvm::DISubroutineType *
254 getOrCreateFunctionType(
const Decl *
D, QualType FnType, llvm::DIFile *F);
256 llvm::DIType *getOrCreateVTablePtrType(llvm::DIFile *F);
259 llvm::DINamespace *getOrCreateNamespace(
const NamespaceDecl *N);
260 llvm::DIType *CreatePointerLikeType(llvm::dwarf::Tag Tag,
const Type *Ty,
261 QualType PointeeTy, llvm::DIFile *F);
262 llvm::DIType *getOrCreateStructPtrType(StringRef Name, llvm::DIType *&
Cache);
266 llvm::DISubprogram *CreateCXXMemberFunction(
const CXXMethodDecl *Method,
268 llvm::DIType *RecordTy);
273 void CollectCXXMemberFunctions(
const CXXRecordDecl *
Decl, llvm::DIFile *F,
274 SmallVectorImpl<llvm::Metadata *> &
E,
280 void CollectCXXBases(
const CXXRecordDecl *
Decl, llvm::DIFile *F,
281 SmallVectorImpl<llvm::Metadata *> &EltTys,
282 llvm::DIType *RecordTy);
286 void CollectCXXBasesAux(
287 const CXXRecordDecl *RD, llvm::DIFile *Unit,
288 SmallVectorImpl<llvm::Metadata *> &EltTys, llvm::DIType *RecordTy,
290 llvm::DenseSet<CanonicalDeclPtr<const CXXRecordDecl>> &SeenTypes,
291 llvm::DINode::DIFlags StartingFlags);
296 llvm::DIType *GetPreferredNameType(
const CXXRecordDecl *RD,
299 struct TemplateArgs {
300 const TemplateParameterList *TList;
304 llvm::DINodeArray CollectTemplateParams(std::optional<TemplateArgs> Args,
308 llvm::DINodeArray CollectFunctionTemplateParams(
const FunctionDecl *FD,
313 llvm::DINodeArray CollectVarTemplateParams(
const VarDecl *VD,
316 std::optional<TemplateArgs> GetTemplateArgs(
const VarDecl *)
const;
317 std::optional<TemplateArgs> GetTemplateArgs(
const RecordDecl *)
const;
318 std::optional<TemplateArgs> GetTemplateArgs(
const FunctionDecl *)
const;
322 llvm::DINodeArray CollectCXXTemplateParams(
const RecordDecl *TS,
326 llvm::DINodeArray CollectBTFDeclTagAnnotations(
const Decl *
D);
328 llvm::DIType *createFieldType(StringRef name, QualType
type,
330 uint64_t offsetInBits, uint32_t AlignInBits,
331 llvm::DIFile *tunit, llvm::DIScope *scope,
332 const RecordDecl *RD =
nullptr,
333 llvm::DINodeArray Annotations =
nullptr);
335 llvm::DIType *createFieldType(StringRef name, QualType
type,
337 uint64_t offsetInBits, llvm::DIFile *tunit,
338 llvm::DIScope *scope,
339 const RecordDecl *RD =
nullptr) {
340 return createFieldType(name,
type, loc, AS, offsetInBits, 0, tunit, scope,
345 llvm::DIDerivedType *createBitFieldType(
const FieldDecl *BitFieldDecl,
346 llvm::DIScope *RecordTy,
347 const RecordDecl *RD);
351 llvm::DIDerivedType *createBitFieldSeparatorIfNeeded(
352 const FieldDecl *BitFieldDecl,
const llvm::DIDerivedType *BitFieldDI,
356 llvm::StringMap<llvm::DISubprogram *> InlinedTrapFuncMap;
360 llvm::DISubprogram *createInlinedTrapSubprogram(StringRef FuncName,
361 llvm::DIFile *FileScope);
365 void CollectRecordLambdaFields(
const CXXRecordDecl *CXXDecl,
366 SmallVectorImpl<llvm::Metadata *> &
E,
367 llvm::DIType *RecordTy);
368 llvm::DIDerivedType *CreateRecordStaticField(
const VarDecl *Var,
369 llvm::DIType *RecordTy,
370 const RecordDecl *RD);
371 void CollectRecordNormalField(
const FieldDecl *Field, uint64_t OffsetInBits,
373 SmallVectorImpl<llvm::Metadata *> &
E,
374 llvm::DIType *RecordTy,
const RecordDecl *RD);
375 void CollectRecordNestedType(
const TypeDecl *RD,
376 SmallVectorImpl<llvm::Metadata *> &
E);
377 void CollectRecordFields(
const RecordDecl *
Decl, llvm::DIFile *F,
378 SmallVectorImpl<llvm::Metadata *> &
E,
379 llvm::DICompositeType *RecordTy);
383 void CollectVTableInfo(
const CXXRecordDecl *
Decl, llvm::DIFile *F,
384 SmallVectorImpl<llvm::Metadata *> &EltTys);
388 void CreateLexicalBlock(SourceLocation
Loc);
396 void AppendAddressSpaceXDeref(
unsigned AddressSpace,
397 SmallVectorImpl<uint64_t> &Expr)
const;
403 uint64_t collectDefaultElementTypesForBlockPointer(
404 const BlockPointerType *Ty, llvm::DIFile *Unit,
405 llvm::DIDerivedType *DescTy,
unsigned LineNo,
406 SmallVectorImpl<llvm::Metadata *> &EltTys);
410 void collectDefaultFieldsForBlockLiteralDeclare(
411 const CGBlockInfo &
Block,
const ASTContext &Context, SourceLocation
Loc,
412 const llvm::StructLayout &BlockLayout, llvm::DIFile *Unit,
413 SmallVectorImpl<llvm::Metadata *> &Fields);
426 SizeExprCache[Ty] = SizeExpr;
455 void setInlinedAt(llvm::MDNode *InlinedAt) { CurInlinedAt = InlinedAt; }
477 llvm::Function *Fn,
bool CurFnIsThunk);
487 QualType FnType, llvm::Function *Fn =
nullptr);
510 llvm::DILocalVariable *
513 const bool UsePointerValue =
false);
522 const CGBlockInfo &blockInfo, llvm::Instruction *InsertPoint =
nullptr);
526 llvm::DILocalVariable *
528 CGBuilderTy &Builder,
bool UsePointerValue =
false);
533 StringRef Name,
unsigned ArgNo,
534 llvm::AllocaInst *LocalAddr,
622 return CoroutineParameterMappings;
635 StringRef FailureMsg);
641 llvm::DILocalVariable *EmitDeclare(
const VarDecl *
decl, llvm::Value *AI,
642 std::optional<unsigned> ArgNo,
644 const bool UsePointerValue =
false);
649 llvm::DILocalVariable *EmitDeclare(
const BindingDecl *
decl, llvm::Value *AI,
650 std::optional<unsigned> ArgNo,
652 const bool UsePointerValue =
false);
654 struct BlockByRefType {
656 llvm::DIType *BlockByRefWrapper;
658 llvm::DIType *WrappedType;
662 std::string GetName(
const Decl *,
bool Qualified =
false)
const;
665 BlockByRefType EmitTypeForVarWithBlocksAttr(
const VarDecl *VD,
669 llvm::DIScope *getDeclContextDescriptor(
const Decl *
D);
671 llvm::DIScope *getContextDescriptor(
const Decl *Context,
674 llvm::DIScope *getCurrentContextDescriptor(
const Decl *
Decl);
677 llvm::DICompositeType *getOrCreateRecordFwdDecl(
const RecordType *,
681 StringRef getCurrentDirname();
684 void CreateCompileUnit();
687 std::optional<llvm::DIFile::ChecksumKind>
700 std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo,
701 std::optional<StringRef> Source);
704 llvm::DIType *getOrCreateType(
QualType Ty, llvm::DIFile *Fg);
709 bool CreateSkeletonCU);
712 llvm::DIModule *getParentModuleOrNull(
const Decl *
D);
716 llvm::DICompositeType *getOrCreateLimitedType(
const RecordType *Ty);
719 llvm::DIType *CreateTypeNode(
QualType Ty, llvm::DIFile *Fg);
722 llvm::DIType *CreateMemberType(llvm::DIFile *Unit,
QualType FType,
723 StringRef Name, uint64_t *Offset);
727 llvm::DINode *getDeclarationOrDefinition(
const Decl *
D);
731 llvm::DISubprogram *getFunctionDeclaration(
const Decl *
D);
740 getObjCMethodDeclaration(
const Decl *
D, llvm::DISubroutineType *FnType,
741 unsigned LineNo, llvm::DINode::DIFlags Flags,
742 llvm::DISubprogram::DISPFlags SPFlags);
748 llvm::DIDerivedType *
749 getOrCreateStaticDataMemberDeclarationOrNull(
const VarDecl *
D);
752 llvm::DISubprogram *getFunctionFwdDeclOrStub(
GlobalDecl GD,
bool Stub);
756 llvm::DISubprogram *getFunctionForwardDeclaration(
GlobalDecl GD);
760 llvm::DISubprogram *getFunctionStub(
GlobalDecl GD);
764 llvm::DIGlobalVariable *
765 getGlobalVariableForwardDeclaration(
const VarDecl *VD);
774 llvm::DIGlobalVariableExpression *
775 CollectAnonRecordDecls(
const RecordDecl *RD, llvm::DIFile *Unit,
776 unsigned LineNo, StringRef LinkageName,
777 llvm::GlobalVariable *Var, llvm::DIScope *DContext);
782 llvm::DINode::DIFlags getCallSiteRelatedAttrs()
const;
798 StringRef getSelectorName(
Selector S);
808 StringRef getDynamicInitializerName(
const VarDecl *VD,
810 llvm::Function *InitFn);
823 void collectFunctionDeclProps(
GlobalDecl GD, llvm::DIFile *Unit,
824 StringRef &Name, StringRef &LinkageName,
825 llvm::DIScope *&FDContext,
826 llvm::DINodeArray &TParamsArray,
827 llvm::DINode::DIFlags &Flags);
830 void collectVarDeclProps(
const VarDecl *VD, llvm::DIFile *&Unit,
831 unsigned &LineNo,
QualType &
T, StringRef &Name,
832 StringRef &LinkageName,
833 llvm::MDTuple *&TemplateParameters,
834 llvm::DIScope *&VDContext);
838 llvm::DIExpression *createConstantValueExpression(
const clang::ValueDecl *VD,
844 StringRef internString(StringRef A, StringRef B = StringRef()) {
845 char *
Data = DebugInfoNames.Allocate<
char>(A.size() + B.size());
847 std::memcpy(
Data, A.data(), A.size());
849 std::memcpy(
Data + A.size(), B.data(), B.size());
850 return StringRef(
Data, A.size() + B.size());
858 void init(
SourceLocation TemporaryLocation,
bool DefaultToEmpty =
false);
862 llvm::DebugLoc OriginalLocation;
876 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.