diff options
| author | Momchil Velikov <momchil.velikov@arm.com> | 2018-02-12 16:10:09 +0000 | 
|---|---|---|
| committer | Momchil Velikov <momchil.velikov@arm.com> | 2018-02-12 16:10:09 +0000 | 
| commit | 08dc66eff0c7ad594584a8a6925ef830cd6873a1 (patch) | |
| tree | 36a9dc79a29945f66faf9ac868a413e9733cc037 /llvm/lib/CodeGen | |
| parent | b941f5dc5f36daf6fac61b5bb2faf9e461a6cc91 (diff) | |
| download | bcm5719-llvm-08dc66eff0c7ad594584a8a6925ef830cd6873a1.tar.gz bcm5719-llvm-08dc66eff0c7ad594584a8a6925ef830cd6873a1.zip | |
Re-commit r324489: [DebugInfo] Improvements to representation of enumeration types (PR36168)
Differential Revision: https://reviews.llvm.org/D42734
llvm-svn: 324899
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 19 | 
1 files changed, 11 insertions, 8 deletions
| diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 0e6ed1c349f..939d13faec0 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -1427,6 +1427,15 @@ void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, const DICompositeType *CTy) {  }  void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, const DICompositeType *CTy) { +  const DIType *DTy = resolve(CTy->getBaseType()); +  bool IsUnsigned = DTy && isUnsignedDIType(DD, DTy); +  if (DTy && DD->getDwarfVersion() >= 3) +    addType(Buffer, DTy); +  if (DD->getDwarfVersion() >= 4 && (CTy->getFlags() & DINode::FlagFixedEnum)) { +    assert(DTy); +    addFlag(Buffer, dwarf::DW_AT_enum_class); +  } +    DINodeArray Elements = CTy->getElements();    // Add enumerators to enumeration type. @@ -1436,16 +1445,10 @@ void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, const DICompositeType *CTy) {        DIE &Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer);        StringRef Name = Enum->getName();        addString(Enumerator, dwarf::DW_AT_name, Name); -      int64_t Value = Enum->getValue(); -      addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, -              Value); +      auto Value = static_cast<uint64_t>(Enum->getValue()); +      addConstantValue(Enumerator, IsUnsigned, Value);      }    } -  const DIType *DTy = resolve(CTy->getBaseType()); -  if (DTy) { -    addType(Buffer, DTy); -    addFlag(Buffer, dwarf::DW_AT_enum_class); -  }  }  void DwarfUnit::constructContainingTypeDIEs() { | 

