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 /gdb/rust-lang.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 'gdb/rust-lang.c')
0 files changed, 0 insertions, 0 deletions