* valops.c (value_struct_elt_for_reference): Do not rely on

field order.
This commit is contained in:
Daniel Jacobowitz 2009-12-04 20:26:33 +00:00
parent 28e67f5d75
commit 7f79b1c54f
2 changed files with 22 additions and 15 deletions

View File

@ -1,3 +1,8 @@
2009-12-04 Daniel Jacobowitz <dan@codesourcery.com>
* valops.c (value_struct_elt_for_reference): Do not rely on
field order.
2009-12-03 Richard Ward <richard.j.ward1@googlemail.com>
* python/py-type.c (convert_field): New attribute "is_base_class".

View File

@ -2700,29 +2700,31 @@ value_struct_elt_for_reference (struct type *domain, int offset,
}
if (j == len)
error (_("no member function matches that type instantiation")); }
error (_("no member function matches that type instantiation"));
}
else
{
int ii;
/* Skip artificial methods. This is necessary if, for example,
the user wants to "print subclass::subclass" with only
one user-defined constructor. There is no ambiguity in this
case. */
j = -1;
for (ii = 0; ii < TYPE_FN_FIELDLIST_LENGTH (t, i);
++ii)
{
/* Skip artificial methods. This is necessary if,
for example, the user wants to "print
subclass::subclass" with only one user-defined
constructor. There is no ambiguity in this
case. */
if (TYPE_FN_FIELD_ARTIFICIAL (f, ii))
--len;
continue;
/* Desired method is ambiguous if more than one
method is defined. */
if (j != -1)
error (_("non-unique member `%s' requires type instantiation"), name);
j = ii;
}
/* Desired method is ambiguous if more than one method is
defined. */
if (len > 1)
error (_("non-unique member `%s' requires type instantiation"), name);
/* This assumes, of course, that all artificial methods appear
BEFORE any concrete methods. */
j = TYPE_FN_FIELDLIST_LENGTH (t, i) - 1;
}
if (TYPE_FN_FIELD_STATIC_P (f, j))