diff options
Diffstat (limited to 'gdb/valops.c')
-rw-r--r-- | gdb/valops.c | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/gdb/valops.c b/gdb/valops.c index a0e945c..88f3e32 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -1,6 +1,6 @@ /* Perform non-arithmetic operations on values, for GDB. - Copyright (C) 1986-2024 Free Software Foundation, Inc. + Copyright (C) 1986-2025 Free Software Foundation, Inc. This file is part of GDB. @@ -40,7 +40,6 @@ #include "observable.h" #include "objfiles.h" #include "extension.h" -#include "gdbtypes.h" #include "gdbsupport/byte-vector.h" #include "typeprint.h" @@ -129,8 +128,8 @@ find_function_in_inferior (const char *name, struct objfile **objf_p) } else { - struct bound_minimal_symbol msymbol = - lookup_bound_minimal_symbol (name); + bound_minimal_symbol msymbol + = lookup_minimal_symbol (current_program_space, name); if (msymbol.minsym != NULL) { @@ -1487,7 +1486,7 @@ value_coerce_to_target (struct value *val) nonzero lower bound. FIXME: A previous comment here indicated that this routine should - be substracting the array's lower bound. It's not clear to me that + be subtracting the array's lower bound. It's not clear to me that this is correct. Given an array subscripting operation, it would certainly work to do the adjustment here, essentially computing: @@ -1696,6 +1695,9 @@ value_array (int lowbound, gdb::array_view<struct value *> elemvec) /* Validate that the bounds are reasonable and that each of the elements have the same size. */ + if (elemvec.empty ()) + error (_("size of the array element must not be zero")); + typelength = type_length_units (elemvec[0]->enclosing_type ()); for (struct value *other : elemvec.slice (1)) { @@ -2418,47 +2420,42 @@ value_struct_elt (struct value **argp, return v; } -/* Given *ARGP, a value of type structure or union, or a pointer/reference +/* Given VAL, a value of type structure or union, or a pointer/reference to a structure or union, extract and return its component (field) of type FTYPE at the specified BITPOS. Throw an exception on error. */ struct value * -value_struct_elt_bitpos (struct value **argp, int bitpos, struct type *ftype, - const char *err) +value_struct_elt_bitpos (struct value *val, int bitpos, struct type *ftype) { struct type *t; int i; - *argp = coerce_array (*argp); + val = coerce_array (val); - t = check_typedef ((*argp)->type ()); + t = check_typedef (val->type ()); while (t->is_pointer_or_reference ()) { - *argp = value_ind (*argp); - if (check_typedef ((*argp)->type ())->code () != TYPE_CODE_FUNC) - *argp = coerce_array (*argp); - t = check_typedef ((*argp)->type ()); + val = value_ind (val); + if (check_typedef (val->type ())->code () != TYPE_CODE_FUNC) + val = coerce_array (val); + t = check_typedef (val->type ()); } if (t->code () != TYPE_CODE_STRUCT && t->code () != TYPE_CODE_UNION) - error (_("Attempt to extract a component of a value that is not a %s."), - err); + error (_("Attempt to extract a component of non-aggregate value.")); for (i = TYPE_N_BASECLASSES (t); i < t->num_fields (); i++) { if (!t->field (i).is_static () && bitpos == t->field (i).loc_bitpos () && types_equal (ftype, t->field (i).type ())) - return (*argp)->primitive_field (0, i, t); + return val->primitive_field (0, i, t); } error (_("No field with matching bitpos and type.")); - - /* Never hit. */ - return NULL; } /* Search through the methods of an object (and its bases) to find a @@ -4165,9 +4162,7 @@ cast_into_complex (struct type *type, struct value *val) error (_("cannot cast non-number to complex")); } -void _initialize_valops (); -void -_initialize_valops () +INIT_GDB_FILE (valops) { add_setshow_boolean_cmd ("overload-resolution", class_support, &overload_resolution, _("\ |