Re: [PATCH v1] gdbtypes: improve documentation of composite type helpers

Simon Marchi <[email protected]>
Newsgroups gmane.comp.gdb.patches
Message-ID <[email protected]>
On 8/13/26 1:27 PM, Matthieu Longo wrote:
> Document how arch_composite_type handles a null NAME, and clarify the
> semantics of a null or empty field name for the append_composite_type*
> helpers.
> 
> Suggested-By: Simon Marchi <[email protected]>

Thanks for the patch!

It would be a good time to clean things up a bit, to bring them up to
the current standard.  The comments in the .c file should just be:

/* See gdbtypes.h.  */

And the proper comments should be moved to the .h file.

> @@ -5428,9 +5429,11 @@ arch_composite_type (struct gdbarch *gdbarch, const char *name,
>    return t;
>  }
>  
> -/* Add new field with name NAME and type FIELD to composite type T.
> -   Do not set the field's position or adjust the type's length;
> -   the caller should do so.  Return the new field.  */
> +/* Add a new field named NAME with type FIELD to composite type T.
> +   This function does not set the field's position or adjust the length of T;
> +   the caller is responsible for doing so.  If NAME is nullptr or an empty
> +   string, the field represents an anonymous struct or union whose fields
> +   are visible directly in the parent scope.  Return the newly added field.  */
>  
>  struct field *
>  append_composite_type_field_raw (struct type *t, const char *name,

I don't think that a field NAME can be nullptr.  For the "search through
anonymous structs/unions" code to work, the name specifically needs to
be a non-nullptr empty string:

https://gitlab.com/gnutools/binutils-gdb/-/blob/a760a797aeb6e9143d60f0b8b2b8f71da88cabcf/gdb/valops.c#L2014-2015

And I don't think it's actually safe to pass nullptr.  When I try to
change one of the siginfo fields to have a nullptr type, GDB crashes
here:

#2  0x00007efd9800ded2 in __ubsan_handle_nonnull_arg_abort () from /usr/lib/libubsan.so.1
#3  0x000055fa5ad2f2a5 in ui_file::puts (this=0x7b1d93e02310, str=0x0) at /home/smarchi/src/binutils-gdb/gdb/ui-file.h:77
#4  0x000055fa5e47b89d in gdb_puts (linebuffer=0x0, stream=0x7b1d93e02310) at /home/smarchi/src/binutils-gdb/gdb/utils.c:1912
#5  0x000055fa5e47bb9d in fputs_styled (linebuffer=0x0, style=..., stream=0x7b1d93e02310) at /home/smarchi/src/binutils-gdb/gdb/utils.c:1928

I think it would be safer to just say "empty string" here.

For types, I think that the name can be nullptr: it's possible to create
a type and never call set_name on it.

Simon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.