aboutsummaryrefslogtreecommitdiff
path: root/gdb/values.c
diff options
context:
space:
mode:
authorKung Hsu <kung@cygnus>1993-11-04 00:49:24 +0000
committerKung Hsu <kung@cygnus>1993-11-04 00:49:24 +0000
commitf1c6dbf683175c78a5fd049d21dcc74c7a8d4b89 (patch)
treef0e0819a461bfb41a86ddbcedd699ceeb8ed89b2 /gdb/values.c
parent4ecfad79420b6fc75b326ac7434c9735f5704b11 (diff)
downloadgdb-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.c12
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;