gdb: fix completion of anonymous struct members

Completing fields inside an anonymous struct does not work.  With:

    struct commit_counters_hot {
    	union {
    		struct {
    			long owner;
    		};
    		char padding[16];
    	};
    };

I get:

    (gdb) complete print cc_hot.
    print cc_hot.padding

After this patch, I get:

    (gdb) complete print cc_hot.
    print cc_hot.owner
    print cc_hot.padding

Update break1.c to include an anonymous struct.  The tests that complete
"z_field" inside gdb.base/completion.exp would start to fail without the
fix.

Change-Id: I46b65a95ad16b0825de58dfa241777fe57acc361
Reviewed-By: Keith Seitz <keiths@redhat.com>
This commit is contained in:
Simon Marchi
2025-04-24 11:13:37 -04:00
parent 93e6a942e9
commit a163e2015a
2 changed files with 10 additions and 3 deletions

View File

@@ -994,9 +994,10 @@ add_struct_fields (struct type *type, completion_list &output,
output.emplace_back (concat (prefix, type->field (i).name (),
nullptr));
}
else if (type->field (i).type ()->code () == TYPE_CODE_UNION)
else if (type->field (i).type ()->code () == TYPE_CODE_UNION
|| type->field (i).type ()->code () == TYPE_CODE_STRUCT)
{
/* Recurse into anonymous unions. */
/* Recurse into anonymous unions and structures. */
add_struct_fields (type->field (i).type (),
output, fieldname, namelen, prefix);
}