Skip to content

Commit

Permalink
[LLVM-C] Add Accessors for Common DIType and DILocation Properties
Browse files Browse the repository at this point in the history
Summary:
- Adds getters for the line, column, and scope of a DILocation
- Adds getters for the name, size in bits, offset in bits, alignment in bits, line, and flags of a DIType

Reviewers: whitequark, harlanhaskins, deadalnix

Reviewed By: whitequark

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D46627

llvm-svn: 332014
  • Loading branch information
CodaFi committed May 10, 2018
1 parent 6684476 commit 260b581
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 0 deletions.
73 changes: 73 additions & 0 deletions llvm/include/llvm-c/DebugInfo.h
Expand Up @@ -384,6 +384,30 @@ LLVMDIBuilderCreateDebugLocation(LLVMContextRef Ctx, unsigned Line,
unsigned Column, LLVMMetadataRef Scope,
LLVMMetadataRef InlinedAt);

/**
* Get the line number of this debug location.
* \param Location The debug location.
*
* @see DILocation::getLine()
*/
unsigned LLVMDILocationGetLine(LLVMMetadataRef Location);

/**
* Get the column number of this debug location.
* \param Location The debug location.
*
* @see DILocation::getColumn()
*/
unsigned LLVMDILocationGetColumn(LLVMMetadataRef Location);

/**
* Get the local scope associated with this debug location.
* \param Location The debug location.
*
* @see DILocation::getScope()
*/
LLVMMetadataRef LLVMDILocationGetScope(LLVMMetadataRef Location);

/**
* Create a type array.
* \param Builder The DIBuilder.
Expand Down Expand Up @@ -760,6 +784,55 @@ LLVMMetadataRef
LLVMDIBuilderCreateArtificialType(LLVMDIBuilderRef Builder,
LLVMMetadataRef Type);

/**
* Get the name of this DIType.
* \param DType The DIType.
* \param Length The length of the returned string.
*
* @see DIType::getName()
*/
const char *LLVMDITypeGetName(LLVMMetadataRef DType, size_t *Length);

/**
* Get the size of this DIType in bits.
* \param DType The DIType.
*
* @see DIType::getSizeInBits()
*/
uint64_t LLVMDITypeGetSizeInBits(LLVMMetadataRef DType);

/**
* Get the offset of this DIType in bits.
* \param DType The DIType.
*
* @see DIType::getOffsetInBits()
*/
uint64_t LLVMDITypeGetOffsetInBits(LLVMMetadataRef DType);

/**
* Get the alignment of this DIType in bits.
* \param DType The DIType.
*
* @see DIType::getAlignInBits()
*/
uint32_t LLVMDITypeGetAlignInBits(LLVMMetadataRef DType);

/**
* Get the source line where this DIType is declared.
* \param DType The DIType.
*
* @see DIType::getLine()
*/
unsigned LLVMDITypeGetLine(LLVMMetadataRef DType);

/**
* Get the flags associated with this DIType.
* \param DType The DIType.
*
* @see DIType::getFlags()
*/
LLVMDIFlags LLVMDITypeGetFlags(LLVMMetadataRef DType);

/**
* Create a descriptor for a value range.
* \param Builder The DIBuilder.
Expand Down
42 changes: 42 additions & 0 deletions llvm/lib/IR/DebugInfo.cpp
Expand Up @@ -721,6 +721,10 @@ static DINode::DIFlags map_from_llvmDIFlags(LLVMDIFlags Flags) {
return static_cast<DINode::DIFlags>(Flags);
}

static LLVMDIFlags map_to_llvmDIFlags(DINode::DIFlags Flags) {
return static_cast<LLVMDIFlags>(Flags);
}

unsigned LLVMDebugMetadataVersion() {
return DEBUG_METADATA_VERSION;
}
Expand Down Expand Up @@ -885,6 +889,18 @@ LLVMDIBuilderCreateDebugLocation(LLVMContextRef Ctx, unsigned Line,
unwrap(InlinedAt)));
}

unsigned LLVMDILocationGetLine(LLVMMetadataRef Location) {
return unwrapDI<DILocation>(Location)->getLine();
}

unsigned LLVMDILocationGetColumn(LLVMMetadataRef Location) {
return unwrapDI<DILocation>(Location)->getColumn();
}

LLVMMetadataRef LLVMDILocationGetScope(LLVMMetadataRef Location) {
return wrap(unwrapDI<DILocation>(Location)->getScope());
}

LLVMMetadataRef LLVMDIBuilderCreateEnumerationType(
LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
Expand Down Expand Up @@ -1102,6 +1118,32 @@ LLVMDIBuilderCreateArtificialType(LLVMDIBuilderRef Builder,
return wrap(unwrap(Builder)->createArtificialType(unwrapDI<DIType>(Type)));
}

const char *LLVMDITypeGetName(LLVMMetadataRef DType, size_t *Length) {
StringRef Str = unwrap<DIType>(DType)->getName();
*Length = Str.size();
return Str.data();
}

uint64_t LLVMDITypeGetSizeInBits(LLVMMetadataRef DType) {
return unwrapDI<DIType>(DType)->getSizeInBits();
}

uint64_t LLVMDITypeGetOffsetInBits(LLVMMetadataRef DType) {
return unwrapDI<DIType>(DType)->getOffsetInBits();
}

uint32_t LLVMDITypeGetAlignInBits(LLVMMetadataRef DType) {
return unwrapDI<DIType>(DType)->getAlignInBits();
}

unsigned LLVMDITypeGetLine(LLVMMetadataRef DType) {
return unwrapDI<DIType>(DType)->getLine();
}

LLVMDIFlags LLVMDITypeGetFlags(LLVMMetadataRef DType) {
return map_to_llvmDIFlags(unwrapDI<DIType>(DType)->getFlags());
}

LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray(LLVMDIBuilderRef Builder,
LLVMMetadataRef *Types,
size_t Length) {
Expand Down

0 comments on commit 260b581

Please sign in to comment.