Issue in dwarf2/expr.c
"Rohr, Stephan via Gdb" <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <DM6PR11MB456405A1FA95FA5498049AC093EC9@DM6PR11MB4564.namprd11.prod.outlook.com> |
Hi all,
I came across a bug in dwarf2/expr.c:177 in function rw_pieced_value. when reading a pieced value described by DW_OP_piece or DW_OP_bit_piece.
if (value_type (v) != value_enclosing_type (v))
internal_error (__FILE__, __LINE__,
_("Should not be able to create a lazy value with "
"an enclosing type"));
This check can easily be triggered when casting a variable with location described by DW_OP_piece or DW_OP_bit_piece.
A minimal reproducer can be found in gdb/testsuite/gdb.dwarf2/shortpiece.exp, e.g. casting s1 to an array type triggers the error
p (short []) s1
I currently struggle to understand the reasoning for this check. I could think of changing this to
if (TYPE_LENGTH(value_type (v)) > TYPE_LENGTH( value_enclosing_type (v)))
to support the cast operation.
But in general, I'm not sure why this check is needed at all.
I appreciate your feedback.
Best
stephan