From f1c6dbf683175c78a5fd049d21dcc74c7a8d4b89 Mon Sep 17 00:00:00 2001 From: Kung Hsu Date: Thu, 4 Nov 1993 00:49:24 +0000 Subject: [PATCH] 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. --- gdb/ChangeLog | 9 +++++++++ gdb/values.c | 12 ++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e501f0a6c1..0930e7ed4e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +Wed Nov 3 16:24:09 1993 Kung Hsu (kung@cirdan.cygnus.com) + + * 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. + Wed Nov 3 09:20:18 1993 Jim Kingdon (kingdon@lioth.cygnus.com) Merge changes for dos x udi: diff --git a/gdb/values.c b/gdb/values.c index 95b751a4fd..494f5bd06d 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;