Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -2670,7 +2670,10 @@ // If we have a gap between the last_field_end and the current // field we have an unnamed bit-field if (this_field_info.bit_offset != last_field_end && - !(this_field_info.bit_offset < last_field_end)) { + !(this_field_info.bit_offset < last_field_end) && + !(last_field_info.bit_offset == 0 && + last_field_info.bit_size == 0 && + layout_info.base_offsets.size() != 0)) { unnamed_field_info = FieldInfo{}; unnamed_field_info->bit_size = this_field_info.bit_offset - last_field_end; Index: lldb/test/API/lang/cpp/bitfields/TestCppBitfields.py =================================================================== --- lldb/test/API/lang/cpp/bitfields/TestCppBitfields.py +++ lldb/test/API/lang/cpp/bitfields/TestCppBitfields.py @@ -103,3 +103,10 @@ '(uint64_t:1) k = 1', ]) + self.expect( + "frame variable --show-types derived", + VARIABLES_DISPLAYED_CORRECTLY, + substrs=[ + '(uint32_t) b_a = 2', + '(uint32_t:1) d_a = 1', + ]) Index: lldb/test/API/lang/cpp/bitfields/main.cpp =================================================================== --- lldb/test/API/lang/cpp/bitfields/main.cpp +++ lldb/test/API/lang/cpp/bitfields/main.cpp @@ -60,6 +60,16 @@ } } clang_example; + class B { + public: + uint32_t b_a; + }; + + class D : public B { + public: + uint32_t d_a:1; + } derived; + lba.a = 2; lbb.a = 1; @@ -76,6 +86,8 @@ lbd.arr[2] = '\0'; lbd.a = 5; + derived.b_a=2; + derived.d_a=1; return 0; // Set break point at this line. }