Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp =================================================================== --- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -6836,17 +6836,26 @@ byte_stride = element_type->GetByteSize(); ClangASTType array_element_type = element_type->GetClangForwardType(); uint64_t array_element_bit_stride = byte_stride * 8 + bit_stride; - uint64_t num_elements = 0; - std::vector::const_reverse_iterator pos; - std::vector::const_reverse_iterator end = element_orders.rend(); - for (pos = element_orders.rbegin(); pos != end; ++pos) + if (element_orders.size() > 0) { - num_elements = *pos; - clang_type = ast.CreateArrayType (array_element_type, - num_elements, - is_vector); - array_element_type = clang_type; - array_element_bit_stride = num_elements ? array_element_bit_stride * num_elements : array_element_bit_stride; + uint64_t num_elements = 0; + std::vector::const_reverse_iterator pos; + std::vector::const_reverse_iterator end = element_orders.rend(); + for (pos = element_orders.rbegin(); pos != end; ++pos) + { + num_elements = *pos; + clang_type = ast.CreateArrayType (array_element_type, + num_elements, + is_vector); + array_element_type = clang_type; + array_element_bit_stride = num_elements ? + array_element_bit_stride * num_elements : + array_element_bit_stride; + } + } + else + { + clang_type = ast.CreateArrayType (array_element_type, 0, is_vector); } ConstString empty_name; type_sp.reset( new Type (MakeUserID(die->GetOffset()), Index: test/lang/cpp/class_static/TestStaticVariables.py =================================================================== --- test/lang/cpp/class_static/TestStaticVariables.py +++ test/lang/cpp/class_static/TestStaticVariables.py @@ -20,8 +20,6 @@ self.buildDsym() self.static_variable_commands() - @expectedFailureFreeBSD('llvm.org/pr15261', failing_compilers) # lldb on FreeBSD does not display the size of (class or file)static arrays - @expectedFailureLinux('llvm.org/pr15261', failing_compilers) # lldb on Linux does not display the size of (class or file)static arrays @dwarf_test def test_with_dwarf_and_run_command(self): """Test that file and class static variables display correctly.""" @@ -69,13 +67,13 @@ # global variables are no longer displayed with the "frame variable" command. self.expect('target variable A::g_points', VARIABLES_DISPLAYED_CORRECTLY, - substrs = ['(PointType [2]) A::g_points']) + patterns=['\(PointType \[[1-9]*\]\) A::g_points = {.*}']) self.expect('target variable g_points', VARIABLES_DISPLAYED_CORRECTLY, substrs = ['(PointType [2]) g_points']) # On Mac OS X, gcc 4.2 emits the wrong debug info for A::g_points. # A::g_points is an array of two elements. - if sys.platform.startswith("darwin") and self.getCompiler() in ['clang', 'llvm-gcc']: + if sys.platform.startswith("darwin") or sys.platform.startswith("linux"): self.expect("target variable A::g_points[1].x", VARIABLES_DISPLAYED_CORRECTLY, startstr = "(int) A::g_points[1].x = 11")