diff options
author | Kung Hsu <kung@cygnus> | 1993-11-04 00:49:24 +0000 |
---|---|---|
committer | Kung Hsu <kung@cygnus> | 1993-11-04 00:49:24 +0000 |
commit | f1c6dbf683175c78a5fd049d21dcc74c7a8d4b89 (patch) | |
tree | f0e0819a461bfb41a86ddbcedd699ceeb8ed89b2 /gdb/values.c | |
parent | 4ecfad79420b6fc75b326ac7434c9735f5704b11 (diff) | |
download | gdb-f1c6dbf683175c78a5fd049d21dcc74c7a8d4b89.zip gdb-f1c6dbf683175c78a5fd049d21dcc74c7a8d4b89.tar.gz gdb-f1c6dbf683175c78a5fd049d21dcc74c7a8d4b89.tar.bz2 |
Modified Files:
values.c valops.c ChangeLog
* values.c (value_fn_field): when physical name not found, do not
error, but return null.
* valops.c (value_struct_elt): when name and args match does not
mean it is the one, some times a typedef class can have the same
memeber method and args. This probably will not happen with new
version of g++, but it does happen in old g++ and cause gdb error.
Diffstat (limited to 'gdb/values.c')
-rw-r--r-- | gdb/values.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/gdb/values.c b/gdb/values.c index 95b751a..494f5bd 100644 --- a/gdb/values.c +++ b/gdb/values.c @@ -762,8 +762,12 @@ value_fn_field (arg1p, f, j, type, offset) sym = lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, j), 0, VAR_NAMESPACE, 0, NULL); - if (! sym) error ("Internal error: could not find physical method named %s", + if (! sym) + return (value)NULL; +/* + error ("Internal error: could not find physical method named %s", TYPE_FN_FIELD_PHYSNAME (f, j)); +*/ v = allocate_value (ftype); VALUE_ADDRESS (v) = BLOCK_START (SYMBOL_BLOCK_VALUE (sym)); @@ -928,7 +932,7 @@ value_headof (in_arg, btype, dtype) * But we leave it in for future use, when we will hopefully * have optimizes the vtable to use thunks instead of offsets. */ /* Use the name of vtable itself to extract a base type. */ - demangled_name += 4; /* Skip vt$ prefix. */ + demangled_name += 4; /* Skip _vt$ prefix. */ } else { @@ -985,10 +989,10 @@ vb_match (type, index, basetype) if (*name != '_') return 0; - /* gcc 2.4 uses vb$. */ + /* gcc 2.4 uses _vb$. */ if (name[1] == 'v' && name[2] == 'b' && name[3] == CPLUS_MARKER) field_class_name = name + 4; - /* gcc 2.5 will use _vb_. */ + /* gcc 2.5 will use __vb_. */ if (name[1] == '_' && name[2] == 'v' && name[3] == 'b' && name[4] == '_') field_class_name = name + 5; |