pr34322: assertion failure in get_or_create_member_type

Message ID akjmq8Rm_OBgmsq3@squeak.grove.modra.org
State New
Headers
Series pr34322: assertion failure in get_or_create_member_type |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 fail Patch failed to apply
linaro-tcwg-bot/tcwg_binutils_build--master-arm fail Patch failed to apply

Commit Message

Alan Modra July 4, 2026, 10:55 a.m. UTC
  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.
  

Patch

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)
 	  {