clang  16.0.0git
Classes | Public Member Functions | Friends | List of all members
clang::CodeGen::CGDebugInfo Class Reference

This class gathers all debug information during compilation and is responsible for emitting to llvm globals or pass directly to the backend. More...

#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/CodeGen/CGDebugInfo.h"

Public Member Functions

 CGDebugInfo (CodeGenModule &CGM)
 
 ~CGDebugInfo ()
 
void finalize ()
 
std::string remapDIPath (StringRef) const
 Remap a given path with the current debug prefix map. More...
 
void registerVLASizeExpression (QualType Ty, llvm::Metadata *SizeExpr)
 Register VLA size expression debug node with the qualified type. More...
 
void setLocation (SourceLocation Loc)
 Update the current source location. More...
 
SourceLocation getLocation () const
 Return the current source location. More...
 
void setInlinedAt (llvm::MDNode *InlinedAt)
 Update the current inline scope. More...
 
llvm::MDNode * getInlinedAt () const
 
llvm::DebugLoc SourceLocToDebugLoc (SourceLocation Loc)
 
void EmitLocation (CGBuilderTy &Builder, SourceLocation Loc)
 Emit metadata to indicate a change in line/column information in the source file. More...
 
QualType getFunctionType (const FunctionDecl *FD, QualType RetTy, const SmallVectorImpl< const VarDecl * > &Args)
 
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. More...
 
void EmitInlineFunctionStart (CGBuilderTy &Builder, GlobalDecl GD)
 Start a new scope for an inlined function. More...
 
void EmitInlineFunctionEnd (CGBuilderTy &Builder)
 End an inlined function scope. More...
 
void EmitFunctionDecl (GlobalDecl GD, SourceLocation Loc, QualType FnType, llvm::Function *Fn=nullptr)
 Emit debug info for a function declaration. More...
 
void EmitFuncDeclForCallSite (llvm::CallBase *CallOrInvoke, QualType CalleeType, const FunctionDecl *CalleeDecl)
 Emit debug info for an extern function being called. More...
 
void EmitFunctionEnd (CGBuilderTy &Builder, llvm::Function *Fn)
 Constructs the debug code for exiting a function. More...
 
void EmitLexicalBlockStart (CGBuilderTy &Builder, SourceLocation Loc)
 Emit metadata to indicate the beginning of a new lexical block and push the block onto the stack. More...
 
void EmitLexicalBlockEnd (CGBuilderTy &Builder, SourceLocation Loc)
 Emit metadata to indicate the end of a new lexical block and pop the current block. More...
 
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. More...
 
void EmitLabel (const LabelDecl *D, CGBuilderTy &Builder)
 Emit call to llvm.dbg.label for an label. More...
 
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. More...
 
llvm::DILocalVariable * EmitDeclareOfArgVariable (const VarDecl *Decl, llvm::Value *AI, unsigned ArgNo, CGBuilderTy &Builder)
 Emit call to llvm.dbg.declare for an argument variable declaration. More...
 
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. More...
 
void EmitGlobalVariable (llvm::GlobalVariable *GV, const VarDecl *Decl)
 Emit information about a global variable. More...
 
void EmitGlobalVariable (const ValueDecl *VD, const APValue &Init)
 Emit a constant global variable's debug info. More...
 
void EmitExternalVariable (llvm::GlobalVariable *GV, const VarDecl *Decl)
 Emit information about an external variable. More...
 
void EmitGlobalAlias (const llvm::GlobalValue *GV, const GlobalDecl Decl)
 Emit information about global variable alias. More...
 
void EmitUsingDirective (const UsingDirectiveDecl &UD)
 Emit C++ using directive. More...
 
void EmitExplicitCastType (QualType Ty)
 Emit the type explicitly casted to. More...
 
void EmitAndRetainType (QualType Ty)
 Emit the type even if it might not be used. More...
 
void EmitUsingShadowDecl (const UsingShadowDecl &USD)
 Emit a shadow decl brought in by a using or using-enum. More...
 
void EmitUsingDecl (const UsingDecl &UD)
 Emit C++ using declaration. More...
 
void EmitUsingEnumDecl (const UsingEnumDecl &UD)
 Emit C++ using-enum declaration. More...
 
void EmitImportDecl (const ImportDecl &ID)
 Emit an @import declaration. More...
 
void AddStringLiteralDebugInfo (llvm::GlobalVariable *GV, const StringLiteral *S)
 DebugInfo isn't attached to string literals by default. More...
 
llvm::DIImportedEntity * EmitNamespaceAlias (const NamespaceAliasDecl &NA)
 Emit C++ namespace alias. More...
 
llvm::DIType * getOrCreateRecordType (QualType Ty, SourceLocation L)
 Emit record type's standalone debug info. More...
 
llvm::DIType * getOrCreateInterfaceType (QualType Ty, SourceLocation Loc)
 Emit an Objective-C interface type standalone debug info. More...
 
llvm::DIType * getOrCreateStandaloneType (QualType Ty, SourceLocation Loc)
 Emit standalone debug info for a type. More...
 
void addHeapAllocSiteMetadata (llvm::CallBase *CallSite, QualType AllocatedTy, SourceLocation Loc)
 Add heapallocsite metadata for MSAllocator calls. More...
 
void completeType (const EnumDecl *ED)
 
void completeType (const RecordDecl *RD)
 
void completeRequiredType (const RecordDecl *RD)
 
void completeClassData (const RecordDecl *RD)
 
void completeClass (const RecordDecl *RD)
 
void completeTemplateDefinition (const ClassTemplateSpecializationDecl &SD)
 
void completeUnusedClass (const CXXRecordDecl &D)
 
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 directive. More...
 
llvm::DIMacroFile * CreateTempMacroFile (llvm::DIMacroFile *Parent, SourceLocation LineLoc, SourceLocation FileLoc)
 Create debug info for a file referenced by an include directive. More...
 
Param2DILocTy & getParamDbgMappings ()
 
ParamDecl2StmtTy & getCoroutineParameterMappings ()
 
void setDwoId (uint64_t Signature)
 Module debugging: Support for building PCMs. More...
 
void setModuleMap (ModuleMap &MMap)
 When generating debug information for a clang module or precompiled header, this module map will be used to determine the module of origin of each Decl. More...
 
void setPCHDescriptor (ASTSourceDescriptor PCH)
 When generating debug information for a clang module or precompiled header, this module map will be used to determine the module of origin of each Decl. More...
 

Friends

class ApplyDebugLocation
 
class SaveAndRestoreLocation
 

Detailed Description

This class gathers all debug information during compilation and is responsible for emitting to llvm globals or pass directly to the backend.

Definition at line 55 of file CGDebugInfo.h.

Constructor & Destructor Documentation

◆ CGDebugInfo()

CGDebugInfo::CGDebugInfo ( CodeGenModule CGM)

◆ ~CGDebugInfo()

CGDebugInfo::~CGDebugInfo ( )

Definition at line 79 of file CGDebugInfo.cpp.

Member Function Documentation

◆ addHeapAllocSiteMetadata()

void CGDebugInfo::addHeapAllocSiteMetadata ( llvm::CallBase *  CallSite,
QualType  AllocatedTy,
SourceLocation  Loc 
)

◆ AddStringLiteralDebugInfo()

void CGDebugInfo::AddStringLiteralDebugInfo ( llvm::GlobalVariable *  GV,
const StringLiteral S 
)

DebugInfo isn't attached to string literals by default.

While certain aspects of debuginfo aren't useful for string literals (like a name), it's nice to be able to symbolize the line and column information. This is especially useful for sanitizers, as it allows symbolization of heap-buffer-overflows on constant strings.

Definition at line 5466 of file CGDebugInfo.cpp.

◆ completeClass()

void CGDebugInfo::completeClass ( const RecordDecl RD)

◆ completeClassData()

void CGDebugInfo::completeClassData ( const RecordDecl RD)

◆ completeRequiredType()

void CGDebugInfo::completeRequiredType ( const RecordDecl RD)

◆ completeTemplateDefinition()

void CGDebugInfo::completeTemplateDefinition ( const ClassTemplateSpecializationDecl SD)

Definition at line 3351 of file CGDebugInfo.cpp.

References completeUnusedClass().

◆ completeType() [1/2]

void CGDebugInfo::completeType ( const EnumDecl ED)

◆ completeType() [2/2]

void CGDebugInfo::completeType ( const RecordDecl RD)

◆ completeUnusedClass()

void CGDebugInfo::completeUnusedClass ( const CXXRecordDecl D)

◆ CreateMacro()

llvm::DIMacro * CGDebugInfo::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 directive.

Definition at line 3253 of file CGDebugInfo.cpp.

Referenced by clang::MacroPPCallbacks::MacroUndefined().

◆ CreateTempMacroFile()

llvm::DIMacroFile * CGDebugInfo::CreateTempMacroFile ( llvm::DIMacroFile *  Parent,
SourceLocation  LineLoc,
SourceLocation  FileLoc 
)

Create debug info for a file referenced by an include directive.

Definition at line 3260 of file CGDebugInfo.cpp.

References clang::SourceLocation::isInvalid(), Line, and Parent.

◆ EmitAndRetainType()

void CGDebugInfo::EmitAndRetainType ( QualType  Ty)

Emit the type even if it might not be used.

Definition at line 5692 of file CGDebugInfo.cpp.

◆ EmitDeclareOfArgVariable()

llvm::DILocalVariable * CGDebugInfo::EmitDeclareOfArgVariable ( const VarDecl Decl,
llvm::Value *  AI,
unsigned  ArgNo,
CGBuilderTy Builder 
)

Emit call to llvm.dbg.declare for an argument variable declaration.

Definition at line 4804 of file CGDebugInfo.cpp.

◆ EmitDeclareOfAutoVariable()

llvm::DILocalVariable * CGDebugInfo::EmitDeclareOfAutoVariable ( const VarDecl Decl,
llvm::Value *  AI,
CGBuilderTy Builder,
const bool  UsePointerValue = false 
)

Emit call to llvm.dbg.declare for an automatic variable declaration.

Returns a pointer to the DILocalVariable associated with the llvm.dbg.declare, or nullptr otherwise.

Definition at line 4682 of file CGDebugInfo.cpp.

◆ EmitDeclareOfBlockDeclRefVariable()

void CGDebugInfo::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.

Definition at line 4731 of file CGDebugInfo.cpp.

◆ EmitDeclareOfBlockLiteralArgVariable()

void CGDebugInfo::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.

Definition at line 4858 of file CGDebugInfo.cpp.

◆ EmitExplicitCastType()

void CGDebugInfo::EmitExplicitCastType ( QualType  Ty)

Emit the type explicitly casted to.

Definition at line 5686 of file CGDebugInfo.cpp.

◆ EmitExternalVariable()

void CGDebugInfo::EmitExternalVariable ( llvm::GlobalVariable *  GV,
const VarDecl Decl 
)

Emit information about an external variable.

Definition at line 5406 of file CGDebugInfo.cpp.

References getDeclAlignIfRequired(), clang::Decl::getLocation(), and clang::Decl::hasAttr().

◆ EmitFuncDeclForCallSite()

void CGDebugInfo::EmitFuncDeclForCallSite ( llvm::CallBase *  CallOrInvoke,
QualType  CalleeType,
const FunctionDecl CalleeDecl 
)

Emit debug info for an extern function being called.

This is needed for call site debug info.

Definition at line 4218 of file CGDebugInfo.cpp.

References EmitFunctionDecl(), clang::Decl::getLocation(), clang::Decl::hasAttr(), clang::FunctionDecl::isInlined(), and clang::FunctionDecl::isStatic().

◆ EmitFunctionDecl()

void CGDebugInfo::EmitFunctionDecl ( GlobalDecl  GD,
SourceLocation  Loc,
QualType  FnType,
llvm::Function *  Fn = nullptr 
)

Emit debug info for a function declaration.

Fn is set only when a declaration for a debug call site gets created.

Definition at line 4162 of file CGDebugInfo.cpp.

Referenced by EmitFuncDeclForCallSite().

◆ EmitFunctionEnd()

void CGDebugInfo::EmitFunctionEnd ( CGBuilderTy Builder,
llvm::Function *  Fn 
)

Constructs the debug code for exiting a function.

Definition at line 4328 of file CGDebugInfo.cpp.

◆ emitFunctionStart()

void CGDebugInfo::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.

Parameters
LocThe location of the function header.
ScopeLocThe location of the function body.

Definition at line 4053 of file CGDebugInfo.cpp.

◆ EmitGlobalAlias()

void CGDebugInfo::EmitGlobalAlias ( const llvm::GlobalValue *  GV,
const GlobalDecl  Decl 
)

Emit information about global variable alias.

Definition at line 5425 of file CGDebugInfo.cpp.

References clang::GlobalDecl::getCanonicalDecl(), clang::GlobalDecl::getDecl(), clang::Decl::getLocation(), and clang::Decl::hasAttr().

◆ EmitGlobalVariable() [1/2]

void CGDebugInfo::EmitGlobalVariable ( const ValueDecl VD,
const APValue Init 
)

Emit a constant global variable's debug info.

Definition at line 5321 of file CGDebugInfo.cpp.

References getDeclAlignIfRequired(), clang::Decl::getLocation(), and clang::Decl::hasAttr().

◆ EmitGlobalVariable() [2/2]

void CGDebugInfo::EmitGlobalVariable ( llvm::GlobalVariable *  GV,
const VarDecl Decl 
)

◆ EmitImportDecl()

void CGDebugInfo::EmitImportDecl ( const ImportDecl ID)

Emit an @import declaration.

Definition at line 5549 of file CGDebugInfo.cpp.

◆ EmitInlineFunctionEnd()

void CGDebugInfo::EmitInlineFunctionEnd ( CGBuilderTy Builder)

End an inlined function scope.

Definition at line 4257 of file CGDebugInfo.cpp.

Referenced by clang::CodeGen::ApplyInlineDebugLocation::~ApplyInlineDebugLocation().

◆ EmitInlineFunctionStart()

void CGDebugInfo::EmitInlineFunctionStart ( CGBuilderTy Builder,
GlobalDecl  GD 
)

Start a new scope for an inlined function.

Definition at line 4242 of file CGDebugInfo.cpp.

◆ EmitLabel()

void CGDebugInfo::EmitLabel ( const LabelDecl D,
CGBuilderTy Builder 
)

Emit call to llvm.dbg.label for an label.

Definition at line 4696 of file CGDebugInfo.cpp.

◆ EmitLexicalBlockEnd()

void CGDebugInfo::EmitLexicalBlockEnd ( CGBuilderTy Builder,
SourceLocation  Loc 
)

Emit metadata to indicate the end of a new lexical block and pop the current block.

Definition at line 4315 of file CGDebugInfo.cpp.

◆ EmitLexicalBlockStart()

void CGDebugInfo::EmitLexicalBlockStart ( CGBuilderTy Builder,
SourceLocation  Loc 
)

Emit metadata to indicate the beginning of a new lexical block and push the block onto the stack.

Definition at line 4298 of file CGDebugInfo.cpp.

◆ EmitLocation()

void CGDebugInfo::EmitLocation ( CGBuilderTy Builder,
SourceLocation  Loc 
)

Emit metadata to indicate a change in line/column information in the source file.

If the location is invalid, the previous location will be reused.

Definition at line 4263 of file CGDebugInfo.cpp.

◆ EmitNamespaceAlias()

llvm::DIImportedEntity * CGDebugInfo::EmitNamespaceAlias ( const NamespaceAliasDecl NA)

◆ EmitUsingDecl()

void CGDebugInfo::EmitUsingDecl ( const UsingDecl UD)

Emit C++ using declaration.

Definition at line 5513 of file CGDebugInfo.cpp.

References clang::Type::getContainedAutoType(), clang::BaseUsingDecl::shadow_size(), and clang::BaseUsingDecl::shadows().

◆ EmitUsingDirective()

void CGDebugInfo::EmitUsingDirective ( const UsingDirectiveDecl UD)

◆ EmitUsingEnumDecl()

void CGDebugInfo::EmitUsingEnumDecl ( const UsingEnumDecl UD)

Emit C++ using-enum declaration.

Definition at line 5538 of file CGDebugInfo.cpp.

References clang::BaseUsingDecl::shadow_size(), and clang::BaseUsingDecl::shadows().

◆ EmitUsingShadowDecl()

void CGDebugInfo::EmitUsingShadowDecl ( const UsingShadowDecl USD)

Emit a shadow decl brought in by a using or using-enum.

Definition at line 5503 of file CGDebugInfo.cpp.

References clang::Decl::getDeclContext(), clang::Decl::getLocation(), clang::NamedDecl::getUnderlyingDecl(), and clang::Target.

◆ finalize()

void CGDebugInfo::finalize ( )

Definition at line 5609 of file CGDebugInfo.cpp.

References clang::QualType::getAsOpaquePtr(), and P.

◆ getCoroutineParameterMappings()

ParamDecl2StmtTy& clang::CodeGen::CGDebugInfo::getCoroutineParameterMappings ( )
inline

Definition at line 580 of file CGDebugInfo.h.

◆ getFunctionType()

QualType CGDebugInfo::getFunctionType ( const FunctionDecl FD,
QualType  RetTy,
const SmallVectorImpl< const VarDecl * > &  Args 
)

◆ getInlinedAt()

llvm::MDNode* clang::CodeGen::CGDebugInfo::getInlinedAt ( ) const
inline
Returns
the current inline scope.

Definition at line 422 of file CGDebugInfo.h.

◆ getLocation()

SourceLocation clang::CodeGen::CGDebugInfo::getLocation ( ) const
inline

Return the current source location.

This does not necessarily correspond to the IRBuilder's current DebugLoc.

Definition at line 415 of file CGDebugInfo.h.

◆ getOrCreateInterfaceType()

llvm::DIType * CGDebugInfo::getOrCreateInterfaceType ( QualType  Ty,
SourceLocation  Loc 
)

Emit an Objective-C interface type standalone debug info.

Definition at line 2334 of file CGDebugInfo.cpp.

References getOrCreateStandaloneType().

◆ getOrCreateRecordType()

llvm::DIType * CGDebugInfo::getOrCreateRecordType ( QualType  Ty,
SourceLocation  L 
)

◆ getOrCreateStandaloneType()

llvm::DIType * CGDebugInfo::getOrCreateStandaloneType ( QualType  Ty,
SourceLocation  Loc 
)

◆ getParamDbgMappings()

Param2DILocTy& clang::CodeGen::CGDebugInfo::getParamDbgMappings ( )
inline

Definition at line 579 of file CGDebugInfo.h.

◆ registerVLASizeExpression()

void clang::CodeGen::CGDebugInfo::registerVLASizeExpression ( QualType  Ty,
llvm::Metadata *  SizeExpr 
)
inline

Register VLA size expression debug node with the qualified type.

Definition at line 389 of file CGDebugInfo.h.

◆ remapDIPath()

std::string CGDebugInfo::remapDIPath ( StringRef  Path) const

Remap a given path with the current debug prefix map.

Definition at line 469 of file CGDebugInfo.cpp.

References P.

◆ setDwoId()

void CGDebugInfo::setDwoId ( uint64_t  Signature)

Module debugging: Support for building PCMs.

Set the main CU's DwoId field to Signature.

Definition at line 5604 of file CGDebugInfo.cpp.

◆ setInlinedAt()

void clang::CodeGen::CGDebugInfo::setInlinedAt ( llvm::MDNode *  InlinedAt)
inline

Update the current inline scope.

All subsequent calls to EmitLocation will create a location with this inlinedAt field.

Definition at line 419 of file CGDebugInfo.h.

◆ setLocation()

void CGDebugInfo::setLocation ( SourceLocation  Loc)

◆ setModuleMap()

void clang::CodeGen::CGDebugInfo::setModuleMap ( ModuleMap MMap)
inline

When generating debug information for a clang module or precompiled header, this module map will be used to determine the module of origin of each Decl.

Definition at line 401 of file CGDebugInfo.h.

◆ setPCHDescriptor()

void clang::CodeGen::CGDebugInfo::setPCHDescriptor ( ASTSourceDescriptor  PCH)
inline

When generating debug information for a clang module or precompiled header, this module map will be used to determine the module of origin of each Decl.

Definition at line 406 of file CGDebugInfo.h.

References clang::PCH.

◆ SourceLocToDebugLoc()

llvm::DebugLoc CGDebugInfo::SourceLocToDebugLoc ( SourceLocation  Loc)

Definition at line 5698 of file CGDebugInfo.cpp.

Friends And Related Function Documentation

◆ ApplyDebugLocation

friend class ApplyDebugLocation
friend

Definition at line 56 of file CGDebugInfo.h.

◆ SaveAndRestoreLocation

friend class SaveAndRestoreLocation
friend

Definition at line 57 of file CGDebugInfo.h.


The documentation for this class was generated from the following files: