/* Generic code for supporting multiple C++ ABI's
- Copyright (C) 2001-2019 Free Software Foundation, Inc.
+ Copyright (C) 2001-2020 Free Software Foundation, Inc.
This file is part of GDB.
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-
-/* Local non-gdb includes. */
-#include "command.h"
+#include "value.h"
#include "cp-abi.h"
+#include "command.h"
#include "gdbcmd.h"
#include "ui-out.h"
-#include "value.h"
-
static struct cp_abi_ops *find_cp_abi (const char *short_name);
static struct cp_abi_ops current_cp_abi = { "", NULL };
gdb_assert (current_cp_abi.baseclass_offset != NULL);
- TRY
+ try
{
res = (*current_cp_abi.baseclass_offset) (type, index, valaddr,
embedded_offset,
address, val);
}
- CATCH (ex, RETURN_MASK_ERROR)
+ catch (const gdb_exception_error &ex)
{
if (ex.error != NOT_AVAILABLE_ERROR)
- throw_exception (ex);
+ throw;
throw_error (NOT_AVAILABLE_ERROR,
_("Cannot determine virtual baseclass offset "
"of incomplete object"));
}
- END_CATCH
return res;
}
{
struct type *ret = NULL;
- if ((current_cp_abi.rtti_type) == NULL)
+ if ((current_cp_abi.rtti_type) == NULL
+ || !HAVE_CPLUS_STRUCT (check_typedef (value_type (v))))
return NULL;
- TRY
+ try
{
ret = (*current_cp_abi.rtti_type) (v, full, top, using_enc);
}
- CATCH (e, RETURN_MASK_ERROR)
+ catch (const gdb_exception_error &e)
{
return NULL;
}
- END_CATCH
return ret;
}
return (*current_cp_abi.get_typename_from_type_info) (value);
}
-int
+/* See cp-abi.h. */
+
+struct language_pass_by_ref_info
cp_pass_by_reference (struct type *type)
{
if ((current_cp_abi.pass_by_reference) == NULL)
- return 0;
+ return {};
return (*current_cp_abi.pass_by_reference) (type);
}
_("Cannot find C++ ABI \"%s\" to set it as auto default."),
short_name);
- if (auto_cp_abi.longname != NULL)
- xfree ((char *) auto_cp_abi.longname);
- if (auto_cp_abi.doc != NULL)
- xfree ((char *) auto_cp_abi.doc);
+ xfree ((char *) auto_cp_abi.longname);
+ xfree ((char *) auto_cp_abi.doc);
auto_cp_abi = *abi;
uiout->text (").\n");
}
+void _initialize_cp_abi ();
void
-_initialize_cp_abi (void)
+_initialize_cp_abi ()
{
struct cmd_list_element *c;