pr34322: assertion failure in get_or_create_member_type

Alan Modra amodra@gmail.com
Sat Jul 4 10:55:39 GMT 2026


I thought about warning "DW_TAG_member without struct/union parent"
here but decided that doesn't help much as the warning is disconnected
from output.  As it is the --map-global-vars code silently ignores
unexpected attributes that might be found in fuzzed files.  I'm fine
with that too.

	PR 34322
	* dwarf.c (get_or_create_member_type): Return NULL on NULL parent.
	(insert_element_in_list): Ignore DW_TAG_member without struct
	or union parent.

diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index f915495f6b3..829bcb761f7 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -2919,7 +2919,8 @@ display_member_type (const member_type mt)
 static member_type *
 get_or_create_member_type (member_parent *parent, uint64_t die_offset)
 {
-  assert (parent != NULL);
+  if (parent == NULL)
+    return NULL;
   if (parent->member_tail == NULL
       || parent->member_tail->die_offset != die_offset)
     {
@@ -3371,6 +3372,8 @@ insert_element_in_list (enum dwarf_tag dw_tag,
 	  mt = get_or_create_member_type (union_type_list.tail, die_offset);
 	else
 	  mt = get_or_create_member_type (struct_type_list.tail, die_offset);
+	if (mt == NULL)
+	  break;
 
 	if (dw_attr == DW_AT_name)
 	  {

-- 
Alan Modra


More information about the Binutils mailing list