Bug 28030

Summary: ../../gdb/gdbtypes.c:5438: internal-error: Unexpected type field location kind: 4
Product: gdb Reporter: Alexandra Hájková <ahajkova>
Component: gdbAssignee: Alexandra Hájková <ahajkova>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P2    
Version: HEAD   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:
Attachments: patch

Description Alexandra Hájková 2021-06-30 09:30:15 UTC
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
Comment 1 Alexandra Hájková 2021-07-02 13:50:43 UTC
Created attachment 13527 [details]
patch
Comment 2 Alexandra Hájková 2021-07-02 13:51:13 UTC
I tested this patch does not add any new regressions.
Comment 3 Sourceware Commits 2021-09-06 09:08:14 UTC
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.
Comment 4 Alexandra Hájková 2021-09-15 12:25:47 UTC
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.