From cd829959ce8624dd9143911738a87d84fc415e8f Mon Sep 17 00:00:00 2001 From: Phil Muldoon Date: Fri, 4 Nov 2011 11:57:04 +0000 Subject: [PATCH] 2011-11-04 Phil Muldoon PR Python/13363 * python/py-type.c (typy_lookup_type): Do not return a type in an exception handler. --- gdb/ChangeLog | 7 +++++++ gdb/python/py-type.c | 29 +++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2e9647a82e7..d9af3e505c7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2011-11-04 Phil Muldoon + + PR Python/13363 + + * python/py-type.c (typy_lookup_type): Do not return a type in + an exception handler. + 2011-11-03 Jan Kratochvil Eli Zaretskii diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index 585100dd25b..67696fd80a7 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -606,7 +606,7 @@ static struct type * typy_lookup_type (struct demangle_component *demangled, const struct block *block) { - struct type *type; + struct type *type, *rtype = NULL; char *type_name = NULL; enum demangle_component_type demangled_type; volatile struct gdb_exception except; @@ -626,19 +626,25 @@ typy_lookup_type (struct demangle_component *demangled, TRY_CATCH (except, RETURN_MASK_ALL) { + /* If the demangled_type matches with one of the types + below, run the corresponding function and save the type + to return later. We cannot just return here as we are in + an exception handler. */ switch (demangled_type) { case DEMANGLE_COMPONENT_REFERENCE: - return lookup_reference_type (type); + rtype = lookup_reference_type (type); + break; case DEMANGLE_COMPONENT_POINTER: - return lookup_pointer_type (type); + rtype = lookup_pointer_type (type); + break; case DEMANGLE_COMPONENT_CONST: - return make_cv_type (1, 0, type, NULL); + rtype = make_cv_type (1, 0, type, NULL); + break; case DEMANGLE_COMPONENT_VOLATILE: - return make_cv_type (0, 1, type, NULL); + rtype = make_cv_type (0, 1, type, NULL); + break; } - - type_name = cp_comp_to_string (demangled, 10); } if (except.reason < 0) { @@ -646,7 +652,14 @@ typy_lookup_type (struct demangle_component *demangled, return NULL; } } - + + /* If we have a type from the switch statement above, just return + that. */ + if (rtype) + return rtype; + + /* We don't have a type, so lookup the type. */ + type_name = cp_comp_to_string (demangled, 10); type = typy_lookup_typename (type_name, block); xfree (type_name); -- 2.30.2