aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/DwarfWriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/DwarfWriter.cpp')
-rw-r--r--lib/CodeGen/DwarfWriter.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp
index 58dc6dd813..dfe94f999f 100644
--- a/lib/CodeGen/DwarfWriter.cpp
+++ b/lib/CodeGen/DwarfWriter.cpp
@@ -1109,8 +1109,8 @@ DIE *DwarfWriter::NewType(DIE *Context, TypeDesc *TyDesc) {
if (Lo != Hi) {
Subrange->AddDIEntry(DW_AT_type, DW_FORM_ref4, IndexTy);
// Only add low if non-zero.
- if (Lo) Subrange->AddUInt(DW_AT_lower_bound, 0, Lo);
- Subrange->AddUInt(DW_AT_upper_bound, 0, Hi);
+ if (Lo) Subrange->AddSInt(DW_AT_lower_bound, 0, Lo);
+ Subrange->AddSInt(DW_AT_upper_bound, 0, Hi);
}
Ty->AddChild(Subrange);
}
@@ -1124,6 +1124,17 @@ DIE *DwarfWriter::NewType(DIE *Context, TypeDesc *TyDesc) {
break;
}
case DW_TAG_enumeration_type: {
+ // Add enumerators to enumeration type.
+ for(unsigned i = 0, N = Elements.size(); i < N; ++i) {
+ EnumeratorDesc *ED = cast<EnumeratorDesc>(Elements[i]);
+ const std::string &Name = ED->getName();
+ int64_t Value = ED->getValue();
+ DIE *Enumerator = new DIE(DW_TAG_enumerator);
+ Enumerator->AddString(DW_AT_name, DW_FORM_string, Name);
+ Enumerator->AddSInt(DW_AT_const_value, DW_FORM_sdata, Value);
+ Ty->AddChild(Enumerator);
+ }
+
break;
}
default: break;