diff options
Diffstat (limited to 'gdb/break-catch-throw.c')
-rw-r--r-- | gdb/break-catch-throw.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gdb/break-catch-throw.c b/gdb/break-catch-throw.c index 07dcc7d..59293c4 100644 --- a/gdb/break-catch-throw.c +++ b/gdb/break-catch-throw.c @@ -156,26 +156,28 @@ check_status_exception_catchpoint (struct bpstats *bs) if (self->pattern == NULL) return; + const char *name = nullptr; + gdb::unique_xmalloc_ptr<char> canon; try { struct value *typeinfo_arg; - std::string canon; fetch_probe_arguments (NULL, &typeinfo_arg); type_name = cplus_typename_from_type_info (typeinfo_arg); canon = cp_canonicalize_string (type_name.c_str ()); - if (!canon.empty ()) - std::swap (type_name, canon); + name = (canon == nullptr + ? canon.get () + : type_name.c_str ()); } catch (const gdb_exception_error &e) { exception_print (gdb_stderr, e); } - if (!type_name.empty ()) + if (name != nullptr) { - if (self->pattern->exec (type_name.c_str (), 0, NULL, 0) != 0) + if (self->pattern->exec (name, 0, NULL, 0) != 0) bs->stop = 0; } } |