[Lldb-commits] [lldb] DRAFT: [lldb][DWARFASTParserClang] Remove old workaround (PR #160132)
Michael Buch via lldb-commits
lldb-commits at lists.llvm.org
Mon Sep 22 08:38:09 PDT 2025
https://github.com/Michael137 updated https://github.com/llvm/llvm-project/pull/160132
>From 6293105c42e29cc9151eaac33a4208a91e40a0e9 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Mon, 22 Sep 2025 16:02:35 +0100
Subject: [PATCH 1/2] Init
---
.../SymbolFile/DWARF/DWARFASTParserClang.cpp | 40 ++++---------------
1 file changed, 8 insertions(+), 32 deletions(-)
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
index 5ffb4423969ca..dd51c02ff4bd1 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
@@ -3126,38 +3126,14 @@ void DWARFASTParserClang::ParseSingleMember(
if (!member_clang_type.IsCompleteType())
member_clang_type.GetCompleteType();
- {
- // Older versions of clang emit the same DWARF for array[0] and array[1]. If
- // the current field is at the end of the structure, then there is
- // definitely no room for extra elements and we override the type to
- // array[0]. This was fixed by f454dfb6b5af.
- CompilerType member_array_element_type;
- uint64_t member_array_size;
- bool member_array_is_incomplete;
-
- if (member_clang_type.IsArrayType(&member_array_element_type,
- &member_array_size,
- &member_array_is_incomplete) &&
- !member_array_is_incomplete) {
- uint64_t parent_byte_size =
- parent_die.GetAttributeValueAsUnsigned(DW_AT_byte_size, UINT64_MAX);
-
- if (attrs.member_byte_offset >= parent_byte_size) {
- if (member_array_size != 1 &&
- (member_array_size != 0 ||
- attrs.member_byte_offset > parent_byte_size)) {
- module_sp->ReportError(
- "{0:x8}: DW_TAG_member '{1}' refers to type {2:x16}"
- " which extends beyond the bounds of {3:x8}",
- die.GetID(), attrs.name,
- attrs.encoding_form.Reference().GetOffset(), parent_die.GetID());
- }
-
- member_clang_type =
- m_ast.CreateArrayType(member_array_element_type, 0, false);
- }
- }
- }
+ if (attrs.member_byte_offset != UINT32_MAX
+ && attrs.member_byte_offset > parent_byte_size
+ && llvm::expectedToOptional(member_clang_type.GetByteSize(nullptr)).value_or(0) > 0)
+ module_sp->ReportError(
+ "{0:x8}: DW_TAG_member '{1}' refers to type {2:x16}"
+ " which extends beyond the bounds of {3:x8}",
+ die.GetID(), attrs.name,
+ attrs.encoding_form.Reference().GetOffset(), parent_die.GetID());
TypeSystemClang::RequireCompleteType(member_clang_type);
>From 9dc1fa8a2143c4fe3fe26ea084e2670b7617683e Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Mon, 22 Sep 2025 16:37:56 +0100
Subject: [PATCH 2/2] Init
---
lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
index dd51c02ff4bd1..f47722c027470 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
@@ -3127,7 +3127,7 @@ void DWARFASTParserClang::ParseSingleMember(
member_clang_type.GetCompleteType();
if (attrs.member_byte_offset != UINT32_MAX
- && attrs.member_byte_offset > parent_byte_size
+ && attrs.member_byte_offset >= parent_byte_size
&& llvm::expectedToOptional(member_clang_type.GetByteSize(nullptr)).value_or(0) > 0)
module_sp->ReportError(
"{0:x8}: DW_TAG_member '{1}' refers to type {2:x16}"
More information about the lldb-commits
mailing list