Compile this code with g++ -g sb.C (using any recent GCC, although the line 221 used below is for Fedora's default compiler, gcc-c++-11.1.1-3.fc34): #include <sstream> #include <stdio.h> int main() { std::istringstream in(" abc"); std::ostringstream out; in >> out.rdbuf(); puts(out.str().c_str()); } Then run: gdb -q -ex start -ex n -ex n -ex step -ex finish -ex step -ex n -ex "br 221" -ex r a.out It crashes: Reading symbols from a.out... Temporary breakpoint 1 at 0x4022f2: file sb.cc, line 6. Starting program: /tmp/a.out Temporary breakpoint 1, main () at sb.cc:6 6 std::istringstream in(" abc"); 7 std::ostringstream out; 8 in >> out.rdbuf(); std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::rdbuf (this=0x7fffffffd400) at /usr/src/debug/gcc-11.1.1-3.fc34.x86_64/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/include/sstream:908 908 rdbuf() const Run till exit from #0 std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::rdbuf (this=0x7fffffffd400) at /usr/src/debug/gcc-11.1.1-3.fc34.x86_64/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/include/sstream:908 0x0000000000402364 in main () at sb.cc:8 8 in >> out.rdbuf(); Value returned is $1 = (std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::__stringbuf_type *) 0x7fffffffd408 std::istream::operator>> (this=0x7fffffffd580, __sbout=0x7fffffffd408) at /usr/src/debug/gcc-11.1.1-3.fc34.x86_64/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/include/bits/istream.tcc:211 211 basic_istream<_CharT, _Traits>:: 734 operator bool() const Breakpoint 2 at 0x7ffff7e3ec40: /usr/src/debug/gcc-11.1.1-3.fc34.x86_64/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/include/istream:221. (8 locations) The program being debugged has been started already. Start it from the beginning? (y or n) y ../../gdb/gdbtypes.c:5438: internal-error: Unexpected type field location kind: 4 A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) y This is a bug, please report it. For instructions, see: <https://www.gnu.org/software/gdb/bugs/>. ../../gdb/gdbtypes.c:5438: internal-error: Unexpected type field location kind: 4 A problem internal to GDB has been detected, further debugging may prove unreliable. Create a core file of GDB? (y or n) n
Created attachment 13527 [details] patch
I tested this patch does not add any new regressions.
The master branch has been updated by Alexandra Hajkova <ahajkova@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=5a20fadc84144c2649f7f7c029f1604f003a3834 commit 5a20fadc84144c2649f7f7c029f1604f003a3834 Author: Alexandra Hájková <ahajkova@redhat.com> Date: Fri Jul 2 15:46:08 2021 +0200 gdbtypes.c: Add the case for FIELD_LOC_KIND_DWARF_BLOCK The case for FIELD_LOC_KIND_DWARF_BLOCK was missing for switch TYPE_FIELD_LOC_KIND. Thas caused an internal-error under some circumstances. Fixes bug 28030.
commit 5a20fadc84144c2649f7f7c029f1604f003a3834 Author: Alexandra Hájková <ahajkova@redhat.com> Date: Fri Jul 2 15:46:08 2021 +0200 gdbtypes.c: Add the case for FIELD_LOC_KIND_DWARF_BLOCK The case for FIELD_LOC_KIND_DWARF_BLOCK was missing for switch TYPE_FIELD_LOC_KIND. Thas caused an internal-error under some circumstances. Fixes bug 28030.