diff options
| author | Hannes Domani <ssbssa@yahoo.de> | 2020-12-14 19:06:38 +0100 | 
|---|---|---|
| committer | Hannes Domani <ssbssa@yahoo.de> | 2020-12-19 13:41:44 +0100 | 
| commit | fa639f555afbe6bf670c27d161c42974740987cb (patch) | |
| tree | 8e8057a2a6ee3edbc469f20e434efb88d1876f78 /libctf/ctf-subr.c | |
| parent | 0455b7d325801142694c0a222acb08c7e2739f7d (diff) | |
| download | binutils-fa639f555afbe6bf670c27d161c42974740987cb.zip binutils-fa639f555afbe6bf670c27d161c42974740987cb.tar.gz binutils-fa639f555afbe6bf670c27d161c42974740987cb.tar.bz2 | |
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.
Diffstat (limited to 'libctf/ctf-subr.c')
0 files changed, 0 insertions, 0 deletions
