diff options
author | Daniel Jacobowitz <drow@false.org> | 2009-12-04 20:26:33 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2009-12-04 20:26:33 +0000 |
commit | 7f79b1c54fb397e812c08374db2be5769908889d (patch) | |
tree | b36294e00ed16bf925481d99f04f5098ba41d8bc /gdb | |
parent | 28e67f5d7578ff0e31087d70bbdf5701852e92c2 (diff) | |
download | gdb-7f79b1c54fb397e812c08374db2be5769908889d.zip gdb-7f79b1c54fb397e812c08374db2be5769908889d.tar.gz gdb-7f79b1c54fb397e812c08374db2be5769908889d.tar.bz2 |
* valops.c (value_struct_elt_for_reference): Do not rely on
field order.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/valops.c | 30 |
2 files changed, 21 insertions, 14 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 461b01a..375f968 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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". diff --git a/gdb/valops.c b/gdb/valops.c index 34619d3..99c99f1 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -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 (len > 1) - error (_("non-unique member `%s' requires type instantiation"), name); + /* Desired method is ambiguous if more than one + method is defined. */ + if (j != -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; + j = ii; + } } if (TYPE_FN_FIELD_STATIC_P (f, j)) |