Don't compare types of enum fields
authorHannes Domani <ssbssa@yahoo.de>
Mon, 14 Dec 2020 18:06:38 +0000 (19:06 +0100)
committerHannes Domani <ssbssa@yahoo.de>
Sat, 19 Dec 2020 12:41:44 +0000 (13:41 +0100)
commitfa639f555afbe6bf670c27d161c42974740987cb
tree8e8057a2a6ee3edbc469f20e434efb88d1876f78
parent0455b7d325801142694c0a222acb08c7e2739f7d
Don't compare types of enum fields

Comparing types of enum fields results in a crash, because they don't
have a type.

It can be reproduced by comparing the types of 2 instances of the same
enum type in different objects:

enum.h:

    enum e
    {
      zero,
      one,
    };

enum-1.c:

    #include <enum.h>
    int func();
    enum e e1;
    int main()
    {
      return e1 + func();
    }

enum-2.c:

    #include <enum.h>
    enum e e2;
    int func()
    {
      return e2;
    }

$ gcc -g -oenum enum-1.c enum-2.c
$ gdb -q enum.exe
Reading symbols from enum.exe...
(gdb) py print(gdb.parse_and_eval("e1").type==gdb.parse_and_eval("e2").type)

Thread 1 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 6184.0x1cc4]
check_typedef (type=0x0) at C:/src/repos/binutils-gdb.git/gdb/gdbtypes.c:2745
2745      while (type->code () == TYPE_CODE_TYPEDEF)

gdb/ChangeLog:

2020-12-19  Hannes Domani  <ssbssa@yahoo.de>

PR exp/27070
* gdbtypes.c (check_types_equal): Don't compare types of enum fields.

gdb/testsuite/ChangeLog:

2020-12-19  Hannes Domani  <ssbssa@yahoo.de>

PR exp/27070
* gdb.python/compare-enum-type-a.c: New test.
* gdb.python/compare-enum-type-b.c: New test.
* gdb.python/compare-enum-type.exp: New file.
* gdb.python/compare-enum-type.h: New test.
gdb/ChangeLog
gdb/gdbtypes.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/compare-enum-type-a.c [new file with mode: 0644]
gdb/testsuite/gdb.python/compare-enum-type-b.c [new file with mode: 0644]
gdb/testsuite/gdb.python/compare-enum-type.exp [new file with mode: 0644]
gdb/testsuite/gdb.python/compare-enum-type.h [new file with mode: 0644]