diff options
| author | Devang Patel <dpatel@apple.com> | 2009-01-20 21:02:02 +0000 |
|---|---|---|
| committer | Devang Patel <dpatel@apple.com> | 2009-01-20 21:02:02 +0000 |
| commit | bd7743d772332832c91c167fb1e5342ecf8c8cb3 (patch) | |
| tree | 1ccd1b1b1b01145a52fbcba1ec7c6315c0a3f2d4 /llvm/lib/CodeGen | |
| parent | 224fca8982b45344142035214f97d60c78cfd8a8 (diff) | |
| download | bcm5719-llvm-bd7743d772332832c91c167fb1e5342ecf8c8cb3.tar.gz bcm5719-llvm-bd7743d772332832c91c167fb1e5342ecf8c8cb3.zip | |
Fix struct member's debug info.
llvm-svn: 62610
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp index cbe8d7048b0..dccd59c8720 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp @@ -1802,13 +1802,9 @@ private: else if (Element.getTag() == dwarf::DW_TAG_variable) // ??? ElemDie = CreateGlobalVariableDIE(DW_Unit, DIGlobalVariable(Element.getGV())); - else { - DIDerivedType DT = DIDerivedType(Element.getGV()); - assert (DT.isDerivedType(DT.getTag()) - && "Unexpected struct element type"); - ElemDie = new DIE(DT.getTag()); - AddType(DW_Unit, ElemDie, DT); - } + else + ElemDie = CreateMemberDIE(DW_Unit, + DIDerivedType(Element.getGV())); Buffer.AddChild(ElemDie); } } @@ -1903,6 +1899,27 @@ private: return GVDie; } + /// CreateMemberDIE - Create new member DIE. + DIE *CreateMemberDIE(CompileUnit *DW_Unit, const DIDerivedType &DT) { + DIE *MemberDie = new DIE(DT.getTag()); + std::string Name = DT.getName(); + if (!Name.empty()) + AddString(MemberDie, DW_AT_name, DW_FORM_string, Name); + + AddType(DW_Unit, MemberDie, DT.getTypeDerivedFrom()); + + AddSourceLine(MemberDie, &DT); + + AddUInt(MemberDie, DW_AT_bit_size, 0, DT.getSizeInBits()); + DIEBlock *Block = new DIEBlock(); + AddUInt(Block, 0, DW_FORM_data1, DW_OP_plus_uconst); + AddUInt(Block, 0, DW_FORM_udata, DT.getOffsetInBits() >> 3); + AddBlock(MemberDie, DW_AT_data_member_location, 0, Block); + + // FIXME - Handle DW_AT_accessibility + return MemberDie; + } + /// CreateSubprogramDIE - Create new DIE using SP. DIE *CreateSubprogramDIE(CompileUnit *DW_Unit, const DISubprogram &SP, |

