diff options
author | Eric Christopher <echristo@gmail.com> | 2013-11-11 18:52:39 +0000 |
---|---|---|
committer | Eric Christopher <echristo@gmail.com> | 2013-11-11 18:52:39 +0000 |
commit | aeb105f9fe8695156b78a03a68def4ce416fb624 (patch) | |
tree | 6307690ec3c906663e270d0c529eddc2be7e922e /llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp | |
parent | 98b7f17c726eba7345b60ddba10c5d4263ad7714 (diff) | |
download | bcm5719-llvm-aeb105f9fe8695156b78a03a68def4ce416fb624.tar.gz bcm5719-llvm-aeb105f9fe8695156b78a03a68def4ce416fb624.zip |
Unify the adding of enumerators with the construction of the enumeration.
llvm-svn: 194401
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp index 3684c9450f5..d7dadb7c104 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -1137,21 +1137,9 @@ void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) { case dwarf::DW_TAG_array_type: constructArrayTypeDIE(Buffer, CTy); break; - case dwarf::DW_TAG_enumeration_type: { - DIArray Elements = CTy.getTypeArray(); - - // Add enumerators to enumeration type. - for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) { - DIDescriptor Enum(Elements.getElement(i)); - if (Enum.isEnumerator()) - constructEnumTypeDIE(Buffer, DIEnumerator(Enum)); - } - DIType DTy = resolve(CTy.getTypeDerivedFrom()); - if (DTy) { - addType(&Buffer, DTy); - addFlag(&Buffer, dwarf::DW_AT_enum_class); - } - } break; + case dwarf::DW_TAG_enumeration_type: + constructEnumTypeDIE(Buffer, CTy); + break; case dwarf::DW_TAG_subroutine_type: { // Add return type. A void return won't have a type. DIArray Elements = CTy.getTypeArray(); @@ -1720,13 +1708,27 @@ void CompileUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) { } } -/// constructEnumTypeDIE - Construct enum type DIE from DIEnumerator. -void CompileUnit::constructEnumTypeDIE(DIE &Buffer, DIEnumerator ETy) { - DIE *Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer); - StringRef Name = ETy.getName(); - addString(Enumerator, dwarf::DW_AT_name, Name); - int64_t Value = ETy.getEnumValue(); - addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, Value); +/// constructEnumTypeDIE - Construct an enum type DIE from DICompositeType. +void CompileUnit::constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy) { + DIArray Elements = CTy.getTypeArray(); + + // Add enumerators to enumeration type. + for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) { + DIDescriptor Enum(Elements.getElement(i)); + DIEnumerator ETy = DIEnumerator(Enum); + if (Enum.isEnumerator()) { + DIE *Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer); + StringRef Name = ETy.getName(); + addString(Enumerator, dwarf::DW_AT_name, Name); + int64_t Value = ETy.getEnumValue(); + addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, Value); + } + } + DIType DTy = resolve(CTy.getTypeDerivedFrom()); + if (DTy) { + addType(&Buffer, DTy); + addFlag(&Buffer, dwarf::DW_AT_enum_class); + } } /// constructContainingTypeDIEs - Construct DIEs for types that contain |