mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-25 00:24:26 +00:00
Fix the output of the DW_TAG_friend tag to include DW_AT_friend
and not the rest of the member tag. Fixes PR11695 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153570 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -628,7 +628,8 @@ DIE *CompileUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
|
||||
}
|
||||
|
||||
/// addType - Add a new type attribute to the specified entity.
|
||||
void CompileUnit::addType(DIE *Entity, DIType Ty) {
|
||||
void CompileUnit::addType(DIE *Entity, DIType Ty,
|
||||
unsigned Attribute) {
|
||||
if (!Ty.Verify())
|
||||
return;
|
||||
|
||||
@ -636,7 +637,7 @@ void CompileUnit::addType(DIE *Entity, DIType Ty) {
|
||||
DIEEntry *Entry = getDIEEntry(Ty);
|
||||
// If it exists then use the existing value.
|
||||
if (Entry) {
|
||||
Entity->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, Entry);
|
||||
Entity->addValue(Attribute, dwarf::DW_FORM_ref4, Entry);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -646,7 +647,7 @@ void CompileUnit::addType(DIE *Entity, DIType Ty) {
|
||||
// Set up proxy.
|
||||
Entry = createDIEEntry(Buffer);
|
||||
insertDIEEntry(Ty, Entry);
|
||||
Entity->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, Entry);
|
||||
Entity->addValue(Attribute, dwarf::DW_FORM_ref4, Entry);
|
||||
|
||||
// If this is a complete composite type then include it in the
|
||||
// list of global types.
|
||||
@ -826,9 +827,14 @@ void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
|
||||
addUInt(ElemDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
|
||||
addUInt(ElemDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1);
|
||||
addSourceLine(ElemDie, DV);
|
||||
} else if (Element.isDerivedType())
|
||||
ElemDie = createMemberDIE(DIDerivedType(Element));
|
||||
else if (Element.isObjCProperty()) {
|
||||
} else if (Element.isDerivedType()) {
|
||||
DIDerivedType DDTy(Element);
|
||||
if (DDTy.getTag() == dwarf::DW_TAG_friend) {
|
||||
ElemDie = new DIE(dwarf::DW_TAG_friend);
|
||||
addType(ElemDie, DDTy.getTypeDerivedFrom(), dwarf::DW_AT_friend);
|
||||
} else
|
||||
ElemDie = createMemberDIE(DIDerivedType(Element));
|
||||
} else if (Element.isObjCProperty()) {
|
||||
DIObjCProperty Property(Element);
|
||||
ElemDie = new DIE(Property.getTag());
|
||||
StringRef PropertyName = Property.getObjCPropertyName();
|
||||
|
@ -260,8 +260,10 @@ public:
|
||||
/// addToContextOwner - Add Die into the list of its context owner's children.
|
||||
void addToContextOwner(DIE *Die, DIDescriptor Context);
|
||||
|
||||
/// addType - Add a new type attribute to the specified entity.
|
||||
void addType(DIE *Entity, DIType Ty);
|
||||
/// addType - Add a new type attribute to the specified entity. This takes
|
||||
/// and attribute parameter because DW_AT_friend attributes are also
|
||||
/// type references.
|
||||
void addType(DIE *Entity, DIType Ty, unsigned Attribute = dwarf::DW_AT_type);
|
||||
|
||||
/// getOrCreateNameSpace - Create a DIE for DINameSpace.
|
||||
DIE *getOrCreateNameSpace(DINameSpace NS);
|
||||
|
Reference in New Issue
Block a user