I stumbled on this a bit randomly while trying to reproduce a failure. With the binary from gdb.dwarf2/arr-stride.exp, with current master: $ ./gdb -nx -q --data-directory=data-directory testsuite/outputs/gdb.dwarf2/arr-stride/arr-stride -ex "print the_struct" Reading symbols from testsuite/outputs/gdb.dwarf2/arr-stride/arr-stride... $1 = {intfield = 1, arrayfield = { /home/simark/src/binutils-gdb/gdb/value.c:851: internal-error: bool value_contents_bits_eq(const value*, int, const value*, int, int): Assertion `offset2 + length <= TYPE_LENGTH (val2->enclosing_type) * TARGET_CHAR_BIT' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) (top-gdb) p offset2 $1 = 32 (top-gdb) p length $2 = 32 (top-gdb) p TYPE_LENGTH (val2->enclosing_type) $3 = 4 (top-gdb) p TARGET_CHAR_BIT $4 = 8
If I use `-ex "set language ada"` before the print, as the test does, I don't hit an internal error.
At first I thought this was because we're trying to print an optimized-out array. And, that still seems weird, maybe common_val_print and common_val_print_checked should be merged However, it's also the case that this array has a bit stride of 6. So, this may just be a missing feature in value_print_array_elements. I'm not sure how important this is. Arrays like this can't be created in most languages that gdb supports. OTOH, it should be safe to print a value, regardless of the current language.
I don't have enough context nor time to dig into it. But yeah, any way to trigger an internal error can be considered a bug. So if there's just no sane way of printing the value for languages other than Ada, then at least erroring out would be better than an internal error. But why is it needed to set the language explicitly, given that the CU provides: DW_AT_language @DW_LANG_Ada95 ?
(In reply to Simon Marchi from comment #3) > But why is it needed to set the language explicitly, given that the CU > provides: > > DW_AT_language @DW_LANG_Ada95 > > ? The program's "main" isn't given a language.