summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp')
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 65b80fe895e..453515f9645 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -4218,6 +4218,7 @@ SymbolFileDWARF::ParseChildArrayInfo
uint64_t num_elements = 0;
uint64_t lower_bound = 0;
uint64_t upper_bound = 0;
+ bool upper_bound_valid = false;
uint32_t i;
for (i=0; i<num_child_attributes; ++i)
{
@@ -4247,6 +4248,7 @@ SymbolFileDWARF::ParseChildArrayInfo
break;
case DW_AT_upper_bound:
+ upper_bound_valid = true;
upper_bound = form_value.Unsigned();
break;
@@ -4269,7 +4271,7 @@ SymbolFileDWARF::ParseChildArrayInfo
if (num_elements == 0)
{
- if (upper_bound >= lower_bound)
+ if (upper_bound_valid && upper_bound >= lower_bound)
num_elements = upper_bound - lower_bound + 1;
}
@@ -6534,10 +6536,9 @@ SymbolFileDWARF::ParseType (const SymbolContext& sc, DWARFCompileUnit* dwarf_cu,
{
num_elements = *pos;
clang_type = ast.CreateArrayType (array_element_type,
- num_elements,
- num_elements * array_element_bit_stride);
+ num_elements);
array_element_type = clang_type;
- array_element_bit_stride = array_element_bit_stride * num_elements;
+ array_element_bit_stride = num_elements ? array_element_bit_stride * num_elements : array_element_bit_stride;
}
ConstString empty_name;
type_sp.reset( new Type (MakeUserID(die->GetOffset()),
OpenPOWER on IntegriCloud