DebugInfo: Allow the addition of other (such as static data) members to a record type after construction

Plus a type cleanup & minor fix to enumerate members of declarations.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188577 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Blaikie 2013-08-16 20:42:14 +00:00
parent 9bb6c81683
commit 692062f180
5 changed files with 13 additions and 13 deletions

View File

@ -419,9 +419,11 @@ namespace llvm {
DIType createObjectPointerType(DIType Ty);
/// createForwardDecl - Create a temporary forward-declared type.
DIType createForwardDecl(unsigned Tag, StringRef Name, DIDescriptor Scope,
DIFile F, unsigned Line, unsigned RuntimeLang = 0,
uint64_t SizeInBits = 0, uint64_t AlignInBits = 0);
DICompositeType createForwardDecl(unsigned Tag, StringRef Name,
DIDescriptor Scope, DIFile F,
unsigned Line, unsigned RuntimeLang = 0,
uint64_t SizeInBits = 0,
uint64_t AlignInBits = 0);
/// retainType - Retain DIType in a module even if it is not referenced
/// through debug info anchors.

View File

@ -323,7 +323,7 @@ namespace llvm {
DIArray getTypeArray() const { return getFieldAs<DIArray>(10); }
void setTypeArray(DIArray Elements, DIArray TParams = DIArray());
void addMember(DISubprogram S);
void addMember(DIDescriptor D);
unsigned getRunTimeLang() const { return getUnsignedField(11); }
DICompositeType getContainingType() const {
return getFieldAs<DICompositeType>(12);

View File

@ -981,9 +981,6 @@ void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
case dwarf::DW_TAG_structure_type:
case dwarf::DW_TAG_union_type:
case dwarf::DW_TAG_class_type: {
if (CTy.isForwardDecl())
break;
// Add elements to structure type.
DIArray Elements = CTy.getTypeArray();
for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {

View File

@ -844,7 +844,7 @@ DIDescriptor DIBuilder::createUnspecifiedParameter() {
/// createForwardDecl - Create a temporary forward-declared type that
/// can be RAUW'd if the full type is seen.
DIType DIBuilder::createForwardDecl(unsigned Tag, StringRef Name,
DICompositeType DIBuilder::createForwardDecl(unsigned Tag, StringRef Name,
DIDescriptor Scope, DIFile F,
unsigned Line, unsigned RuntimeLang,
uint64_t SizeInBits,
@ -863,11 +863,12 @@ DIType DIBuilder::createForwardDecl(unsigned Tag, StringRef Name,
DIDescriptor::FlagFwdDecl),
NULL,
DIArray(),
ConstantInt::get(Type::getInt32Ty(VMContext), RuntimeLang)
ConstantInt::get(Type::getInt32Ty(VMContext), RuntimeLang),
NULL
};
MDNode *Node = MDNode::getTemporary(VMContext, Elts);
DIType RetTy(Node);
assert(RetTy.isType() &&
DICompositeType RetTy(Node);
assert(RetTy.isCompositeType() &&
"createForwardDecl result should be a DIType");
return RetTy;
}

View File

@ -647,7 +647,7 @@ void DICompositeType::setTypeArray(DIArray Elements, DIArray TParams) {
DbgNode = N;
}
void DICompositeType::addMember(DISubprogram S) {
void DICompositeType::addMember(DIDescriptor D) {
SmallVector<llvm::Value *, 16> M;
DIArray OrigM = getTypeArray();
unsigned Elements = OrigM.getNumElements();
@ -656,7 +656,7 @@ void DICompositeType::addMember(DISubprogram S) {
M.reserve(Elements + 1);
for (unsigned i = 0; i != Elements; ++i)
M.push_back(OrigM.getElement(i));
M.push_back(S);
M.push_back(D);
setTypeArray(DIArray(MDNode::get(DbgNode->getContext(), M)));
}