mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-27 01:28:46 +00:00
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.
This commit is contained in:
@@ -4175,7 +4175,9 @@ check_types_equal (struct type *type1, struct type *type2,
|
||||
case FIELD_LOC_KIND_ENUMVAL:
|
||||
if (FIELD_ENUMVAL (*field1) != FIELD_ENUMVAL (*field2))
|
||||
return false;
|
||||
break;
|
||||
/* Don't compare types of enum fields, because they don't
|
||||
have a type. */
|
||||
continue;
|
||||
case FIELD_LOC_KIND_PHYSADDR:
|
||||
if (FIELD_STATIC_PHYSADDR (*field1)
|
||||
!= FIELD_STATIC_PHYSADDR (*field2))
|
||||
|
||||
Reference in New Issue
Block a user