Re: Issue in dwarf2/expr.c
Tom Tromey <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
>> 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"));
> Since I did some work on this function in the past, I just looked where
> this check comes from, and it turns out that it was introduced in 2010
> by Tom Tromey with commit afd74c5ff76010405caddd2834be4a0178fa93dd --
> gdb
> * dwarf2loc.c (read_pieced_value): Work properly when 'v' has an
> offset.
> (write_pieced_value): Likewise.
> Perhaps Tom still remembers the rationale?
I don't remember, sorry.
It's possible I assumed that it should be impossible to create a value
with an enclosing type without un-lazying it.
Removing the assertion seems fine but it's important to make sure the
result works correctly. An enclosing type normally means that the data
representing the 'type' is at some offset in the contents, but it seems
to me that rw_pieced_value may not handle this case.
Tom