eirik@labs.labs.tek.com (Eirik Fuller) (07/28/89)
The enclosed diffs provide a workaround for gdb segmentation faults.
If there is supposed to be a guarantee that TYPE_FIELD_NAME etc are
non-nil, this guarantee sometimes fails; if appropriate, I can
probably send examples of how to make this happen. If there is no
such guarantee, this might be the right fix. In any case, I doubt
these patches break anything.
*** ../gdb-3.2/valops.c Wed Jul 5 12:46:58 1989
--- valops.c Mon Jul 17 14:56:56 1989
***************
*** 816,822
{
for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--)
{
! if (!strcmp (TYPE_FIELD_NAME (t, i), name))
{
found = 1;
break;
--- 816,823 -----
{
for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--)
{
! char *tfn = TYPE_FIELD_NAME (t, i);
! if (tfn && !strcmp (tfn, name))
{
found = 1;
break;
***************
*** 846,852
{
for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i)
{
! if (! strcmp (TYPE_FN_FIELDLIST_NAME (t, i), name))
{
error ("use `info method' command to print value of method \"%s\"", name);
}
--- 847,854 -----
{
for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i)
{
! char *tfn = TYPE_FN_FIELDLIST_NAME (t, i);
! if (tfn && ! strcmp (tfn, name))
{
error ("use `info method' command to print value of method \"%s\"", name);
}
***************
*** 886,892
{
struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i);
! if (!strcmp (TYPE_FN_FIELDLIST_NAME (t, i), name))
{
int j;
struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i);
--- 888,895 -----
{
struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i);
! char *tfn = TYPE_FN_FIELDLIST_NAME (t, i);
! if (tfn && !strcmp (tfn, name))
{
int j;
struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i);
***************
*** 925,931
{
for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--)
{
! if (!strcmp (TYPE_FIELD_NAME (t, i), name))
{
found = 1;
break;
--- 928,935 -----
{
for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--)
{
! char *tfn = TYPE_FIELD_NAME (t, i);
! if (tfn && !strcmp (tfn, name))
{
found = 1;
break;
***************
*** 1013,1019
{
for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--)
{
! if (!strcmp (TYPE_FIELD_NAME (t, i), name))
{
return 1;
}
--- 1017,1024 -----
{
for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--)
{
! char *tfn = TYPE_FIELD_NAME (t, i);
! if (tfn && !strcmp (tfn, name))
{
return 1;
}
***************
*** 1038,1044
{
for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i)
{
! if (!strcmp (TYPE_FN_FIELDLIST_NAME (t, i), name))
return 1;
}
--- 1043,1050 -----
{
for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i)
{
! char *tfn = TYPE_FN_FIELDLIST_NAME (t, i);
! if (tfn && !strcmp (tfn, name))
return 1;
}
***************
*** 1078,1084
{
for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--)
{
! if (!strcmp (TYPE_FIELD_NAME (t, i), name))
{
if (TYPE_FIELD_PACKED (t, i))
error ("pointers to bitfield members not allowed");
--- 1084,1091 -----
{
for (i = TYPE_NFIELDS (t) - 1; i >= 0; i--)
{
! char *tfn = TYPE_FIELD_NAME (t, i);
! if (tfn && !strcmp (tfn, name))
{
if (TYPE_FIELD_PACKED (t, i))
error ("pointers to bitfield members not allowed");
***************
*** 1115,1121
{
for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i)
{
! if (!strcmp (TYPE_FN_FIELDLIST_NAME (t, i), name))
{
int j = TYPE_FN_FIELDLIST_LENGTH (t, i);
struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i);
--- 1122,1129 -----
{
for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i)
{
! char *tfn = TYPE_FN_FIELDLIST_NAME (t, i);
! if (tfn && !strcmp (tfn, name))
{
int j = TYPE_FN_FIELDLIST_LENGTH (t, i);
struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i);