]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/valops.c
gdb: move a bunch of quit-related things to event-top.{c,h}
[thirdparty/binutils-gdb.git] / gdb / valops.c
CommitLineData
c906108c 1/* Perform non-arithmetic operations on values, for GDB.
990a07ab 2
1d506c26 3 Copyright (C) 1986-2024 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 19
e5dc0d5d 20#include "event-top.h"
ec452525 21#include "extract-store-integer.h"
c906108c
SS
22#include "symtab.h"
23#include "gdbtypes.h"
24#include "value.h"
25#include "frame.h"
26#include "inferior.h"
27#include "gdbcore.h"
28#include "target.h"
29#include "demangle.h"
30#include "language.h"
31#include "gdbcmd.h"
4e052eda 32#include "regcache.h"
015a42b4 33#include "cp-abi.h"
fe898f56 34#include "block.h"
04714b91 35#include "infcall.h"
de4f826b 36#include "dictionary.h"
b6429628 37#include "cp-support.h"
50637b26 38#include "target-float.h"
e6ca34fc 39#include "tracepoint.h"
76727919 40#include "observable.h"
3e3b026f 41#include "objfiles.h"
233e8b28 42#include "extension.h"
79bb1944 43#include "gdbtypes.h"
268a13a5 44#include "gdbsupport/byte-vector.h"
041de3d7 45#include "typeprint.h"
c906108c 46
c906108c
SS
47/* Local functions. */
48
13221aec
AB
49static int typecmp (bool staticp, bool varargs, int nargs,
50 struct field t1[], const gdb::array_view<value *> t2);
c906108c 51
714f19d5 52static struct value *search_struct_field (const char *, struct value *,
8a13d42d 53 struct type *, int);
c906108c 54
714f19d5 55static struct value *search_struct_method (const char *, struct value **,
6b09f134 56 std::optional<gdb::array_view<value *>>,
6b850546 57 LONGEST, int *, struct type *);
c906108c 58
6b1747cd 59static int find_oload_champ_namespace (gdb::array_view<value *> args,
ac3eeb49 60 const char *, const char *,
0891c3cc 61 std::vector<symbol *> *oload_syms,
82ceee50 62 badness_vector *,
7322dca9 63 const int no_adl);
8d577d32 64
6b1747cd
PA
65static int find_oload_champ_namespace_loop (gdb::array_view<value *> args,
66 const char *, const char *,
0891c3cc 67 int, std::vector<symbol *> *oload_syms,
82ceee50 68 badness_vector *, int *,
6b1747cd 69 const int no_adl);
ac3eeb49 70
85cca2bc
PA
71static int find_oload_champ (gdb::array_view<value *> args,
72 size_t num_fns,
38139a96
PA
73 fn_field *methods,
74 xmethod_worker_up *xmethods,
75 symbol **functions,
85cca2bc 76 badness_vector *oload_champ_bv);
ac3eeb49 77
2bca57ba 78static int oload_method_static_p (struct fn_field *, int);
8d577d32
DC
79
80enum oload_classification { STANDARD, NON_STANDARD, INCOMPATIBLE };
81
82ceee50
PA
82static enum oload_classification classify_oload_match
83 (const badness_vector &, int, int);
8d577d32 84
ac3eeb49
MS
85static struct value *value_struct_elt_for_reference (struct type *,
86 int, struct type *,
c848d642 87 const char *,
ac3eeb49
MS
88 struct type *,
89 int, enum noside);
79c2c32d 90
ac3eeb49 91static struct value *value_namespace_elt (const struct type *,
c848d642 92 const char *, int , enum noside);
79c2c32d 93
ac3eeb49 94static struct value *value_maybe_namespace_elt (const struct type *,
c848d642 95 const char *, int,
ac3eeb49 96 enum noside);
63d06c5c 97
a14ed312 98static CORE_ADDR allocate_space_in_inferior (int);
c906108c 99
f23631e4 100static struct value *cast_into_complex (struct type *, struct value *);
c906108c 101
491144b5 102bool overload_resolution = false;
920d2a44
AC
103static void
104show_overload_resolution (struct ui_file *file, int from_tty,
ac3eeb49
MS
105 struct cmd_list_element *c,
106 const char *value)
920d2a44 107{
6cb06a8c
TT
108 gdb_printf (file, _("Overload resolution in evaluating "
109 "C++ functions is %s.\n"),
110 value);
920d2a44 111}
242bfc55 112
3e3b026f
UW
113/* Find the address of function name NAME in the inferior. If OBJF_P
114 is non-NULL, *OBJF_P will be set to the OBJFILE where the function
115 is defined. */
c906108c 116
f23631e4 117struct value *
3e3b026f 118find_function_in_inferior (const char *name, struct objfile **objf_p)
c906108c 119{
d12307c1 120 struct block_symbol sym;
a109c7c1 121
ccf41c24 122 sym = lookup_symbol (name, nullptr, SEARCH_TYPE_DOMAIN, nullptr);
d12307c1 123 if (sym.symbol != NULL)
c906108c 124 {
3e3b026f 125 if (objf_p)
e19b2d94 126 *objf_p = sym.symbol->objfile ();
3e3b026f 127
d12307c1 128 return value_of_variable (sym.symbol, sym.block);
c906108c
SS
129 }
130 else
131 {
7c7b6655
TT
132 struct bound_minimal_symbol msymbol =
133 lookup_bound_minimal_symbol (name);
a109c7c1 134
7c7b6655 135 if (msymbol.minsym != NULL)
c906108c 136 {
7c7b6655 137 struct objfile *objfile = msymbol.objfile;
08feed99 138 struct gdbarch *gdbarch = objfile->arch ();
3e3b026f 139
c906108c 140 struct type *type;
4478b372 141 CORE_ADDR maddr;
3e3b026f 142 type = lookup_pointer_type (builtin_type (gdbarch)->builtin_char);
c906108c
SS
143 type = lookup_function_type (type);
144 type = lookup_pointer_type (type);
4aeddc50 145 maddr = msymbol.value_address ();
3e3b026f
UW
146
147 if (objf_p)
148 *objf_p = objfile;
149
4478b372 150 return value_from_pointer (type, maddr);
c906108c
SS
151 }
152 else
153 {
55f6301a 154 if (!target_has_execution ())
3e43a32a
MS
155 error (_("evaluation of this expression "
156 "requires the target program to be active"));
c5aa993b 157 else
3e43a32a
MS
158 error (_("evaluation of this expression requires the "
159 "program to have a function \"%s\"."),
160 name);
c906108c
SS
161 }
162 }
163}
164
ac3eeb49
MS
165/* Allocate NBYTES of space in the inferior using the inferior's
166 malloc and return a value that is a pointer to the allocated
167 space. */
c906108c 168
f23631e4 169struct value *
fba45db2 170value_allocate_space_in_inferior (int len)
c906108c 171{
3e3b026f
UW
172 struct objfile *objf;
173 struct value *val = find_function_in_inferior ("malloc", &objf);
08feed99 174 struct gdbarch *gdbarch = objf->arch ();
f23631e4 175 struct value *blocklen;
c906108c 176
3e3b026f 177 blocklen = value_from_longest (builtin_type (gdbarch)->builtin_int, len);
e71585ff 178 val = call_function_by_hand (val, NULL, blocklen);
c906108c
SS
179 if (value_logical_not (val))
180 {
55f6301a 181 if (!target_has_execution ())
3e43a32a
MS
182 error (_("No memory available to program now: "
183 "you need to start the target first"));
c5aa993b 184 else
8a3fe4f8 185 error (_("No memory available to program: call to malloc failed"));
c906108c
SS
186 }
187 return val;
188}
189
190static CORE_ADDR
fba45db2 191allocate_space_in_inferior (int len)
c906108c
SS
192{
193 return value_as_long (value_allocate_space_in_inferior (len));
194}
195
6af87b03
AR
196/* Cast struct value VAL to type TYPE and return as a value.
197 Both type and val must be of TYPE_CODE_STRUCT or TYPE_CODE_UNION
694182d2
DJ
198 for this to work. Typedef to one of the codes is permitted.
199 Returns NULL if the cast is neither an upcast nor a downcast. */
6af87b03
AR
200
201static struct value *
202value_cast_structs (struct type *type, struct value *v2)
203{
204 struct type *t1;
205 struct type *t2;
206 struct value *v;
207
208 gdb_assert (type != NULL && v2 != NULL);
209
210 t1 = check_typedef (type);
d0c97917 211 t2 = check_typedef (v2->type ());
6af87b03
AR
212
213 /* Check preconditions. */
78134374
SM
214 gdb_assert ((t1->code () == TYPE_CODE_STRUCT
215 || t1->code () == TYPE_CODE_UNION)
6af87b03 216 && !!"Precondition is that type is of STRUCT or UNION kind.");
78134374
SM
217 gdb_assert ((t2->code () == TYPE_CODE_STRUCT
218 || t2->code () == TYPE_CODE_UNION)
6af87b03
AR
219 && !!"Precondition is that value is of STRUCT or UNION kind");
220
7d93a1e0
SM
221 if (t1->name () != NULL
222 && t2->name () != NULL
223 && !strcmp (t1->name (), t2->name ()))
191ca0a1
CM
224 return NULL;
225
6af87b03
AR
226 /* Upcasting: look in the type of the source to see if it contains the
227 type of the target as a superclass. If so, we'll need to
228 offset the pointer rather than just change its type. */
7d93a1e0 229 if (t1->name () != NULL)
6af87b03 230 {
7d93a1e0 231 v = search_struct_field (t1->name (),
8a13d42d 232 v2, t2, 1);
6af87b03
AR
233 if (v)
234 return v;
235 }
236
237 /* Downcasting: look in the type of the target to see if it contains the
238 type of the source as a superclass. If so, we'll need to
9c3c02fd 239 offset the pointer rather than just change its type. */
7d93a1e0 240 if (t2->name () != NULL)
6af87b03 241 {
9c3c02fd 242 /* Try downcasting using the run-time type of the value. */
6b850546
DT
243 int full, using_enc;
244 LONGEST top;
9c3c02fd
TT
245 struct type *real_type;
246
247 real_type = value_rtti_type (v2, &full, &top, &using_enc);
248 if (real_type)
249 {
250 v = value_full_object (v2, real_type, full, top, using_enc);
9feb2d07 251 v = value_at_lazy (real_type, v->address ());
d0c97917 252 real_type = v->type ();
9c3c02fd
TT
253
254 /* We might be trying to cast to the outermost enclosing
255 type, in which case search_struct_field won't work. */
7d93a1e0
SM
256 if (real_type->name () != NULL
257 && !strcmp (real_type->name (), t1->name ()))
9c3c02fd
TT
258 return v;
259
7d93a1e0 260 v = search_struct_field (t2->name (), v, real_type, 1);
9c3c02fd
TT
261 if (v)
262 return v;
263 }
264
265 /* Try downcasting using information from the destination type
266 T2. This wouldn't work properly for classes with virtual
267 bases, but those were handled above. */
7d93a1e0 268 v = search_struct_field (t2->name (),
ee7bb294 269 value::zero (t1, not_lval), t1, 1);
6af87b03
AR
270 if (v)
271 {
272 /* Downcasting is possible (t1 is superclass of v2). */
9feb2d07 273 CORE_ADDR addr2 = v2->address () + v2->embedded_offset ();
a109c7c1 274
9feb2d07 275 addr2 -= v->address () + v->embedded_offset ();
6af87b03
AR
276 return value_at (type, addr2);
277 }
278 }
694182d2
DJ
279
280 return NULL;
6af87b03
AR
281}
282
fb933624
DJ
283/* Cast one pointer or reference type to another. Both TYPE and
284 the type of ARG2 should be pointer types, or else both should be
b1af9e97
TT
285 reference types. If SUBCLASS_CHECK is non-zero, this will force a
286 check to see whether TYPE is a superclass of ARG2's type. If
287 SUBCLASS_CHECK is zero, then the subclass check is done only when
288 ARG2 is itself non-zero. Returns the new pointer or reference. */
fb933624
DJ
289
290struct value *
b1af9e97
TT
291value_cast_pointers (struct type *type, struct value *arg2,
292 int subclass_check)
fb933624 293{
d160942f 294 struct type *type1 = check_typedef (type);
d0c97917 295 struct type *type2 = check_typedef (arg2->type ());
27710edb
SM
296 struct type *t1 = check_typedef (type1->target_type ());
297 struct type *t2 = check_typedef (type2->target_type ());
fb933624 298
78134374
SM
299 if (t1->code () == TYPE_CODE_STRUCT
300 && t2->code () == TYPE_CODE_STRUCT
b1af9e97 301 && (subclass_check || !value_logical_not (arg2)))
fb933624 302 {
6af87b03 303 struct value *v2;
fb933624 304
aa006118 305 if (TYPE_IS_REFERENCE (type2))
6af87b03
AR
306 v2 = coerce_ref (arg2);
307 else
308 v2 = value_ind (arg2);
d0c97917 309 gdb_assert (check_typedef (v2->type ())->code ()
3e43a32a 310 == TYPE_CODE_STRUCT && !!"Why did coercion fail?");
6af87b03
AR
311 v2 = value_cast_structs (t1, v2);
312 /* At this point we have what we can have, un-dereference if needed. */
313 if (v2)
fb933624 314 {
6af87b03 315 struct value *v = value_addr (v2);
a109c7c1 316
81ae560c 317 v->deprecated_set_type (type);
6af87b03 318 return v;
fb933624 319 }
8301c89e 320 }
fb933624
DJ
321
322 /* No superclass found, just change the pointer type. */
cda03344 323 arg2 = arg2->copy ();
81ae560c 324 arg2->deprecated_set_type (type);
463b870d 325 arg2->set_enclosing_type (type);
391f8628 326 arg2->set_pointed_to_offset (0); /* pai: chk_val */
fb933624
DJ
327 return arg2;
328}
329
b49180ac
TT
330/* See value.h. */
331
332gdb_mpq
333value_to_gdb_mpq (struct value *value)
334{
d0c97917 335 struct type *type = check_typedef (value->type ());
b49180ac
TT
336
337 gdb_mpq result;
338 if (is_floating_type (type))
7607de94 339 result = target_float_to_host_double (value->contents ().data (), type);
b49180ac
TT
340 else
341 {
342 gdb_assert (is_integral_type (type)
343 || is_fixed_point_type (type));
344
345 gdb_mpz vz;
efaf1ae0 346 vz.read (value->contents (), type_byte_order (type),
46680d22 347 type->is_unsigned ());
302273ca 348 result = vz;
b49180ac
TT
349
350 if (is_fixed_point_type (type))
7607de94 351 result *= type->fixed_point_scaling_factor ();
b49180ac
TT
352 }
353
354 return result;
355}
356
0a12719e
JB
357/* Assuming that TO_TYPE is a fixed point type, return a value
358 corresponding to the cast of FROM_VAL to that type. */
359
360static struct value *
361value_cast_to_fixed_point (struct type *to_type, struct value *from_val)
362{
d0c97917 363 struct type *from_type = from_val->type ();
0a12719e
JB
364
365 if (from_type == to_type)
366 return from_val;
367
b49180ac
TT
368 if (!is_floating_type (from_type)
369 && !is_integral_type (from_type)
370 && !is_fixed_point_type (from_type))
0a12719e
JB
371 error (_("Invalid conversion from type %s to fixed point type %s"),
372 from_type->name (), to_type->name ());
373
b49180ac
TT
374 gdb_mpq vq = value_to_gdb_mpq (from_val);
375
0a12719e
JB
376 /* Divide that value by the scaling factor to obtain the unscaled
377 value, first in rational form, and then in integer form. */
378
7607de94 379 vq /= to_type->fixed_point_scaling_factor ();
0a12719e
JB
380 gdb_mpz unscaled = vq.get_rounded ();
381
382 /* Finally, create the result value, and pack the unscaled value
383 in it. */
317c3ed9 384 struct value *result = value::allocate (to_type);
bbe912ba 385 unscaled.write (result->contents_raw (),
c9f0b43f 386 type_byte_order (to_type),
0a12719e
JB
387 to_type->is_unsigned ());
388
389 return result;
390}
391
c906108c
SS
392/* Cast value ARG2 to type TYPE and return as a value.
393 More general than a C cast: accepts any two types of the same length,
394 and if ARG2 is an lvalue it can be cast into anything at all. */
395/* In C++, casts may change pointer or object representations. */
396
f23631e4
AC
397struct value *
398value_cast (struct type *type, struct value *arg2)
c906108c 399{
52f0bd74
AC
400 enum type_code code1;
401 enum type_code code2;
402 int scalar;
c906108c
SS
403 struct type *type2;
404
405 int convert_to_boolean = 0;
c5aa993b 406
30ab3586
AB
407 /* TYPE might be equal in meaning to the existing type of ARG2, but for
408 many reasons, might be a different type object (e.g. TYPE might be a
d0c97917 409 gdbarch owned type, while ARG2->type () could be an objfile owned
30ab3586
AB
410 type).
411
412 In this case we want to preserve the LVAL of ARG2 as this allows the
413 resulting value to be used in more places. We do this by calling
414 VALUE_COPY if appropriate. */
d391f372
HD
415 if (types_deeply_equal (make_unqualified_type (arg2->type ()),
416 make_unqualified_type (type)))
30ab3586
AB
417 {
418 /* If the types are exactly equal then we can avoid creating a new
419 value completely. */
d0c97917 420 if (arg2->type () != type)
30ab3586 421 {
cda03344 422 arg2 = arg2->copy ();
81ae560c 423 arg2->deprecated_set_type (type);
30ab3586
AB
424 }
425 return arg2;
426 }
c906108c 427
0a12719e
JB
428 if (is_fixed_point_type (type))
429 return value_cast_to_fixed_point (type, arg2);
430
6af87b03 431 /* Check if we are casting struct reference to struct reference. */
aa006118 432 if (TYPE_IS_REFERENCE (check_typedef (type)))
6af87b03
AR
433 {
434 /* We dereference type; then we recurse and finally
dda83cd7 435 we generate value of the given reference. Nothing wrong with
6af87b03
AR
436 that. */
437 struct type *t1 = check_typedef (type);
27710edb 438 struct type *dereftype = check_typedef (t1->target_type ());
aa006118 439 struct value *val = value_cast (dereftype, arg2);
a109c7c1 440
78134374 441 return value_ref (val, t1->code ());
6af87b03
AR
442 }
443
d0c97917 444 if (TYPE_IS_REFERENCE (check_typedef (arg2->type ())))
6af87b03
AR
445 /* We deref the value and then do the cast. */
446 return value_cast (type, coerce_ref (arg2));
447
c973d0aa
PA
448 /* Strip typedefs / resolve stubs in order to get at the type's
449 code/length, but remember the original type, to use as the
450 resulting type of the cast, in case it was a typedef. */
451 struct type *to_type = type;
452
f168693b 453 type = check_typedef (type);
78134374 454 code1 = type->code ();
994b9211 455 arg2 = coerce_ref (arg2);
d0c97917 456 type2 = check_typedef (arg2->type ());
c906108c 457
fb933624
DJ
458 /* You can't cast to a reference type. See value_cast_pointers
459 instead. */
aa006118 460 gdb_assert (!TYPE_IS_REFERENCE (type));
fb933624 461
ac3eeb49
MS
462 /* A cast to an undetermined-length array_type, such as
463 (TYPE [])OBJECT, is treated like a cast to (TYPE [N])OBJECT,
464 where N is sizeof(OBJECT)/sizeof(TYPE). */
c906108c
SS
465 if (code1 == TYPE_CODE_ARRAY)
466 {
27710edb 467 struct type *element_type = type->target_type ();
df86565b 468 unsigned element_length = check_typedef (element_type)->length ();
a109c7c1 469
cf88be68 470 if (element_length > 0 && type->bounds ()->high.kind () == PROP_UNDEFINED)
c906108c 471 {
3d967001 472 struct type *range_type = type->index_type ();
df86565b 473 int val_length = type2->length ();
c906108c 474 LONGEST low_bound, high_bound, new_length;
a109c7c1 475
1f8d2881 476 if (!get_discrete_bounds (range_type, &low_bound, &high_bound))
c906108c
SS
477 low_bound = 0, high_bound = 0;
478 new_length = val_length / element_length;
479 if (val_length % element_length != 0)
3e43a32a
MS
480 warning (_("array element type size does not "
481 "divide object size in cast"));
ac3eeb49
MS
482 /* FIXME-type-allocation: need a way to free this type when
483 we are done with it. */
e727c536
TT
484 type_allocator alloc (range_type->target_type ());
485 range_type = create_static_range_type (alloc,
27710edb 486 range_type->target_type (),
0c9c3474
SA
487 low_bound,
488 new_length + low_bound - 1);
9e76b17a 489 arg2->deprecated_set_type (create_array_type (alloc,
ac3eeb49
MS
490 element_type,
491 range_type));
c906108c
SS
492 return arg2;
493 }
494 }
495
67bd3fd5 496 if (current_language->c_style_arrays_p ()
78134374 497 && type2->code () == TYPE_CODE_ARRAY
bd63c870 498 && !type2->is_vector ())
c906108c
SS
499 arg2 = value_coerce_array (arg2);
500
78134374 501 if (type2->code () == TYPE_CODE_FUNC)
c906108c
SS
502 arg2 = value_coerce_function (arg2);
503
d0c97917 504 type2 = check_typedef (arg2->type ());
78134374 505 code2 = type2->code ();
c906108c
SS
506
507 if (code1 == TYPE_CODE_COMPLEX)
c973d0aa 508 return cast_into_complex (to_type, arg2);
c906108c
SS
509 if (code1 == TYPE_CODE_BOOL)
510 {
511 code1 = TYPE_CODE_INT;
512 convert_to_boolean = 1;
513 }
514 if (code1 == TYPE_CODE_CHAR)
515 code1 = TYPE_CODE_INT;
516 if (code2 == TYPE_CODE_BOOL || code2 == TYPE_CODE_CHAR)
517 code2 = TYPE_CODE_INT;
518
519 scalar = (code2 == TYPE_CODE_INT || code2 == TYPE_CODE_FLT
4ef30785 520 || code2 == TYPE_CODE_DECFLOAT || code2 == TYPE_CODE_ENUM
0a12719e
JB
521 || code2 == TYPE_CODE_RANGE
522 || is_fixed_point_type (type2));
c906108c 523
6af87b03
AR
524 if ((code1 == TYPE_CODE_STRUCT || code1 == TYPE_CODE_UNION)
525 && (code2 == TYPE_CODE_STRUCT || code2 == TYPE_CODE_UNION)
7d93a1e0 526 && type->name () != 0)
694182d2 527 {
c973d0aa 528 struct value *v = value_cast_structs (to_type, arg2);
a109c7c1 529
694182d2
DJ
530 if (v)
531 return v;
532 }
533
50637b26 534 if (is_floating_type (type) && scalar)
4ef30785 535 {
50637b26
UW
536 if (is_floating_value (arg2))
537 {
317c3ed9 538 struct value *v = value::allocate (to_type);
efaf1ae0 539 target_float_convert (arg2->contents ().data (), type2,
bbe912ba 540 v->contents_raw ().data (), type);
50637b26
UW
541 return v;
542 }
0a12719e
JB
543 else if (is_fixed_point_type (type2))
544 {
545 gdb_mpq fp_val;
546
efaf1ae0 547 fp_val.read_fixed_point (arg2->contents (),
46680d22
SM
548 type_byte_order (type2),
549 type2->is_unsigned (),
550 type2->fixed_point_scaling_factor ());
0a12719e 551
317c3ed9 552 struct value *v = value::allocate (to_type);
bbe912ba 553 target_float_from_host_double (v->contents_raw ().data (),
7607de94 554 to_type, fp_val.as_double ());
0a12719e
JB
555 return v;
556 }
50637b26 557
3b4b2f16 558 /* The only option left is an integral type. */
c6d940a9 559 if (type2->is_unsigned ())
50637b26 560 return value_from_ulongest (to_type, value_as_long (arg2));
4ef30785 561 else
50637b26 562 return value_from_longest (to_type, value_as_long (arg2));
4ef30785 563 }
c906108c
SS
564 else if ((code1 == TYPE_CODE_INT || code1 == TYPE_CODE_ENUM
565 || code1 == TYPE_CODE_RANGE)
0d5de010
DJ
566 && (scalar || code2 == TYPE_CODE_PTR
567 || code2 == TYPE_CODE_MEMBERPTR))
c906108c 568 {
303a881f 569 gdb_mpz longest;
c5aa993b 570
2bf1f4a1 571 /* When we cast pointers to integers, we mustn't use
dda83cd7
SM
572 gdbarch_pointer_to_address to find the address the pointer
573 represents, as value_as_long would. GDB should evaluate
574 expressions just as the compiler would --- and the compiler
575 sees a cast as a simple reinterpretation of the pointer's
576 bits. */
2bf1f4a1 577 if (code2 == TYPE_CODE_PTR)
303a881f
TT
578 longest = extract_unsigned_integer (arg2->contents (),
579 type_byte_order (type2));
2bf1f4a1 580 else
303a881f
TT
581 longest = value_as_mpz (arg2);
582 if (convert_to_boolean)
583 longest = bool (longest);
584
585 return value_from_mpz (to_type, longest);
c906108c 586 }
ac3eeb49
MS
587 else if (code1 == TYPE_CODE_PTR && (code2 == TYPE_CODE_INT
588 || code2 == TYPE_CODE_ENUM
589 || code2 == TYPE_CODE_RANGE))
634acd5f 590 {
df86565b 591 /* type->length () is the length of a pointer, but we really
4603e466
DT
592 want the length of an address! -- we are really dealing with
593 addresses (i.e., gdb representations) not pointers (i.e.,
594 target representations) here.
595
596 This allows things like "print *(int *)0x01000234" to work
597 without printing a misleading message -- which would
598 otherwise occur when dealing with a target having two byte
599 pointers and four byte addresses. */
600
8ee511af 601 int addr_bit = gdbarch_addr_bit (type2->arch ());
44671f3f 602 gdb_mpz longest = value_as_mpz (arg2);
a109c7c1 603
44671f3f
TT
604 gdb_mpz addr_val = gdb_mpz (1) << addr_bit;
605 if (longest >= addr_val || longest <= -addr_val)
606 warning (_("value truncated"));
607
608 return value_from_mpz (to_type, longest);
634acd5f 609 }
0d5de010
DJ
610 else if (code1 == TYPE_CODE_METHODPTR && code2 == TYPE_CODE_INT
611 && value_as_long (arg2) == 0)
612 {
317c3ed9 613 struct value *result = value::allocate (to_type);
a109c7c1 614
50888e42 615 cplus_make_method_ptr (to_type,
bbe912ba 616 result->contents_writeable ().data (), 0, 0);
0d5de010
DJ
617 return result;
618 }
619 else if (code1 == TYPE_CODE_MEMBERPTR && code2 == TYPE_CODE_INT
620 && value_as_long (arg2) == 0)
621 {
622 /* The Itanium C++ ABI represents NULL pointers to members as
623 minus one, instead of biasing the normal case. */
c973d0aa 624 return value_from_longest (to_type, -1);
0d5de010 625 }
bd63c870
SM
626 else if (code1 == TYPE_CODE_ARRAY && type->is_vector ()
627 && code2 == TYPE_CODE_ARRAY && type2->is_vector ()
df86565b 628 && type->length () != type2->length ())
8954db33 629 error (_("Cannot convert between vector values of different sizes"));
bd63c870 630 else if (code1 == TYPE_CODE_ARRAY && type->is_vector () && scalar
df86565b 631 && type->length () != type2->length ())
8954db33 632 error (_("can only cast scalar to vector of same size"));
0ba2eb0f
TT
633 else if (code1 == TYPE_CODE_VOID)
634 {
ee7bb294 635 return value::zero (to_type, not_lval);
0ba2eb0f 636 }
df86565b 637 else if (type->length () == type2->length ())
c906108c
SS
638 {
639 if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_PTR)
c973d0aa 640 return value_cast_pointers (to_type, arg2, 0);
fb933624 641
cda03344 642 arg2 = arg2->copy ();
81ae560c 643 arg2->deprecated_set_type (to_type);
463b870d 644 arg2->set_enclosing_type (to_type);
391f8628 645 arg2->set_pointed_to_offset (0); /* pai: chk_val */
c906108c
SS
646 return arg2;
647 }
736355f2 648 else if (arg2->lval () == lval_memory)
9feb2d07 649 return value_at_lazy (to_type, arg2->address ());
c906108c
SS
650 else
651 {
32372d80
TT
652 if (current_language->la_language == language_ada)
653 error (_("Invalid type conversion."));
8a3fe4f8 654 error (_("Invalid cast."));
c906108c
SS
655 }
656}
657
4e8f195d
TT
658/* The C++ reinterpret_cast operator. */
659
660struct value *
661value_reinterpret_cast (struct type *type, struct value *arg)
662{
663 struct value *result;
664 struct type *real_type = check_typedef (type);
665 struct type *arg_type, *dest_type;
666 int is_ref = 0;
667 enum type_code dest_code, arg_code;
668
669 /* Do reference, function, and array conversion. */
670 arg = coerce_array (arg);
671
672 /* Attempt to preserve the type the user asked for. */
673 dest_type = type;
674
675 /* If we are casting to a reference type, transform
aa006118
AV
676 reinterpret_cast<T&[&]>(V) to *reinterpret_cast<T*>(&V). */
677 if (TYPE_IS_REFERENCE (real_type))
4e8f195d
TT
678 {
679 is_ref = 1;
680 arg = value_addr (arg);
27710edb 681 dest_type = lookup_pointer_type (dest_type->target_type ());
4e8f195d
TT
682 real_type = lookup_pointer_type (real_type);
683 }
684
d0c97917 685 arg_type = arg->type ();
4e8f195d 686
78134374
SM
687 dest_code = real_type->code ();
688 arg_code = arg_type->code ();
4e8f195d
TT
689
690 /* We can convert pointer types, or any pointer type to int, or int
691 type to pointer. */
692 if ((dest_code == TYPE_CODE_PTR && arg_code == TYPE_CODE_INT)
693 || (dest_code == TYPE_CODE_INT && arg_code == TYPE_CODE_PTR)
694 || (dest_code == TYPE_CODE_METHODPTR && arg_code == TYPE_CODE_INT)
695 || (dest_code == TYPE_CODE_INT && arg_code == TYPE_CODE_METHODPTR)
696 || (dest_code == TYPE_CODE_MEMBERPTR && arg_code == TYPE_CODE_INT)
697 || (dest_code == TYPE_CODE_INT && arg_code == TYPE_CODE_MEMBERPTR)
698 || (dest_code == arg_code
23cdd943 699 && (dest_code == TYPE_CODE_METHODPTR
4e8f195d
TT
700 || dest_code == TYPE_CODE_MEMBERPTR)))
701 result = value_cast (dest_type, arg);
23cdd943
HD
702 else if (dest_code == TYPE_CODE_PTR && arg_code == TYPE_CODE_PTR)
703 {
704 /* Don't do any up- or downcasting. */
705 result = arg->copy ();
706 result->deprecated_set_type (dest_type);
707 result->set_enclosing_type (dest_type);
708 result->set_pointed_to_offset (0);
709 }
4e8f195d
TT
710 else
711 error (_("Invalid reinterpret_cast"));
712
713 if (is_ref)
a65cfae5 714 result = value_cast (type, value_ref (value_ind (result),
dda83cd7 715 type->code ()));
4e8f195d
TT
716
717 return result;
718}
719
720/* A helper for value_dynamic_cast. This implements the first of two
721 runtime checks: we iterate over all the base classes of the value's
722 class which are equal to the desired class; if only one of these
723 holds the value, then it is the answer. */
724
725static int
726dynamic_cast_check_1 (struct type *desired_type,
8af8e3bc 727 const gdb_byte *valaddr,
6b850546 728 LONGEST embedded_offset,
4e8f195d 729 CORE_ADDR address,
8af8e3bc 730 struct value *val,
4e8f195d
TT
731 struct type *search_type,
732 CORE_ADDR arg_addr,
733 struct type *arg_type,
734 struct value **result)
735{
736 int i, result_count = 0;
737
738 for (i = 0; i < TYPE_N_BASECLASSES (search_type) && result_count < 2; ++i)
739 {
6b850546
DT
740 LONGEST offset = baseclass_offset (search_type, i, valaddr,
741 embedded_offset,
742 address, val);
a109c7c1 743
4e8f195d
TT
744 if (class_types_same_p (desired_type, TYPE_BASECLASS (search_type, i)))
745 {
8af8e3bc 746 if (address + embedded_offset + offset >= arg_addr
df86565b 747 && address + embedded_offset + offset < arg_addr + arg_type->length ())
4e8f195d
TT
748 {
749 ++result_count;
750 if (!*result)
751 *result = value_at_lazy (TYPE_BASECLASS (search_type, i),
8af8e3bc 752 address + embedded_offset + offset);
4e8f195d
TT
753 }
754 }
755 else
756 result_count += dynamic_cast_check_1 (desired_type,
8af8e3bc
PA
757 valaddr,
758 embedded_offset + offset,
759 address, val,
4e8f195d
TT
760 TYPE_BASECLASS (search_type, i),
761 arg_addr,
762 arg_type,
763 result);
764 }
765
766 return result_count;
767}
768
769/* A helper for value_dynamic_cast. This implements the second of two
770 runtime checks: we look for a unique public sibling class of the
771 argument's declared class. */
772
773static int
774dynamic_cast_check_2 (struct type *desired_type,
8af8e3bc 775 const gdb_byte *valaddr,
6b850546 776 LONGEST embedded_offset,
4e8f195d 777 CORE_ADDR address,
8af8e3bc 778 struct value *val,
4e8f195d
TT
779 struct type *search_type,
780 struct value **result)
781{
782 int i, result_count = 0;
783
784 for (i = 0; i < TYPE_N_BASECLASSES (search_type) && result_count < 2; ++i)
785 {
6b850546 786 LONGEST offset;
4e8f195d
TT
787
788 if (! BASETYPE_VIA_PUBLIC (search_type, i))
789 continue;
790
8af8e3bc
PA
791 offset = baseclass_offset (search_type, i, valaddr, embedded_offset,
792 address, val);
4e8f195d
TT
793 if (class_types_same_p (desired_type, TYPE_BASECLASS (search_type, i)))
794 {
795 ++result_count;
796 if (*result == NULL)
797 *result = value_at_lazy (TYPE_BASECLASS (search_type, i),
8af8e3bc 798 address + embedded_offset + offset);
4e8f195d
TT
799 }
800 else
801 result_count += dynamic_cast_check_2 (desired_type,
8af8e3bc
PA
802 valaddr,
803 embedded_offset + offset,
804 address, val,
4e8f195d
TT
805 TYPE_BASECLASS (search_type, i),
806 result);
807 }
808
809 return result_count;
810}
811
812/* The C++ dynamic_cast operator. */
813
814struct value *
815value_dynamic_cast (struct type *type, struct value *arg)
816{
6b850546
DT
817 int full, using_enc;
818 LONGEST top;
4e8f195d 819 struct type *resolved_type = check_typedef (type);
d0c97917 820 struct type *arg_type = check_typedef (arg->type ());
4e8f195d
TT
821 struct type *class_type, *rtti_type;
822 struct value *result, *tem, *original_arg = arg;
823 CORE_ADDR addr;
aa006118 824 int is_ref = TYPE_IS_REFERENCE (resolved_type);
4e8f195d 825
78134374 826 if (resolved_type->code () != TYPE_CODE_PTR
aa006118 827 && !TYPE_IS_REFERENCE (resolved_type))
4e8f195d 828 error (_("Argument to dynamic_cast must be a pointer or reference type"));
27710edb
SM
829 if (resolved_type->target_type ()->code () != TYPE_CODE_VOID
830 && resolved_type->target_type ()->code () != TYPE_CODE_STRUCT)
4e8f195d
TT
831 error (_("Argument to dynamic_cast must be pointer to class or `void *'"));
832
27710edb 833 class_type = check_typedef (resolved_type->target_type ());
78134374 834 if (resolved_type->code () == TYPE_CODE_PTR)
4e8f195d 835 {
78134374
SM
836 if (arg_type->code () != TYPE_CODE_PTR
837 && ! (arg_type->code () == TYPE_CODE_INT
4e8f195d
TT
838 && value_as_long (arg) == 0))
839 error (_("Argument to dynamic_cast does not have pointer type"));
78134374 840 if (arg_type->code () == TYPE_CODE_PTR)
4e8f195d 841 {
27710edb 842 arg_type = check_typedef (arg_type->target_type ());
78134374 843 if (arg_type->code () != TYPE_CODE_STRUCT)
3e43a32a
MS
844 error (_("Argument to dynamic_cast does "
845 "not have pointer to class type"));
4e8f195d
TT
846 }
847
848 /* Handle NULL pointers. */
849 if (value_as_long (arg) == 0)
ee7bb294 850 return value::zero (type, not_lval);
4e8f195d
TT
851
852 arg = value_ind (arg);
853 }
854 else
855 {
78134374 856 if (arg_type->code () != TYPE_CODE_STRUCT)
4e8f195d
TT
857 error (_("Argument to dynamic_cast does not have class type"));
858 }
859
860 /* If the classes are the same, just return the argument. */
861 if (class_types_same_p (class_type, arg_type))
0238b543 862 return value_cast (type, original_arg);
4e8f195d
TT
863
864 /* If the target type is a unique base class of the argument's
865 declared type, just cast it. */
866 if (is_ancestor (class_type, arg_type))
867 {
868 if (is_unique_ancestor (class_type, arg))
869 return value_cast (type, original_arg);
870 error (_("Ambiguous dynamic_cast"));
871 }
872
873 rtti_type = value_rtti_type (arg, &full, &top, &using_enc);
874 if (! rtti_type)
875 error (_("Couldn't determine value's most derived type for dynamic_cast"));
876
877 /* Compute the most derived object's address. */
9feb2d07 878 addr = arg->address ();
4e8f195d
TT
879 if (full)
880 {
881 /* Done. */
882 }
883 else if (using_enc)
884 addr += top;
885 else
391f8628 886 addr += top + arg->embedded_offset ();
4e8f195d
TT
887
888 /* dynamic_cast<void *> means to return a pointer to the
889 most-derived object. */
78134374 890 if (resolved_type->code () == TYPE_CODE_PTR
27710edb 891 && resolved_type->target_type ()->code () == TYPE_CODE_VOID)
4e8f195d
TT
892 return value_at_lazy (type, addr);
893
0238b543
HD
894 tem = value_at (resolved_type->target_type (), addr);
895 type = (is_ref
896 ? lookup_reference_type (tem->type (), resolved_type->code ())
897 : lookup_pointer_type (tem->type ()));
4e8f195d
TT
898
899 /* The first dynamic check specified in 5.2.7. */
27710edb 900 if (is_public_ancestor (arg_type, resolved_type->target_type ()))
4e8f195d 901 {
27710edb 902 if (class_types_same_p (rtti_type, resolved_type->target_type ()))
0238b543
HD
903 return (is_ref
904 ? value_ref (tem, resolved_type->code ())
905 : value_addr (tem));
4e8f195d 906 result = NULL;
27710edb 907 if (dynamic_cast_check_1 (resolved_type->target_type (),
efaf1ae0 908 tem->contents_for_printing ().data (),
391f8628 909 tem->embedded_offset (),
9feb2d07 910 tem->address (), tem,
4e8f195d
TT
911 rtti_type, addr,
912 arg_type,
913 &result) == 1)
914 return value_cast (type,
a65cfae5 915 is_ref
78134374 916 ? value_ref (result, resolved_type->code ())
a65cfae5 917 : value_addr (result));
4e8f195d
TT
918 }
919
920 /* The second dynamic check specified in 5.2.7. */
921 result = NULL;
922 if (is_public_ancestor (arg_type, rtti_type)
27710edb 923 && dynamic_cast_check_2 (resolved_type->target_type (),
efaf1ae0 924 tem->contents_for_printing ().data (),
391f8628 925 tem->embedded_offset (),
9feb2d07 926 tem->address (), tem,
4e8f195d
TT
927 rtti_type, &result) == 1)
928 return value_cast (type,
a65cfae5 929 is_ref
78134374 930 ? value_ref (result, resolved_type->code ())
a65cfae5 931 : value_addr (result));
4e8f195d 932
78134374 933 if (resolved_type->code () == TYPE_CODE_PTR)
ee7bb294 934 return value::zero (type, not_lval);
4e8f195d
TT
935
936 error (_("dynamic_cast failed"));
937}
938
18a46dbe 939/* Create a not_lval value of numeric type TYPE that is one, and return it. */
301f0ecf
DE
940
941struct value *
18a46dbe 942value_one (struct type *type)
301f0ecf
DE
943{
944 struct type *type1 = check_typedef (type);
4e608b4f 945 struct value *val;
301f0ecf 946
50637b26 947 if (is_integral_type (type1) || is_floating_type (type1))
301f0ecf
DE
948 {
949 val = value_from_longest (type, (LONGEST) 1);
950 }
bd63c870 951 else if (type1->code () == TYPE_CODE_ARRAY && type1->is_vector ())
120bd360 952 {
27710edb 953 struct type *eltype = check_typedef (type1->target_type ());
cfa6f054
KW
954 int i;
955 LONGEST low_bound, high_bound;
120bd360 956
cfa6f054
KW
957 if (!get_array_bounds (type1, &low_bound, &high_bound))
958 error (_("Could not determine the vector bounds"));
959
317c3ed9 960 val = value::allocate (type);
bbe912ba 961 gdb::array_view<gdb_byte> val_contents = val->contents_writeable ();
df86565b 962 int elt_len = eltype->length ();
4bce7cda 963
cfa6f054 964 for (i = 0; i < high_bound - low_bound + 1; i++)
120bd360 965 {
4bce7cda 966 value *tmp = value_one (eltype);
efaf1ae0 967 copy (tmp->contents_all (),
4bce7cda 968 val_contents.slice (i * elt_len, elt_len));
120bd360
KW
969 }
970 }
301f0ecf
DE
971 else
972 {
973 error (_("Not a numeric type."));
974 }
975
18a46dbe 976 /* value_one result is never used for assignments to. */
736355f2 977 gdb_assert (val->lval () == not_lval);
18a46dbe 978
301f0ecf
DE
979 return val;
980}
981
80180f79
SA
982/* Helper function for value_at, value_at_lazy, and value_at_lazy_stack.
983 The type of the created value may differ from the passed type TYPE.
984 Make sure to retrieve the returned values's new type after this call
985 e.g. in case the type is a variable length array. */
4e5d721f
DE
986
987static struct value *
8480a37e 988get_value_at (struct type *type, CORE_ADDR addr, const frame_info_ptr &frame,
168f9f95 989 int lazy)
4e5d721f
DE
990{
991 struct value *val;
992
78134374 993 if (check_typedef (type)->code () == TYPE_CODE_VOID)
4e5d721f
DE
994 error (_("Attempt to dereference a generic pointer."));
995
168f9f95 996 val = value_from_contents_and_address (type, NULL, addr, frame);
4e5d721f 997
a3d34bf4 998 if (!lazy)
78259c36 999 val->fetch_lazy ();
4e5d721f
DE
1000
1001 return val;
1002}
1003
070ad9f0 1004/* Return a value with type TYPE located at ADDR.
c906108c
SS
1005
1006 Call value_at only if the data needs to be fetched immediately;
85102364 1007 if we can be 'lazy' and defer the fetch, perhaps indefinitely, call
c906108c 1008 value_at_lazy instead. value_at_lazy simply records the address of
070ad9f0 1009 the data and sets the lazy-evaluation-required flag. The lazy flag
0fd88904 1010 is tested in the value_contents macro, which is used if and when
80180f79
SA
1011 the contents are actually required. The type of the created value
1012 may differ from the passed type TYPE. Make sure to retrieve the
1013 returned values's new type after this call e.g. in case the type
1014 is a variable length array.
c906108c
SS
1015
1016 Note: value_at does *NOT* handle embedded offsets; perform such
ac3eeb49 1017 adjustments before or after calling it. */
c906108c 1018
f23631e4 1019struct value *
00a4c844 1020value_at (struct type *type, CORE_ADDR addr)
c906108c 1021{
168f9f95 1022 return get_value_at (type, addr, nullptr, 0);
c906108c
SS
1023}
1024
7f22044a
TT
1025/* See value.h. */
1026
1027struct value *
1028value_at_non_lval (struct type *type, CORE_ADDR addr)
1029{
1030 struct value *result = value_at (type, addr);
6f9c9d71 1031 result->set_lval (not_lval);
7f22044a
TT
1032 return result;
1033}
1034
80180f79
SA
1035/* Return a lazy value with type TYPE located at ADDR (cf. value_at).
1036 The type of the created value may differ from the passed type TYPE.
1037 Make sure to retrieve the returned values's new type after this call
1038 e.g. in case the type is a variable length array. */
c906108c 1039
f23631e4 1040struct value *
8480a37e 1041value_at_lazy (struct type *type, CORE_ADDR addr, const frame_info_ptr &frame)
c906108c 1042{
168f9f95 1043 return get_value_at (type, addr, frame, 1);
c906108c
SS
1044}
1045
e6ca34fc 1046void
23f945bf 1047read_value_memory (struct value *val, LONGEST bit_offset,
42c13555 1048 bool stack, CORE_ADDR memaddr,
e6ca34fc
PA
1049 gdb_byte *buffer, size_t length)
1050{
3ae385af 1051 ULONGEST xfered_total = 0;
f9ee742c 1052 struct gdbarch *arch = val->arch ();
3ae385af 1053 int unit_size = gdbarch_addressable_memory_unit_size (arch);
6d7e9d3b
YQ
1054 enum target_object object;
1055
1056 object = stack ? TARGET_OBJECT_STACK_MEMORY : TARGET_OBJECT_MEMORY;
5a2eb0ef 1057
3ae385af 1058 while (xfered_total < length)
5a2eb0ef
YQ
1059 {
1060 enum target_xfer_status status;
3ae385af 1061 ULONGEST xfered_partial;
5a2eb0ef 1062
328d42d8 1063 status = target_xfer_partial (current_inferior ()->top_target (),
6d7e9d3b 1064 object, NULL,
3ae385af
SM
1065 buffer + xfered_total * unit_size, NULL,
1066 memaddr + xfered_total,
1067 length - xfered_total,
1068 &xfered_partial);
5a2eb0ef
YQ
1069
1070 if (status == TARGET_XFER_OK)
1071 /* nothing */;
bc113b4e 1072 else if (status == TARGET_XFER_UNAVAILABLE)
d00664db
TT
1073 val->mark_bits_unavailable ((xfered_total * HOST_CHAR_BIT
1074 + bit_offset),
1075 xfered_partial * HOST_CHAR_BIT);
5a2eb0ef 1076 else if (status == TARGET_XFER_EOF)
3ae385af 1077 memory_error (TARGET_XFER_E_IO, memaddr + xfered_total);
e6ca34fc 1078 else
3ae385af 1079 memory_error (status, memaddr + xfered_total);
e6ca34fc 1080
3ae385af 1081 xfered_total += xfered_partial;
5a2eb0ef 1082 QUIT;
e6ca34fc
PA
1083 }
1084}
c906108c
SS
1085
1086/* Store the contents of FROMVAL into the location of TOVAL.
1087 Return a new value with the location of TOVAL and contents of FROMVAL. */
1088
f23631e4
AC
1089struct value *
1090value_assign (struct value *toval, struct value *fromval)
c906108c 1091{
52f0bd74 1092 struct type *type;
f23631e4 1093 struct value *val;
cb741690 1094 struct frame_id old_frame;
c906108c 1095
4b53ca88 1096 if (!toval->deprecated_modifiable ())
8a3fe4f8 1097 error (_("Left operand of assignment is not a modifiable lvalue."));
c906108c 1098
994b9211 1099 toval = coerce_ref (toval);
c906108c 1100
d0c97917 1101 type = toval->type ();
736355f2 1102 if (toval->lval () != lval_internalvar)
3cbaedff 1103 fromval = value_cast (type, fromval);
c906108c 1104 else
63092375
DJ
1105 {
1106 /* Coerce arrays and functions to pointers, except for arrays
1107 which only live in GDB's storage. */
1108 if (!value_must_coerce_to_target (fromval))
1109 fromval = coerce_array (fromval);
1110 }
1111
f168693b 1112 type = check_typedef (type);
c906108c 1113
ac3eeb49
MS
1114 /* Since modifying a register can trash the frame chain, and
1115 modifying memory can trash the frame cache, we save the old frame
1116 and then restore the new frame afterwards. */
206415a3 1117 old_frame = get_frame_id (deprecated_safe_get_selected_frame ());
cb741690 1118
736355f2 1119 switch (toval->lval ())
c906108c
SS
1120 {
1121 case lval_internalvar:
1122 set_internalvar (VALUE_INTERNALVAR (toval), fromval);
8ee511af 1123 return value_of_internalvar (type->arch (),
4aac0db7 1124 VALUE_INTERNALVAR (toval));
c906108c
SS
1125
1126 case lval_internalvar_component:
d9e98382 1127 {
76675c4d 1128 LONGEST offset = toval->offset ();
d9e98382
SDJ
1129
1130 /* Are we dealing with a bitfield?
1131
fac7bdaa 1132 It is important to mention that `toval->parent ()' is
f49d5fa2
TT
1133 non-NULL iff `toval->bitsize ()' is non-zero. */
1134 if (toval->bitsize ())
d9e98382
SDJ
1135 {
1136 /* VALUE_INTERNALVAR below refers to the parent value, while
1137 the offset is relative to this parent value. */
fac7bdaa 1138 gdb_assert (toval->parent ()->parent () == NULL);
76675c4d 1139 offset += toval->parent ()->offset ();
d9e98382
SDJ
1140 }
1141
1142 set_internalvar_component (VALUE_INTERNALVAR (toval),
1143 offset,
5011c493 1144 toval->bitpos (),
f49d5fa2 1145 toval->bitsize (),
d9e98382
SDJ
1146 fromval);
1147 }
c906108c
SS
1148 break;
1149
1150 case lval_memory:
1151 {
fc1a4b47 1152 const gdb_byte *dest_buffer;
c5aa993b
JM
1153 CORE_ADDR changed_addr;
1154 int changed_len;
dda83cd7 1155 gdb_byte buffer[sizeof (LONGEST)];
c906108c 1156
f49d5fa2 1157 if (toval->bitsize ())
c5aa993b 1158 {
fac7bdaa 1159 struct value *parent = toval->parent ();
2d88202a 1160
9feb2d07 1161 changed_addr = parent->address () + toval->offset ();
5011c493 1162 changed_len = (toval->bitpos ()
f49d5fa2 1163 + toval->bitsize ()
c5aa993b
JM
1164 + HOST_CHAR_BIT - 1)
1165 / HOST_CHAR_BIT;
c906108c 1166
4ea48cc1
DJ
1167 /* If we can read-modify-write exactly the size of the
1168 containing type (e.g. short or int) then do so. This
1169 is safer for volatile bitfields mapped to hardware
1170 registers. */
df86565b
SM
1171 if (changed_len < type->length ()
1172 && type->length () <= (int) sizeof (LONGEST)
1173 && ((LONGEST) changed_addr % type->length ()) == 0)
1174 changed_len = type->length ();
4ea48cc1 1175
c906108c 1176 if (changed_len > (int) sizeof (LONGEST))
3e43a32a
MS
1177 error (_("Can't handle bitfields which "
1178 "don't fit in a %d bit word."),
baa6f10b 1179 (int) sizeof (LONGEST) * HOST_CHAR_BIT);
c906108c 1180
2d88202a 1181 read_memory (changed_addr, buffer, changed_len);
50810684 1182 modify_field (type, buffer, value_as_long (fromval),
5011c493 1183 toval->bitpos (), toval->bitsize ());
c906108c
SS
1184 dest_buffer = buffer;
1185 }
c906108c
SS
1186 else
1187 {
9feb2d07 1188 changed_addr = toval->address ();
3ae385af 1189 changed_len = type_length_units (type);
efaf1ae0 1190 dest_buffer = fromval->contents ().data ();
c906108c
SS
1191 }
1192
972daa01 1193 write_memory_with_notification (changed_addr, dest_buffer, changed_len);
c906108c
SS
1194 }
1195 break;
1196
492254e9 1197 case lval_register:
c906108c 1198 {
8b31004b 1199 frame_info_ptr next_frame = frame_find_by_id (toval->next_frame_id ());
78f2fd84 1200 int value_reg = toval->regnum ();
c906108c 1201
534dcbcb 1202 if (next_frame == nullptr)
8a3fe4f8 1203 error (_("Value being assigned to is no longer active."));
d80b854b 1204
534dcbcb 1205 gdbarch *gdbarch = frame_unwind_arch (next_frame);
3e871532 1206
f49d5fa2 1207 if (toval->bitsize ())
492254e9 1208 {
fac7bdaa 1209 struct value *parent = toval->parent ();
76675c4d 1210 LONGEST offset = parent->offset () + toval->offset ();
bdec2917 1211 size_t changed_len;
3e871532
LM
1212 gdb_byte buffer[sizeof (LONGEST)];
1213 int optim, unavail;
1214
5011c493 1215 changed_len = (toval->bitpos ()
f49d5fa2 1216 + toval->bitsize ()
3e871532
LM
1217 + HOST_CHAR_BIT - 1)
1218 / HOST_CHAR_BIT;
1219
bdec2917 1220 if (changed_len > sizeof (LONGEST))
3e871532
LM
1221 error (_("Can't handle bitfields which "
1222 "don't fit in a %d bit word."),
1223 (int) sizeof (LONGEST) * HOST_CHAR_BIT);
1224
9fc79b42 1225 if (!get_frame_register_bytes (next_frame, value_reg, offset,
534dcbcb
SM
1226 { buffer, changed_len }, &optim,
1227 &unavail))
3e871532
LM
1228 {
1229 if (optim)
1230 throw_error (OPTIMIZED_OUT_ERROR,
1231 _("value has been optimized out"));
1232 if (unavail)
1233 throw_error (NOT_AVAILABLE_ERROR,
1234 _("value is not available"));
1235 }
1236
1237 modify_field (type, buffer, value_as_long (fromval),
5011c493 1238 toval->bitpos (), toval->bitsize ());
3e871532 1239
534dcbcb
SM
1240 put_frame_register_bytes (next_frame, value_reg, offset,
1241 { buffer, changed_len });
492254e9 1242 }
c906108c 1243 else
492254e9 1244 {
78f2fd84 1245 if (gdbarch_convert_register_p (gdbarch, toval->regnum (), type))
00fa51f6 1246 {
3e871532
LM
1247 /* If TOVAL is a special machine register requiring
1248 conversion of program values to a special raw
1249 format. */
47ff07a6
SM
1250 gdbarch_value_to_register (gdbarch,
1251 get_prev_frame_always (next_frame),
78f2fd84 1252 toval->regnum (), type,
efaf1ae0 1253 fromval->contents ().data ());
00fa51f6 1254 }
c906108c 1255 else
534dcbcb 1256 put_frame_register_bytes (next_frame, value_reg,
76675c4d 1257 toval->offset (),
efaf1ae0 1258 fromval->contents ());
ff2e87ac 1259 }
00fa51f6 1260
534dcbcb
SM
1261 gdb::observers::register_changed.notify
1262 (get_prev_frame_always (next_frame), value_reg);
ff2e87ac 1263 break;
c906108c 1264 }
5f5233d4
PA
1265
1266 case lval_computed:
1267 {
b9f74d54 1268 const struct lval_funcs *funcs = toval->computed_funcs ();
5f5233d4 1269
ac71a68c
JK
1270 if (funcs->write != NULL)
1271 {
1272 funcs->write (toval, fromval);
1273 break;
1274 }
5f5233d4 1275 }
d182e398 1276 [[fallthrough]];
5f5233d4 1277
c906108c 1278 default:
8a3fe4f8 1279 error (_("Left operand of assignment is not an lvalue."));
c906108c
SS
1280 }
1281
cb741690
DJ
1282 /* Assigning to the stack pointer, frame pointer, and other
1283 (architecture and calling convention specific) registers may
d649a38e 1284 cause the frame cache and regcache to be out of date. Assigning to memory
cb741690
DJ
1285 also can. We just do this on all assignments to registers or
1286 memory, for simplicity's sake; I doubt the slowdown matters. */
736355f2 1287 switch (toval->lval ())
cb741690
DJ
1288 {
1289 case lval_memory:
1290 case lval_register:
0e03807e 1291 case lval_computed:
cb741690 1292
328d42d8
SM
1293 gdb::observers::target_changed.notify
1294 (current_inferior ()->top_target ());
cb741690 1295
ac3eeb49
MS
1296 /* Having destroyed the frame cache, restore the selected
1297 frame. */
cb741690
DJ
1298
1299 /* FIXME: cagney/2002-11-02: There has to be a better way of
1300 doing this. Instead of constantly saving/restoring the
1301 frame. Why not create a get_selected_frame() function that,
1302 having saved the selected frame's ID can automatically
1303 re-find the previously selected frame automatically. */
1304
1305 {
bd2b40ac 1306 frame_info_ptr fi = frame_find_by_id (old_frame);
a109c7c1 1307
cb741690
DJ
1308 if (fi != NULL)
1309 select_frame (fi);
1310 }
1311
1312 break;
1313 default:
1314 break;
1315 }
1316
ac3eeb49
MS
1317 /* If the field does not entirely fill a LONGEST, then zero the sign
1318 bits. If the field is signed, and is negative, then sign
1319 extend. */
f49d5fa2
TT
1320 if ((toval->bitsize () > 0)
1321 && (toval->bitsize () < 8 * (int) sizeof (LONGEST)))
c906108c
SS
1322 {
1323 LONGEST fieldval = value_as_long (fromval);
f49d5fa2 1324 LONGEST valmask = (((ULONGEST) 1) << toval->bitsize ()) - 1;
c906108c
SS
1325
1326 fieldval &= valmask;
c6d940a9 1327 if (!type->is_unsigned ()
ac3eeb49 1328 && (fieldval & (valmask ^ (valmask >> 1))))
c906108c
SS
1329 fieldval |= ~valmask;
1330
1331 fromval = value_from_longest (type, fieldval);
1332 }
1333
4aac0db7
UW
1334 /* The return value is a copy of TOVAL so it shares its location
1335 information, but its contents are updated from FROMVAL. This
1336 implies the returned value is not lazy, even if TOVAL was. */
cda03344 1337 val = toval->copy ();
a5b210cb 1338 val->set_lazy (false);
efaf1ae0 1339 copy (fromval->contents (), val->contents_raw ());
4aac0db7
UW
1340
1341 /* We copy over the enclosing type and pointed-to offset from FROMVAL
1342 in the case of pointer types. For object types, the enclosing type
33b5899f 1343 and embedded offset must *not* be copied: the target object referred
4aac0db7 1344 to by TOVAL retains its original dynamic type after assignment. */
78134374 1345 if (type->code () == TYPE_CODE_PTR)
4aac0db7 1346 {
463b870d 1347 val->set_enclosing_type (fromval->enclosing_type ());
391f8628 1348 val->set_pointed_to_offset (fromval->pointed_to_offset ());
4aac0db7 1349 }
c5aa993b 1350
c906108c
SS
1351 return val;
1352}
1353
1c236ddd 1354/* Extend a value ARG1 to COUNT repetitions of its type. */
c906108c 1355
f23631e4
AC
1356struct value *
1357value_repeat (struct value *arg1, int count)
c906108c 1358{
f23631e4 1359 struct value *val;
c906108c 1360
6b991efe
HD
1361 arg1 = coerce_ref (arg1);
1362
736355f2 1363 if (arg1->lval () != lval_memory)
8a3fe4f8 1364 error (_("Only values in memory can be extended with '@'."));
c906108c 1365 if (count < 1)
8a3fe4f8 1366 error (_("Invalid number %d of repetitions."), count);
c906108c 1367
463b870d 1368 val = allocate_repeat_value (arg1->enclosing_type (), count);
c906108c 1369
6f9c9d71 1370 val->set_lval (lval_memory);
9feb2d07 1371 val->set_address (arg1->address ());
c906108c 1372
9feb2d07 1373 read_value_memory (val, 0, val->stack (), val->address (),
bbe912ba 1374 val->contents_all_raw ().data (),
463b870d 1375 type_length_units (val->enclosing_type ()));
24e6bcee 1376
c906108c
SS
1377 return val;
1378}
1379
f23631e4 1380struct value *
9df2fbc4 1381value_of_variable (struct symbol *var, const struct block *b)
c906108c 1382{
bd2b40ac 1383 frame_info_ptr frame = NULL;
c906108c 1384
63e43d3a 1385 if (symbol_read_needs_frame (var))
61212c0f 1386 frame = get_selected_frame (_("No frame selected."));
c906108c 1387
63e43d3a 1388 return read_var_value (var, b, frame);
c906108c
SS
1389}
1390
61212c0f 1391struct value *
270140bd 1392address_of_variable (struct symbol *var, const struct block *b)
61212c0f 1393{
5f9c5a63 1394 struct type *type = var->type ();
61212c0f
UW
1395 struct value *val;
1396
1397 /* Evaluate it first; if the result is a memory address, we're fine.
581e13c1 1398 Lazy evaluation pays off here. */
61212c0f
UW
1399
1400 val = value_of_variable (var, b);
d0c97917 1401 type = val->type ();
61212c0f 1402
736355f2 1403 if ((val->lval () == lval_memory && val->lazy ())
78134374 1404 || type->code () == TYPE_CODE_FUNC)
61212c0f 1405 {
9feb2d07 1406 CORE_ADDR addr = val->address ();
a109c7c1 1407
61212c0f
UW
1408 return value_from_pointer (lookup_pointer_type (type), addr);
1409 }
1410
1411 /* Not a memory address; check what the problem was. */
736355f2 1412 switch (val->lval ())
61212c0f
UW
1413 {
1414 case lval_register:
1415 {
61212c0f
UW
1416 const char *regname;
1417
8b31004b
SM
1418 frame_info_ptr frame = frame_find_by_id (val->next_frame_id ());
1419 gdb_assert (frame != nullptr);
61212c0f 1420
78f2fd84
SM
1421 regname
1422 = gdbarch_register_name (get_frame_arch (frame), val->regnum ());
637b2f86 1423 gdb_assert (regname != nullptr && *regname != '\0');
61212c0f
UW
1424
1425 error (_("Address requested for identifier "
1426 "\"%s\" which is in register $%s"),
987012b8 1427 var->print_name (), regname);
61212c0f
UW
1428 break;
1429 }
1430
1431 default:
1432 error (_("Can't take address of \"%s\" which isn't an lvalue."),
987012b8 1433 var->print_name ());
61212c0f
UW
1434 break;
1435 }
1436
1437 return val;
1438}
1439
00db9531 1440/* See value.h. */
63092375 1441
00db9531 1442bool
63092375
DJ
1443value_must_coerce_to_target (struct value *val)
1444{
1445 struct type *valtype;
1446
1447 /* The only lval kinds which do not live in target memory. */
736355f2
TT
1448 if (val->lval () != not_lval
1449 && val->lval () != lval_internalvar
1450 && val->lval () != lval_xcallable)
00db9531 1451 return false;
63092375 1452
d0c97917 1453 valtype = check_typedef (val->type ());
63092375 1454
78134374 1455 switch (valtype->code ())
63092375
DJ
1456 {
1457 case TYPE_CODE_ARRAY:
bd63c870 1458 return valtype->is_vector () ? 0 : 1;
63092375 1459 case TYPE_CODE_STRING:
00db9531 1460 return true;
63092375 1461 default:
00db9531 1462 return false;
63092375
DJ
1463 }
1464}
1465
3e43a32a
MS
1466/* Make sure that VAL lives in target memory if it's supposed to. For
1467 instance, strings are constructed as character arrays in GDB's
1468 storage, and this function copies them to the target. */
63092375
DJ
1469
1470struct value *
1471value_coerce_to_target (struct value *val)
1472{
1473 LONGEST length;
1474 CORE_ADDR addr;
1475
1476 if (!value_must_coerce_to_target (val))
1477 return val;
1478
d0c97917 1479 length = check_typedef (val->type ())->length ();
63092375 1480 addr = allocate_space_in_inferior (length);
efaf1ae0 1481 write_memory (addr, val->contents ().data (), length);
d0c97917 1482 return value_at_lazy (val->type (), addr);
63092375
DJ
1483}
1484
ac3eeb49
MS
1485/* Given a value which is an array, return a value which is a pointer
1486 to its first element, regardless of whether or not the array has a
1487 nonzero lower bound.
c906108c 1488
ac3eeb49
MS
1489 FIXME: A previous comment here indicated that this routine should
1490 be substracting the array's lower bound. It's not clear to me that
1491 this is correct. Given an array subscripting operation, it would
1492 certainly work to do the adjustment here, essentially computing:
c906108c
SS
1493
1494 (&array[0] - (lowerbound * sizeof array[0])) + (index * sizeof array[0])
1495
ac3eeb49
MS
1496 However I believe a more appropriate and logical place to account
1497 for the lower bound is to do so in value_subscript, essentially
1498 computing:
c906108c
SS
1499
1500 (&array[0] + ((index - lowerbound) * sizeof array[0]))
1501
ac3eeb49
MS
1502 As further evidence consider what would happen with operations
1503 other than array subscripting, where the caller would get back a
1504 value that had an address somewhere before the actual first element
1505 of the array, and the information about the lower bound would be
581e13c1 1506 lost because of the coercion to pointer type. */
c906108c 1507
f23631e4
AC
1508struct value *
1509value_coerce_array (struct value *arg1)
c906108c 1510{
d0c97917 1511 struct type *type = check_typedef (arg1->type ());
c906108c 1512
63092375
DJ
1513 /* If the user tries to do something requiring a pointer with an
1514 array that has not yet been pushed to the target, then this would
1515 be a good time to do so. */
1516 arg1 = value_coerce_to_target (arg1);
1517
736355f2 1518 if (arg1->lval () != lval_memory)
8a3fe4f8 1519 error (_("Attempt to take address of value not located in memory."));
c906108c 1520
27710edb 1521 return value_from_pointer (lookup_pointer_type (type->target_type ()),
9feb2d07 1522 arg1->address ());
c906108c
SS
1523}
1524
1525/* Given a value which is a function, return a value which is a pointer
1526 to it. */
1527
f23631e4
AC
1528struct value *
1529value_coerce_function (struct value *arg1)
c906108c 1530{
f23631e4 1531 struct value *retval;
c906108c 1532
736355f2 1533 if (arg1->lval () != lval_memory)
8a3fe4f8 1534 error (_("Attempt to take address of value not located in memory."));
c906108c 1535
d0c97917 1536 retval = value_from_pointer (lookup_pointer_type (arg1->type ()),
9feb2d07 1537 arg1->address ());
c906108c 1538 return retval;
c5aa993b 1539}
c906108c 1540
ac3eeb49
MS
1541/* Return a pointer value for the object for which ARG1 is the
1542 contents. */
c906108c 1543
f23631e4
AC
1544struct value *
1545value_addr (struct value *arg1)
c906108c 1546{
f23631e4 1547 struct value *arg2;
d0c97917 1548 struct type *type = check_typedef (arg1->type ());
a109c7c1 1549
aa006118 1550 if (TYPE_IS_REFERENCE (type))
c906108c 1551 {
e989e637
TT
1552 if (arg1->bits_synthetic_pointer (arg1->embedded_offset (),
1553 TARGET_CHAR_BIT * type->length ()))
3326303b
MG
1554 arg1 = coerce_ref (arg1);
1555 else
1556 {
1557 /* Copy the value, but change the type from (T&) to (T*). We
1558 keep the same location information, which is efficient, and
1559 allows &(&X) to get the location containing the reference.
1560 Do the same to its enclosing type for consistency. */
1561 struct type *type_ptr
27710edb 1562 = lookup_pointer_type (type->target_type ());
3326303b 1563 struct type *enclosing_type
463b870d 1564 = check_typedef (arg1->enclosing_type ());
3326303b 1565 struct type *enclosing_type_ptr
27710edb 1566 = lookup_pointer_type (enclosing_type->target_type ());
3326303b 1567
cda03344 1568 arg2 = arg1->copy ();
81ae560c 1569 arg2->deprecated_set_type (type_ptr);
463b870d 1570 arg2->set_enclosing_type (enclosing_type_ptr);
a22df60a 1571
3326303b
MG
1572 return arg2;
1573 }
c906108c 1574 }
78134374 1575 if (type->code () == TYPE_CODE_FUNC)
c906108c
SS
1576 return value_coerce_function (arg1);
1577
63092375
DJ
1578 /* If this is an array that has not yet been pushed to the target,
1579 then this would be a good time to force it to memory. */
1580 arg1 = value_coerce_to_target (arg1);
1581
736355f2 1582 if (arg1->lval () != lval_memory)
8a3fe4f8 1583 error (_("Attempt to take address of value not located in memory."));
c906108c 1584
581e13c1 1585 /* Get target memory address. */
d0c97917 1586 arg2 = value_from_pointer (lookup_pointer_type (arg1->type ()),
9feb2d07 1587 (arg1->address ()
391f8628 1588 + arg1->embedded_offset ()));
c906108c
SS
1589
1590 /* This may be a pointer to a base subobject; so remember the
ac3eeb49 1591 full derived object's type ... */
463b870d 1592 arg2->set_enclosing_type (lookup_pointer_type (arg1->enclosing_type ()));
ac3eeb49
MS
1593 /* ... and also the relative position of the subobject in the full
1594 object. */
391f8628 1595 arg2->set_pointed_to_offset (arg1->embedded_offset ());
c906108c
SS
1596 return arg2;
1597}
1598
ac3eeb49
MS
1599/* Return a reference value for the object for which ARG1 is the
1600 contents. */
fb933624
DJ
1601
1602struct value *
a65cfae5 1603value_ref (struct value *arg1, enum type_code refcode)
fb933624
DJ
1604{
1605 struct value *arg2;
d0c97917 1606 struct type *type = check_typedef (arg1->type ());
a109c7c1 1607
a65cfae5
AV
1608 gdb_assert (refcode == TYPE_CODE_REF || refcode == TYPE_CODE_RVALUE_REF);
1609
78134374
SM
1610 if ((type->code () == TYPE_CODE_REF
1611 || type->code () == TYPE_CODE_RVALUE_REF)
1612 && type->code () == refcode)
fb933624
DJ
1613 return arg1;
1614
1615 arg2 = value_addr (arg1);
81ae560c 1616 arg2->deprecated_set_type (lookup_reference_type (type, refcode));
fb933624
DJ
1617 return arg2;
1618}
1619
ac3eeb49
MS
1620/* Given a value of a pointer type, apply the C unary * operator to
1621 it. */
c906108c 1622
f23631e4
AC
1623struct value *
1624value_ind (struct value *arg1)
c906108c
SS
1625{
1626 struct type *base_type;
f23631e4 1627 struct value *arg2;
c906108c 1628
994b9211 1629 arg1 = coerce_array (arg1);
c906108c 1630
d0c97917 1631 base_type = check_typedef (arg1->type ());
c906108c 1632
736355f2 1633 if (arg1->lval () == lval_computed)
8cf6f0b1 1634 {
b9f74d54 1635 const struct lval_funcs *funcs = arg1->computed_funcs ();
8cf6f0b1
TT
1636
1637 if (funcs->indirect)
1638 {
1639 struct value *result = funcs->indirect (arg1);
1640
1641 if (result)
1642 return result;
1643 }
1644 }
1645
78134374 1646 if (base_type->code () == TYPE_CODE_PTR)
c906108c
SS
1647 {
1648 struct type *enc_type;
a109c7c1 1649
ac3eeb49 1650 /* We may be pointing to something embedded in a larger object.
dda83cd7 1651 Get the real type of the enclosing object. */
463b870d 1652 enc_type = check_typedef (arg1->enclosing_type ());
27710edb 1653 enc_type = enc_type->target_type ();
0d5de010 1654
e79eb02f 1655 CORE_ADDR base_addr;
78134374
SM
1656 if (check_typedef (enc_type)->code () == TYPE_CODE_FUNC
1657 || check_typedef (enc_type)->code () == TYPE_CODE_METHOD)
e79eb02f
AB
1658 {
1659 /* For functions, go through find_function_addr, which knows
1660 how to handle function descriptors. */
1661 base_addr = find_function_addr (arg1, NULL);
1662 }
0d5de010 1663 else
e79eb02f
AB
1664 {
1665 /* Retrieve the enclosing object pointed to. */
1666 base_addr = (value_as_address (arg1)
391f8628 1667 - arg1->pointed_to_offset ());
e79eb02f
AB
1668 }
1669 arg2 = value_at_lazy (enc_type, base_addr);
d0c97917 1670 enc_type = arg2->type ();
e79eb02f
AB
1671 return readjust_indirect_value_type (arg2, enc_type, base_type,
1672 arg1, base_addr);
c906108c
SS
1673 }
1674
8a3fe4f8 1675 error (_("Attempt to take contents of a non-pointer value."));
c906108c
SS
1676}
1677\f
39d37385
PA
1678/* Create a value for an array by allocating space in GDB, copying the
1679 data into that space, and then setting up an array value.
c906108c 1680
b47331bf
TT
1681 The array bounds are set from LOWBOUND and the size of ELEMVEC, and
1682 the array is populated from the values passed in ELEMVEC.
c906108c
SS
1683
1684 The element type of the array is inherited from the type of the
1685 first element, and all elements must have the same size (though we
ac3eeb49 1686 don't currently enforce any restriction on their types). */
c906108c 1687
f23631e4 1688struct value *
b47331bf 1689value_array (int lowbound, gdb::array_view<struct value *> elemvec)
c906108c 1690{
c906108c 1691 int idx;
6b850546 1692 ULONGEST typelength;
f23631e4 1693 struct value *val;
c906108c 1694 struct type *arraytype;
c906108c 1695
ac3eeb49
MS
1696 /* Validate that the bounds are reasonable and that each of the
1697 elements have the same size. */
c906108c 1698
463b870d 1699 typelength = type_length_units (elemvec[0]->enclosing_type ());
b47331bf 1700 for (struct value *other : elemvec.slice (1))
c906108c 1701 {
b47331bf 1702 if (type_length_units (other->enclosing_type ()) != typelength)
c906108c 1703 {
8a3fe4f8 1704 error (_("array elements must all be the same size"));
c906108c
SS
1705 }
1706 }
1707
463b870d 1708 arraytype = lookup_array_range_type (elemvec[0]->enclosing_type (),
b47331bf
TT
1709 lowbound,
1710 lowbound + elemvec.size () - 1);
c906108c 1711
67bd3fd5 1712 if (!current_language->c_style_arrays_p ())
c906108c 1713 {
317c3ed9 1714 val = value::allocate (arraytype);
b47331bf 1715 for (idx = 0; idx < elemvec.size (); idx++)
6c49729e 1716 elemvec[idx]->contents_copy (val, idx * typelength, 0, typelength);
c906108c
SS
1717 return val;
1718 }
1719
63092375
DJ
1720 /* Allocate space to store the array, and then initialize it by
1721 copying in each element. */
c906108c 1722
317c3ed9 1723 val = value::allocate (arraytype);
b47331bf 1724 for (idx = 0; idx < elemvec.size (); idx++)
6c49729e 1725 elemvec[idx]->contents_copy (val, idx * typelength, 0, typelength);
63092375 1726 return val;
c906108c
SS
1727}
1728
baab3753
AB
1729/* See value.h. */
1730
6c7a06a3 1731struct value *
baab3753 1732value_cstring (const gdb_byte *ptr, ssize_t count, struct type *char_type)
6c7a06a3
TT
1733{
1734 struct value *val;
22c12a6c 1735 int lowbound = current_language->string_lower_bound ();
baab3753 1736 ssize_t highbound = count + 1;
6c7a06a3 1737 struct type *stringtype
e3506a9f 1738 = lookup_array_range_type (char_type, lowbound, highbound + lowbound - 1);
6c7a06a3 1739
317c3ed9 1740 val = value::allocate (stringtype);
baab3753 1741 ssize_t len = count * char_type->length ();
bbe912ba 1742 memcpy (val->contents_raw ().data (), ptr, len);
baab3753
AB
1743 /* Write the terminating null-character. */
1744 memset (val->contents_raw ().data () + len, 0, char_type->length ());
6c7a06a3
TT
1745 return val;
1746}
1747
baab3753 1748/* See value.h. */
c906108c 1749
f23631e4 1750struct value *
baab3753 1751value_string (const gdb_byte *ptr, ssize_t count, struct type *char_type)
c906108c 1752{
f23631e4 1753 struct value *val;
22c12a6c 1754 int lowbound = current_language->string_lower_bound ();
baab3753 1755 ssize_t highbound = count;
c906108c 1756 struct type *stringtype
e3506a9f 1757 = lookup_string_range_type (char_type, lowbound, highbound + lowbound - 1);
c906108c 1758
317c3ed9 1759 val = value::allocate (stringtype);
baab3753 1760 ssize_t len = count * char_type->length ();
bbe912ba 1761 memcpy (val->contents_raw ().data (), ptr, len);
3b7538c0 1762 return val;
c906108c
SS
1763}
1764
c906108c 1765\f
13221aec
AB
1766/* See if we can pass arguments in T2 to a function which takes arguments
1767 of types T1. T1 is a list of NARGS arguments, and T2 is an array_view
1768 of the values we're trying to pass. If some arguments need coercion of
1769 some sort, then the coerced values are written into T2. Return value is
ac3eeb49
MS
1770 0 if the arguments could be matched, or the position at which they
1771 differ if not.
c906108c 1772
ac3eeb49 1773 STATICP is nonzero if the T1 argument list came from a static
13221aec 1774 member function. T2 must still include the ``this'' pointer, but
ac3eeb49 1775 it will be skipped.
c906108c
SS
1776
1777 For non-static member functions, we ignore the first argument,
ac3eeb49
MS
1778 which is the type of the instance variable. This is because we
1779 want to handle calls with objects from derived classes. This is
1780 not entirely correct: we should actually check to make sure that a
c906108c
SS
1781 requested operation is type secure, shouldn't we? FIXME. */
1782
1783static int
13221aec
AB
1784typecmp (bool staticp, bool varargs, int nargs,
1785 struct field t1[], gdb::array_view<value *> t2)
c906108c
SS
1786{
1787 int i;
1788
ac3eeb49
MS
1789 /* Skip ``this'' argument if applicable. T2 will always include
1790 THIS. */
4a1970e4 1791 if (staticp)
13221aec 1792 t2 = t2.slice (1);
ad2f7632
DJ
1793
1794 for (i = 0;
5d14b6e5 1795 (i < nargs) && t1[i].type ()->code () != TYPE_CODE_VOID;
ad2f7632 1796 i++)
c906108c 1797 {
c5aa993b 1798 struct type *tt1, *tt2;
ad2f7632 1799
13221aec 1800 if (i == t2.size ())
c5aa993b 1801 return i + 1;
ad2f7632 1802
5d14b6e5 1803 tt1 = check_typedef (t1[i].type ());
d0c97917 1804 tt2 = check_typedef (t2[i]->type ());
ad2f7632 1805
aa006118 1806 if (TYPE_IS_REFERENCE (tt1)
8301c89e 1807 /* We should be doing hairy argument matching, as below. */
27710edb 1808 && (check_typedef (tt1->target_type ())->code ()
78134374 1809 == tt2->code ()))
c906108c 1810 {
78134374 1811 if (tt2->code () == TYPE_CODE_ARRAY)
c906108c
SS
1812 t2[i] = value_coerce_array (t2[i]);
1813 else
78134374 1814 t2[i] = value_ref (t2[i], tt1->code ());
c906108c
SS
1815 continue;
1816 }
1817
802db21b
DB
1818 /* djb - 20000715 - Until the new type structure is in the
1819 place, and we can attempt things like implicit conversions,
1820 we need to do this so you can take something like a map<const
1821 char *>, and properly access map["hello"], because the
1822 argument to [] will be a reference to a pointer to a char,
ac3eeb49 1823 and the argument will be a pointer to a char. */
78134374 1824 while (TYPE_IS_REFERENCE (tt1) || tt1->code () == TYPE_CODE_PTR)
802db21b 1825 {
27710edb 1826 tt1 = check_typedef ( tt1->target_type () );
802db21b 1827 }
78134374
SM
1828 while (tt2->code () == TYPE_CODE_ARRAY
1829 || tt2->code () == TYPE_CODE_PTR
aa006118 1830 || TYPE_IS_REFERENCE (tt2))
c906108c 1831 {
27710edb 1832 tt2 = check_typedef (tt2->target_type ());
c906108c 1833 }
78134374 1834 if (tt1->code () == tt2->code ())
c5aa993b 1835 continue;
ac3eeb49
MS
1836 /* Array to pointer is a `trivial conversion' according to the
1837 ARM. */
c906108c 1838
ac3eeb49 1839 /* We should be doing much hairier argument matching (see
dda83cd7
SM
1840 section 13.2 of the ARM), but as a quick kludge, just check
1841 for the same type code. */
d0c97917 1842 if (t1[i].type ()->code () != t2[i]->type ()->code ())
c5aa993b 1843 return i + 1;
c906108c 1844 }
13221aec 1845 if (varargs || i == t2.size ())
c5aa993b 1846 return 0;
ad2f7632 1847 return i + 1;
c906108c
SS
1848}
1849
87a37e5e
PA
1850/* Helper class for search_struct_field that keeps track of found
1851 results and possibly throws an exception if the search yields
1852 ambiguous results. See search_struct_field for description of
1853 LOOKING_FOR_BASECLASS. */
c906108c 1854
87a37e5e
PA
1855struct struct_field_searcher
1856{
1857 /* A found field. */
1858 struct found_field
1859 {
1860 /* Path to the structure where the field was found. */
1861 std::vector<struct type *> path;
1862
1863 /* The field found. */
1864 struct value *field_value;
1865 };
1866
1867 /* See corresponding fields for description of parameters. */
1868 struct_field_searcher (const char *name,
1869 struct type *outermost_type,
1870 bool looking_for_baseclass)
1871 : m_name (name),
1872 m_looking_for_baseclass (looking_for_baseclass),
1873 m_outermost_type (outermost_type)
1874 {
1875 }
1876
1877 /* The search entry point. If LOOKING_FOR_BASECLASS is true and the
1878 base class search yields ambiguous results, this throws an
1879 exception. If LOOKING_FOR_BASECLASS is false, the found fields
1880 are accumulated and the caller (search_struct_field) takes care
1881 of throwing an error if the field search yields ambiguous
1882 results. The latter is done that way so that the error message
1883 can include a list of all the found candidates. */
1884 void search (struct value *arg, LONGEST offset, struct type *type);
1885
1886 const std::vector<found_field> &fields ()
1887 {
1888 return m_fields;
1889 }
1890
1891 struct value *baseclass ()
1892 {
1893 return m_baseclass;
1894 }
1895
1896private:
1897 /* Update results to include V, a found field/baseclass. */
1898 void update_result (struct value *v, LONGEST boffset);
1899
1900 /* The name of the field/baseclass we're searching for. */
1901 const char *m_name;
1902
1903 /* Whether we're looking for a baseclass, or a field. */
1904 const bool m_looking_for_baseclass;
1905
1906 /* The offset of the baseclass containing the field/baseclass we
1907 last recorded. */
1908 LONGEST m_last_boffset = 0;
1909
1910 /* If looking for a baseclass, then the result is stored here. */
1911 struct value *m_baseclass = nullptr;
1912
1913 /* When looking for fields, the found candidates are stored
1914 here. */
1915 std::vector<found_field> m_fields;
1916
1917 /* The type of the initial type passed to search_struct_field; this
1918 is used for error reporting when the lookup is ambiguous. */
1919 struct type *m_outermost_type;
1920
1921 /* The full path to the struct being inspected. E.g. for field 'x'
1922 defined in class B inherited by class A, we have A and B pushed
1923 on the path. */
1924 std::vector <struct type *> m_struct_path;
1925};
1926
1927void
1928struct_field_searcher::update_result (struct value *v, LONGEST boffset)
b1af9e97
TT
1929{
1930 if (v != NULL)
1931 {
87a37e5e
PA
1932 if (m_looking_for_baseclass)
1933 {
1934 if (m_baseclass != nullptr
1935 /* The result is not ambiguous if all the classes that are
1936 found occupy the same space. */
1937 && m_last_boffset != boffset)
1938 error (_("base class '%s' is ambiguous in type '%s'"),
1939 m_name, TYPE_SAFE_NAME (m_outermost_type));
1940
1941 m_baseclass = v;
1942 m_last_boffset = boffset;
1943 }
1944 else
1945 {
1946 /* The field is not ambiguous if it occupies the same
1947 space. */
1948 if (m_fields.empty () || m_last_boffset != boffset)
1949 m_fields.push_back ({m_struct_path, v});
a41ad347
BL
1950 else
1951 {
1952 /*Fields can occupy the same space and have the same name (be
1953 ambiguous). This can happen when fields in two different base
1954 classes are marked [[no_unique_address]] and have the same name.
1955 The C++ standard says that such fields can only occupy the same
1956 space if they are of different type, but we don't rely on that in
1957 the following code. */
1958 bool ambiguous = false, insert = true;
1959 for (const found_field &field: m_fields)
1960 {
1961 if(field.path.back () != m_struct_path.back ())
1962 {
1963 /* Same boffset points to members of different classes.
1964 We have found an ambiguity and should record it. */
1965 ambiguous = true;
1966 }
1967 else
1968 {
1969 /* We don't need to insert this value again, because a
1970 non-ambiguous path already leads to it. */
1971 insert = false;
1972 break;
1973 }
1974 }
1975 if (ambiguous && insert)
1976 m_fields.push_back ({m_struct_path, v});
1977 }
87a37e5e 1978 }
b1af9e97
TT
1979 }
1980}
c906108c 1981
b1af9e97 1982/* A helper for search_struct_field. This does all the work; most
87a37e5e 1983 arguments are as passed to search_struct_field. */
b1af9e97 1984
87a37e5e
PA
1985void
1986struct_field_searcher::search (struct value *arg1, LONGEST offset,
1987 struct type *type)
c906108c
SS
1988{
1989 int i;
edf3d5f3 1990 int nbases;
c906108c 1991
87a37e5e
PA
1992 m_struct_path.push_back (type);
1993 SCOPE_EXIT { m_struct_path.pop_back (); };
1994
f168693b 1995 type = check_typedef (type);
edf3d5f3 1996 nbases = TYPE_N_BASECLASSES (type);
c906108c 1997
87a37e5e 1998 if (!m_looking_for_baseclass)
1f704f76 1999 for (i = type->num_fields () - 1; i >= nbases; i--)
c906108c 2000 {
33d16dd9 2001 const char *t_field_name = type->field (i).name ();
c906108c 2002
87a37e5e 2003 if (t_field_name && (strcmp_iw (t_field_name, m_name) == 0))
c906108c 2004 {
f23631e4 2005 struct value *v;
a109c7c1 2006
c819a338 2007 if (type->field (i).is_static ())
686d4def 2008 v = value_static_field (type, i);
c906108c 2009 else
6c49729e 2010 v = arg1->primitive_field (offset, i, type);
87a37e5e
PA
2011
2012 update_result (v, offset);
b1af9e97 2013 return;
c906108c
SS
2014 }
2015
2016 if (t_field_name
47c6ee49 2017 && t_field_name[0] == '\0')
c906108c 2018 {
940da03e 2019 struct type *field_type = type->field (i).type ();
a109c7c1 2020
78134374
SM
2021 if (field_type->code () == TYPE_CODE_UNION
2022 || field_type->code () == TYPE_CODE_STRUCT)
c906108c 2023 {
ac3eeb49
MS
2024 /* Look for a match through the fields of an anonymous
2025 union, or anonymous struct. C++ provides anonymous
2026 unions.
c906108c 2027
1b831c93
AC
2028 In the GNU Chill (now deleted from GDB)
2029 implementation of variant record types, each
2030 <alternative field> has an (anonymous) union type,
2031 each member of the union represents a <variant
2032 alternative>. Each <variant alternative> is
2033 represented as a struct, with a member for each
2034 <variant field>. */
c5aa993b 2035
6b850546 2036 LONGEST new_offset = offset;
c906108c 2037
db034ac5
AC
2038 /* This is pretty gross. In G++, the offset in an
2039 anonymous union is relative to the beginning of the
1b831c93
AC
2040 enclosing struct. In the GNU Chill (now deleted
2041 from GDB) implementation of variant records, the
2042 bitpos is zero in an anonymous union field, so we
ac3eeb49 2043 have to add the offset of the union here. */
78134374 2044 if (field_type->code () == TYPE_CODE_STRUCT
1f704f76 2045 || (field_type->num_fields () > 0
b610c045
SM
2046 && field_type->field (0).loc_bitpos () == 0))
2047 new_offset += type->field (i).loc_bitpos () / 8;
c906108c 2048
87a37e5e 2049 search (arg1, new_offset, field_type);
c906108c
SS
2050 }
2051 }
2052 }
2053
c5aa993b 2054 for (i = 0; i < nbases; i++)
c906108c 2055 {
b1af9e97 2056 struct value *v = NULL;
c906108c 2057 struct type *basetype = check_typedef (TYPE_BASECLASS (type, i));
ac3eeb49 2058 /* If we are looking for baseclasses, this is what we get when
dda83cd7
SM
2059 we hit them. But it could happen that the base part's member
2060 name is not yet filled in. */
87a37e5e 2061 int found_baseclass = (m_looking_for_baseclass
c906108c 2062 && TYPE_BASECLASS_NAME (type, i) != NULL
2820f08f 2063 && (strcmp_iw (m_name, basetype->name ()) == 0));
391f8628 2064 LONGEST boffset = arg1->embedded_offset () + offset;
c906108c
SS
2065
2066 if (BASETYPE_VIA_VIRTUAL (type, i))
2067 {
3e3d7139 2068 struct value *v2;
c906108c
SS
2069
2070 boffset = baseclass_offset (type, i,
efaf1ae0 2071 arg1->contents_for_printing ().data (),
391f8628 2072 arg1->embedded_offset () + offset,
9feb2d07 2073 arg1->address (),
8af8e3bc 2074 arg1);
c906108c 2075
ac3eeb49 2076 /* The virtual base class pointer might have been clobbered
581e13c1 2077 by the user program. Make sure that it still points to a
ac3eeb49 2078 valid memory location. */
c906108c 2079
391f8628 2080 boffset += arg1->embedded_offset () + offset;
1a334831 2081 if (boffset < 0
463b870d 2082 || boffset >= arg1->enclosing_type ()->length ())
c906108c
SS
2083 {
2084 CORE_ADDR base_addr;
c5aa993b 2085
9feb2d07 2086 base_addr = arg1->address () + boffset;
08039c9e 2087 v2 = value_at_lazy (basetype, base_addr);
ac3eeb49 2088 if (target_read_memory (base_addr,
bbe912ba 2089 v2->contents_raw ().data (),
d0c97917 2090 v2->type ()->length ()) != 0)
8a3fe4f8 2091 error (_("virtual baseclass botch"));
c906108c
SS
2092 }
2093 else
2094 {
cda03344 2095 v2 = arg1->copy ();
81ae560c 2096 v2->deprecated_set_type (basetype);
391f8628 2097 v2->set_embedded_offset (boffset);
c906108c
SS
2098 }
2099
2100 if (found_baseclass)
b1af9e97
TT
2101 v = v2;
2102 else
87a37e5e 2103 search (v2, 0, TYPE_BASECLASS (type, i));
c906108c
SS
2104 }
2105 else if (found_baseclass)
6c49729e 2106 v = arg1->primitive_field (offset, i, type);
c906108c 2107 else
b1af9e97 2108 {
87a37e5e
PA
2109 search (arg1, offset + TYPE_BASECLASS_BITPOS (type, i) / 8,
2110 basetype);
b1af9e97
TT
2111 }
2112
87a37e5e 2113 update_result (v, boffset);
c906108c 2114 }
b1af9e97
TT
2115}
2116
2117/* Helper function used by value_struct_elt to recurse through
8a13d42d
SM
2118 baseclasses. Look for a field NAME in ARG1. Search in it assuming
2119 it has (class) type TYPE. If found, return value, else return NULL.
b1af9e97
TT
2120
2121 If LOOKING_FOR_BASECLASS, then instead of looking for struct
2122 fields, look for a baseclass named NAME. */
2123
2124static struct value *
8a13d42d 2125search_struct_field (const char *name, struct value *arg1,
b1af9e97
TT
2126 struct type *type, int looking_for_baseclass)
2127{
87a37e5e 2128 struct_field_searcher searcher (name, type, looking_for_baseclass);
b1af9e97 2129
87a37e5e
PA
2130 searcher.search (arg1, 0, type);
2131
2132 if (!looking_for_baseclass)
2133 {
2134 const auto &fields = searcher.fields ();
2135
2136 if (fields.empty ())
2137 return nullptr;
2138 else if (fields.size () == 1)
2139 return fields[0].field_value;
2140 else
2141 {
2142 std::string candidates;
2143
2144 for (auto &&candidate : fields)
2145 {
2146 gdb_assert (!candidate.path.empty ());
2147
d0c97917 2148 struct type *field_type = candidate.field_value->type ();
87a37e5e
PA
2149 struct type *struct_type = candidate.path.back ();
2150
2151 std::string path;
2152 bool first = true;
2153 for (struct type *t : candidate.path)
2154 {
2155 if (first)
2156 first = false;
2157 else
2158 path += " -> ";
2159 path += t->name ();
2160 }
2161
2162 candidates += string_printf ("\n '%s %s::%s' (%s)",
2163 TYPE_SAFE_NAME (field_type),
2164 TYPE_SAFE_NAME (struct_type),
2165 name,
2166 path.c_str ());
2167 }
2168
2169 error (_("Request for member '%s' is ambiguous in type '%s'."
2170 " Candidates are:%s"),
2171 name, TYPE_SAFE_NAME (type),
2172 candidates.c_str ());
2173 }
2174 }
2175 else
2176 return searcher.baseclass ();
c906108c
SS
2177}
2178
ac3eeb49 2179/* Helper function used by value_struct_elt to recurse through
581e13c1 2180 baseclasses. Look for a field NAME in ARG1. Adjust the address of
ac3eeb49
MS
2181 ARG1 by OFFSET bytes, and search in it assuming it has (class) type
2182 TYPE.
2183
158cc4fe
AB
2184 ARGS is an optional array of argument values used to help finding NAME.
2185 The contents of ARGS can be adjusted if type coercion is required in
2186 order to find a matching NAME.
79bd4d34 2187
ac3eeb49
MS
2188 If found, return value, else if name matched and args not return
2189 (value) -1, else return NULL. */
c906108c 2190
f23631e4 2191static struct value *
714f19d5 2192search_struct_method (const char *name, struct value **arg1p,
6b09f134 2193 std::optional<gdb::array_view<value *>> args,
158cc4fe
AB
2194 LONGEST offset, int *static_memfuncp,
2195 struct type *type)
c906108c
SS
2196{
2197 int i;
f23631e4 2198 struct value *v;
c906108c 2199 int name_matched = 0;
c906108c 2200
f168693b 2201 type = check_typedef (type);
c906108c
SS
2202 for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; i--)
2203 {
0d5cff50 2204 const char *t_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
a109c7c1 2205
db577aea 2206 if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
c906108c
SS
2207 {
2208 int j = TYPE_FN_FIELDLIST_LENGTH (type, i) - 1;
2209 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
c906108c 2210
a109c7c1 2211 name_matched = 1;
de17c821 2212 check_stub_method_group (type, i);
158cc4fe 2213 if (j > 0 && !args.has_value ())
3e43a32a
MS
2214 error (_("cannot resolve overloaded method "
2215 "`%s': no arguments supplied"), name);
158cc4fe 2216 else if (j == 0 && !args.has_value ())
c906108c 2217 {
acf5ed49
DJ
2218 v = value_fn_field (arg1p, f, j, type, offset);
2219 if (v != NULL)
2220 return v;
c906108c 2221 }
acf5ed49
DJ
2222 else
2223 while (j >= 0)
2224 {
158cc4fe 2225 gdb_assert (args.has_value ());
acf5ed49 2226 if (!typecmp (TYPE_FN_FIELD_STATIC_P (f, j),
a409645d 2227 TYPE_FN_FIELD_TYPE (f, j)->has_varargs (),
1f704f76 2228 TYPE_FN_FIELD_TYPE (f, j)->num_fields (),
13221aec 2229 TYPE_FN_FIELD_ARGS (f, j), *args))
acf5ed49
DJ
2230 {
2231 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
ac3eeb49
MS
2232 return value_virtual_fn_field (arg1p, f, j,
2233 type, offset);
2234 if (TYPE_FN_FIELD_STATIC_P (f, j)
2235 && static_memfuncp)
acf5ed49
DJ
2236 *static_memfuncp = 1;
2237 v = value_fn_field (arg1p, f, j, type, offset);
2238 if (v != NULL)
2239 return v;
2240 }
2241 j--;
2242 }
c906108c
SS
2243 }
2244 }
2245
2246 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
2247 {
6b850546
DT
2248 LONGEST base_offset;
2249 LONGEST this_offset;
c906108c
SS
2250
2251 if (BASETYPE_VIA_VIRTUAL (type, i))
2252 {
086280be 2253 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
8af8e3bc 2254 struct value *base_val;
086280be
UW
2255 const gdb_byte *base_valaddr;
2256
2257 /* The virtual base class pointer might have been
581e13c1 2258 clobbered by the user program. Make sure that it
8301c89e 2259 still points to a valid memory location. */
086280be 2260
df86565b 2261 if (offset < 0 || offset >= type->length ())
c5aa993b 2262 {
6c18f3e0
SP
2263 CORE_ADDR address;
2264
df86565b 2265 gdb::byte_vector tmp (baseclass->length ());
9feb2d07 2266 address = (*arg1p)->address ();
a109c7c1 2267
8af8e3bc 2268 if (target_read_memory (address + offset,
df86565b 2269 tmp.data (), baseclass->length ()) != 0)
086280be 2270 error (_("virtual baseclass botch"));
8af8e3bc
PA
2271
2272 base_val = value_from_contents_and_address (baseclass,
26fcd5d7 2273 tmp.data (),
8af8e3bc 2274 address + offset);
efaf1ae0 2275 base_valaddr = base_val->contents_for_printing ().data ();
8af8e3bc 2276 this_offset = 0;
c5aa993b
JM
2277 }
2278 else
8af8e3bc
PA
2279 {
2280 base_val = *arg1p;
efaf1ae0 2281 base_valaddr = (*arg1p)->contents_for_printing ().data ();
8af8e3bc
PA
2282 this_offset = offset;
2283 }
c5aa993b 2284
086280be 2285 base_offset = baseclass_offset (type, i, base_valaddr,
9feb2d07 2286 this_offset, base_val->address (),
8af8e3bc 2287 base_val);
c5aa993b 2288 }
c906108c
SS
2289 else
2290 {
2291 base_offset = TYPE_BASECLASS_BITPOS (type, i) / 8;
c5aa993b 2292 }
c906108c
SS
2293 v = search_struct_method (name, arg1p, args, base_offset + offset,
2294 static_memfuncp, TYPE_BASECLASS (type, i));
f23631e4 2295 if (v == (struct value *) - 1)
c906108c
SS
2296 {
2297 name_matched = 1;
2298 }
2299 else if (v)
2300 {
ac3eeb49
MS
2301 /* FIXME-bothner: Why is this commented out? Why is it here? */
2302 /* *arg1p = arg1_tmp; */
c906108c 2303 return v;
c5aa993b 2304 }
c906108c 2305 }
c5aa993b 2306 if (name_matched)
f23631e4 2307 return (struct value *) - 1;
c5aa993b
JM
2308 else
2309 return NULL;
c906108c
SS
2310}
2311
2312/* Given *ARGP, a value of type (pointer to a)* structure/union,
ac3eeb49
MS
2313 extract the component named NAME from the ultimate target
2314 structure/union and return it as a value with its appropriate type.
c906108c
SS
2315 ERR is used in the error message if *ARGP's type is wrong.
2316
2317 C++: ARGS is a list of argument types to aid in the selection of
13221aec 2318 an appropriate method. Also, handle derived types.
c906108c
SS
2319
2320 STATIC_MEMFUNCP, if non-NULL, points to a caller-supplied location
2321 where the truthvalue of whether the function that was resolved was
2322 a static member function or not is stored.
2323
ac3eeb49
MS
2324 ERR is an error message to be printed in case the field is not
2325 found. */
c906108c 2326
f23631e4 2327struct value *
158cc4fe 2328value_struct_elt (struct value **argp,
6b09f134 2329 std::optional<gdb::array_view<value *>> args,
714f19d5 2330 const char *name, int *static_memfuncp, const char *err)
c906108c 2331{
52f0bd74 2332 struct type *t;
f23631e4 2333 struct value *v;
c906108c 2334
994b9211 2335 *argp = coerce_array (*argp);
c906108c 2336
d0c97917 2337 t = check_typedef ((*argp)->type ());
c906108c
SS
2338
2339 /* Follow pointers until we get to a non-pointer. */
2340
809f3be1 2341 while (t->is_pointer_or_reference ())
c906108c
SS
2342 {
2343 *argp = value_ind (*argp);
2344 /* Don't coerce fn pointer to fn and then back again! */
d0c97917 2345 if (check_typedef ((*argp)->type ())->code () != TYPE_CODE_FUNC)
994b9211 2346 *argp = coerce_array (*argp);
d0c97917 2347 t = check_typedef ((*argp)->type ());
c906108c
SS
2348 }
2349
78134374
SM
2350 if (t->code () != TYPE_CODE_STRUCT
2351 && t->code () != TYPE_CODE_UNION)
3e43a32a
MS
2352 error (_("Attempt to extract a component of a value that is not a %s."),
2353 err);
c906108c
SS
2354
2355 /* Assume it's not, unless we see that it is. */
2356 if (static_memfuncp)
c5aa993b 2357 *static_memfuncp = 0;
c906108c 2358
158cc4fe 2359 if (!args.has_value ())
c906108c
SS
2360 {
2361 /* if there are no arguments ...do this... */
2362
ac3eeb49 2363 /* Try as a field first, because if we succeed, there is less
dda83cd7 2364 work to be done. */
8a13d42d 2365 v = search_struct_field (name, *argp, t, 0);
c906108c
SS
2366 if (v)
2367 return v;
2368
87e10e9c
BH
2369 if (current_language->la_language == language_fortran)
2370 {
2371 /* If it is not a field it is the type name of an inherited
2372 structure. */
2373 v = search_struct_field (name, *argp, t, 1);
2374 if (v)
2375 return v;
2376 }
2377
c906108c 2378 /* C++: If it was not found as a data field, then try to
dda83cd7 2379 return it as a pointer to a method. */
13221aec 2380 v = search_struct_method (name, argp, args, 0,
ac3eeb49 2381 static_memfuncp, t);
c906108c 2382
f23631e4 2383 if (v == (struct value *) - 1)
55b39184 2384 error (_("Cannot take address of method %s."), name);
c906108c
SS
2385 else if (v == 0)
2386 {
2387 if (TYPE_NFN_FIELDS (t))
8a3fe4f8 2388 error (_("There is no member or method named %s."), name);
c906108c 2389 else
8a3fe4f8 2390 error (_("There is no member named %s."), name);
c906108c
SS
2391 }
2392 return v;
2393 }
2394
13221aec 2395 v = search_struct_method (name, argp, args, 0,
8301c89e 2396 static_memfuncp, t);
13221aec 2397
f23631e4 2398 if (v == (struct value *) - 1)
c906108c 2399 {
3e43a32a
MS
2400 error (_("One of the arguments you tried to pass to %s could not "
2401 "be converted to what the function wants."), name);
c906108c
SS
2402 }
2403 else if (v == 0)
2404 {
ac3eeb49 2405 /* See if user tried to invoke data as function. If so, hand it
dda83cd7
SM
2406 back. If it's not callable (i.e., a pointer to function),
2407 gdb should give an error. */
8a13d42d 2408 v = search_struct_field (name, *argp, t, 0);
fa8de41e
TT
2409 /* If we found an ordinary field, then it is not a method call.
2410 So, treat it as if it were a static member function. */
2411 if (v && static_memfuncp)
2412 *static_memfuncp = 1;
c906108c
SS
2413 }
2414
2415 if (!v)
79afc5ef 2416 throw_error (NOT_FOUND_ERROR,
dda83cd7 2417 _("Structure has no component named %s."), name);
c906108c
SS
2418 return v;
2419}
2420
b5b08fb4
SC
2421/* Given *ARGP, a value of type structure or union, or a pointer/reference
2422 to a structure or union, extract and return its component (field) of
2423 type FTYPE at the specified BITPOS.
2424 Throw an exception on error. */
2425
2426struct value *
2427value_struct_elt_bitpos (struct value **argp, int bitpos, struct type *ftype,
2428 const char *err)
2429{
2430 struct type *t;
b5b08fb4 2431 int i;
b5b08fb4
SC
2432
2433 *argp = coerce_array (*argp);
2434
d0c97917 2435 t = check_typedef ((*argp)->type ());
b5b08fb4 2436
809f3be1 2437 while (t->is_pointer_or_reference ())
b5b08fb4
SC
2438 {
2439 *argp = value_ind (*argp);
d0c97917 2440 if (check_typedef ((*argp)->type ())->code () != TYPE_CODE_FUNC)
b5b08fb4 2441 *argp = coerce_array (*argp);
d0c97917 2442 t = check_typedef ((*argp)->type ());
b5b08fb4
SC
2443 }
2444
78134374
SM
2445 if (t->code () != TYPE_CODE_STRUCT
2446 && t->code () != TYPE_CODE_UNION)
b5b08fb4
SC
2447 error (_("Attempt to extract a component of a value that is not a %s."),
2448 err);
2449
1f704f76 2450 for (i = TYPE_N_BASECLASSES (t); i < t->num_fields (); i++)
b5b08fb4 2451 {
c819a338 2452 if (!t->field (i).is_static ()
b610c045 2453 && bitpos == t->field (i).loc_bitpos ()
940da03e 2454 && types_equal (ftype, t->field (i).type ()))
6c49729e 2455 return (*argp)->primitive_field (0, i, t);
b5b08fb4
SC
2456 }
2457
2458 error (_("No field with matching bitpos and type."));
2459
2460 /* Never hit. */
2461 return NULL;
2462}
2463
ac3eeb49 2464/* Search through the methods of an object (and its bases) to find a
38139a96 2465 specified method. Return a reference to the fn_field list METHODS of
233e8b28
SC
2466 overloaded instances defined in the source language. If available
2467 and matching, a vector of matching xmethods defined in extension
38139a96 2468 languages are also returned in XMETHODS.
ac3eeb49
MS
2469
2470 Helper function for value_find_oload_list.
2471 ARGP is a pointer to a pointer to a value (the object).
2472 METHOD is a string containing the method name.
2473 OFFSET is the offset within the value.
2474 TYPE is the assumed type of the object.
38139a96
PA
2475 METHODS is a pointer to the matching overloaded instances defined
2476 in the source language. Since this is a recursive function,
2477 *METHODS should be set to NULL when calling this function.
233e8b28
SC
2478 NUM_FNS is the number of overloaded instances. *NUM_FNS should be set to
2479 0 when calling this function.
38139a96 2480 XMETHODS is the vector of matching xmethod workers. *XMETHODS
233e8b28 2481 should also be set to NULL when calling this function.
ac3eeb49
MS
2482 BASETYPE is set to the actual type of the subobject where the
2483 method is found.
581e13c1 2484 BOFFSET is the offset of the base subobject where the method is found. */
c906108c 2485
233e8b28 2486static void
714f19d5 2487find_method_list (struct value **argp, const char *method,
6b850546 2488 LONGEST offset, struct type *type,
38139a96
PA
2489 gdb::array_view<fn_field> *methods,
2490 std::vector<xmethod_worker_up> *xmethods,
6b850546 2491 struct type **basetype, LONGEST *boffset)
c906108c
SS
2492{
2493 int i;
233e8b28 2494 struct fn_field *f = NULL;
c906108c 2495
38139a96 2496 gdb_assert (methods != NULL && xmethods != NULL);
f168693b 2497 type = check_typedef (type);
c906108c 2498
233e8b28
SC
2499 /* First check in object itself.
2500 This function is called recursively to search through base classes.
2501 If there is a source method match found at some stage, then we need not
2502 look for source methods in consequent recursive calls. */
38139a96 2503 if (methods->empty ())
c906108c 2504 {
233e8b28 2505 for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; i--)
c5aa993b 2506 {
233e8b28
SC
2507 /* pai: FIXME What about operators and type conversions? */
2508 const char *fn_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
2509
2510 if (fn_field_name && (strcmp_iw (fn_field_name, method) == 0))
2511 {
2512 int len = TYPE_FN_FIELDLIST_LENGTH (type, i);
2513 f = TYPE_FN_FIELDLIST1 (type, i);
38139a96 2514 *methods = gdb::make_array_view (f, len);
4a1970e4 2515
233e8b28
SC
2516 *basetype = type;
2517 *boffset = offset;
4a1970e4 2518
233e8b28
SC
2519 /* Resolve any stub methods. */
2520 check_stub_method_group (type, i);
4a1970e4 2521
233e8b28
SC
2522 break;
2523 }
c5aa993b
JM
2524 }
2525 }
2526
233e8b28
SC
2527 /* Unlike source methods, xmethods can be accumulated over successive
2528 recursive calls. In other words, an xmethod named 'm' in a class
2529 will not hide an xmethod named 'm' in its base class(es). We want
2530 it to be this way because xmethods are after all convenience functions
2531 and hence there is no point restricting them with something like method
2532 hiding. Moreover, if hiding is done for xmethods as well, then we will
2533 have to provide a mechanism to un-hide (like the 'using' construct). */
38139a96 2534 get_matching_xmethod_workers (type, method, xmethods);
233e8b28
SC
2535
2536 /* If source methods are not found in current class, look for them in the
2537 base classes. We also have to go through the base classes to gather
2538 extension methods. */
c906108c
SS
2539 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
2540 {
6b850546 2541 LONGEST base_offset;
a109c7c1 2542
c906108c
SS
2543 if (BASETYPE_VIA_VIRTUAL (type, i))
2544 {
086280be 2545 base_offset = baseclass_offset (type, i,
efaf1ae0 2546 (*argp)->contents_for_printing ().data (),
76675c4d 2547 (*argp)->offset () + offset,
9feb2d07 2548 (*argp)->address (), *argp);
c5aa993b 2549 }
ac3eeb49
MS
2550 else /* Non-virtual base, simply use bit position from debug
2551 info. */
c906108c
SS
2552 {
2553 base_offset = TYPE_BASECLASS_BITPOS (type, i) / 8;
c5aa993b 2554 }
233e8b28
SC
2555
2556 find_method_list (argp, method, base_offset + offset,
38139a96
PA
2557 TYPE_BASECLASS (type, i), methods,
2558 xmethods, basetype, boffset);
c906108c 2559 }
c906108c
SS
2560}
2561
233e8b28
SC
2562/* Return the list of overloaded methods of a specified name. The methods
2563 could be those GDB finds in the binary, or xmethod. Methods found in
38139a96
PA
2564 the binary are returned in METHODS, and xmethods are returned in
2565 XMETHODS.
ac3eeb49
MS
2566
2567 ARGP is a pointer to a pointer to a value (the object).
2568 METHOD is the method name.
2569 OFFSET is the offset within the value contents.
38139a96
PA
2570 METHODS is the list of matching overloaded instances defined in
2571 the source language.
2572 XMETHODS is the vector of matching xmethod workers defined in
233e8b28 2573 extension languages.
ac3eeb49
MS
2574 BASETYPE is set to the type of the base subobject that defines the
2575 method.
581e13c1 2576 BOFFSET is the offset of the base subobject which defines the method. */
c906108c 2577
233e8b28 2578static void
714f19d5 2579value_find_oload_method_list (struct value **argp, const char *method,
85cca2bc 2580 LONGEST offset,
38139a96
PA
2581 gdb::array_view<fn_field> *methods,
2582 std::vector<xmethod_worker_up> *xmethods,
6b850546 2583 struct type **basetype, LONGEST *boffset)
c906108c 2584{
c5aa993b 2585 struct type *t;
c906108c 2586
d0c97917 2587 t = check_typedef ((*argp)->type ());
c906108c 2588
ac3eeb49 2589 /* Code snarfed from value_struct_elt. */
809f3be1 2590 while (t->is_pointer_or_reference ())
c906108c
SS
2591 {
2592 *argp = value_ind (*argp);
2593 /* Don't coerce fn pointer to fn and then back again! */
d0c97917 2594 if (check_typedef ((*argp)->type ())->code () != TYPE_CODE_FUNC)
994b9211 2595 *argp = coerce_array (*argp);
d0c97917 2596 t = check_typedef ((*argp)->type ());
c906108c 2597 }
c5aa993b 2598
78134374
SM
2599 if (t->code () != TYPE_CODE_STRUCT
2600 && t->code () != TYPE_CODE_UNION)
3e43a32a
MS
2601 error (_("Attempt to extract a component of a "
2602 "value that is not a struct or union"));
c5aa993b 2603
38139a96 2604 gdb_assert (methods != NULL && xmethods != NULL);
233e8b28
SC
2605
2606 /* Clear the lists. */
38139a96
PA
2607 *methods = {};
2608 xmethods->clear ();
233e8b28 2609
38139a96 2610 find_method_list (argp, method, 0, t, methods, xmethods,
233e8b28 2611 basetype, boffset);
c906108c
SS
2612}
2613
041de3d7
BL
2614/* Helper function for find_overload_match. If no matches were
2615 found, this function may generate a hint for the user that some
2616 of the relevant types are incomplete, so GDB can't evaluate
2617 type relationships to properly evaluate overloads.
2618
2619 If no incomplete types are present, an empty string is returned. */
2620static std::string
2621incomplete_type_hint (gdb::array_view<value *> args)
2622{
2623 int incomplete_types = 0;
2624 std::string incomplete_arg_names;
2625 for (const struct value *arg : args)
2626 {
d0c97917 2627 struct type *t = arg->type ();
041de3d7
BL
2628 while (t->code () == TYPE_CODE_PTR)
2629 t = t->target_type ();
2630 if (t->is_stub ())
2631 {
2632 string_file buffer;
2633 if (incomplete_types > 0)
2634 incomplete_arg_names += ", ";
2635
d0c97917 2636 current_language->print_type (arg->type (), "", &buffer,
041de3d7
BL
2637 -1, 0, &type_print_raw_options);
2638
2639 incomplete_types++;
2640 incomplete_arg_names += buffer.string ();
2641 }
2642 }
2643 std::string hint;
2644 if (incomplete_types > 1)
2645 hint = string_printf (_("\nThe types: '%s' aren't fully known to GDB."
2646 " Please cast them directly to the desired"
2647 " typed in the function call."),
2648 incomplete_arg_names.c_str ());
2649 else if (incomplete_types == 1)
2650 hint = string_printf (_("\nThe type: '%s' isn't fully known to GDB."
2651 " Please cast it directly to the desired"
2652 " typed in the function call."),
2653 incomplete_arg_names.c_str ());
2654 return hint;
2655}
2656
6b1747cd
PA
2657/* Given an array of arguments (ARGS) (which includes an entry for
2658 "this" in the case of C++ methods), the NAME of a function, and
2659 whether it's a method or not (METHOD), find the best function that
2660 matches on the argument types according to the overload resolution
2661 rules.
c906108c 2662
4c3376c8
SW
2663 METHOD can be one of three values:
2664 NON_METHOD for non-member functions.
2665 METHOD: for member functions.
2666 BOTH: used for overload resolution of operators where the
2667 candidates are expected to be either member or non member
581e13c1 2668 functions. In this case the first argument ARGTYPES
4c3376c8
SW
2669 (representing 'this') is expected to be a reference to the
2670 target object, and will be dereferenced when attempting the
2671 non-member search.
2672
c906108c
SS
2673 In the case of class methods, the parameter OBJ is an object value
2674 in which to search for overloaded methods.
2675
2676 In the case of non-method functions, the parameter FSYM is a symbol
2677 corresponding to one of the overloaded functions.
2678
2679 Return value is an integer: 0 -> good match, 10 -> debugger applied
2680 non-standard coercions, 100 -> incompatible.
2681
2682 If a method is being searched for, VALP will hold the value.
ac3eeb49
MS
2683 If a non-method is being searched for, SYMP will hold the symbol
2684 for it.
c906108c
SS
2685
2686 If a method is being searched for, and it is a static method,
2687 then STATICP will point to a non-zero value.
2688
7322dca9
SW
2689 If NO_ADL argument dependent lookup is disabled. This is used to prevent
2690 ADL overload candidates when performing overload resolution for a fully
2691 qualified name.
2692
e66d4446
SC
2693 If NOSIDE is EVAL_AVOID_SIDE_EFFECTS, then OBJP's memory cannot be
2694 read while picking the best overload match (it may be all zeroes and thus
2695 not have a vtable pointer), in which case skip virtual function lookup.
2696 This is ok as typically EVAL_AVOID_SIDE_EFFECTS is only used to determine
2697 the result type.
2698
c906108c
SS
2699 Note: This function does *not* check the value of
2700 overload_resolution. Caller must check it to see whether overload
581e13c1 2701 resolution is permitted. */
c906108c
SS
2702
2703int
6b1747cd 2704find_overload_match (gdb::array_view<value *> args,
4c3376c8 2705 const char *name, enum oload_search_type method,
28c64fc2 2706 struct value **objp, struct symbol *fsym,
ac3eeb49 2707 struct value **valp, struct symbol **symp,
e66d4446
SC
2708 int *staticp, const int no_adl,
2709 const enum noside noside)
c906108c 2710{
7f8c9282 2711 struct value *obj = (objp ? *objp : NULL);
d0c97917 2712 struct type *obj_type = obj ? obj->type () : NULL;
ac3eeb49 2713 /* Index of best overloaded function. */
4c3376c8
SW
2714 int func_oload_champ = -1;
2715 int method_oload_champ = -1;
233e8b28
SC
2716 int src_method_oload_champ = -1;
2717 int ext_method_oload_champ = -1;
4c3376c8 2718
ac3eeb49 2719 /* The measure for the current best match. */
82ceee50
PA
2720 badness_vector method_badness;
2721 badness_vector func_badness;
2722 badness_vector ext_method_badness;
2723 badness_vector src_method_badness;
4c3376c8 2724
f23631e4 2725 struct value *temp = obj;
ac3eeb49 2726 /* For methods, the list of overloaded methods. */
38139a96 2727 gdb::array_view<fn_field> methods;
ac3eeb49 2728 /* For non-methods, the list of overloaded function symbols. */
38139a96 2729 std::vector<symbol *> functions;
ba18742c 2730 /* For xmethods, the vector of xmethod workers. */
38139a96 2731 std::vector<xmethod_worker_up> xmethods;
c5aa993b 2732 struct type *basetype = NULL;
6b850546 2733 LONGEST boffset;
7322dca9 2734
8d577d32 2735 const char *obj_type_name = NULL;
7322dca9 2736 const char *func_name = NULL;
06d3e5b0 2737 gdb::unique_xmalloc_ptr<char> temp_func;
8d577d32 2738 enum oload_classification match_quality;
4c3376c8 2739 enum oload_classification method_match_quality = INCOMPATIBLE;
233e8b28
SC
2740 enum oload_classification src_method_match_quality = INCOMPATIBLE;
2741 enum oload_classification ext_method_match_quality = INCOMPATIBLE;
4c3376c8 2742 enum oload_classification func_match_quality = INCOMPATIBLE;
c906108c 2743
ac3eeb49 2744 /* Get the list of overloaded methods or functions. */
4c3376c8 2745 if (method == METHOD || method == BOTH)
c906108c 2746 {
a2ca50ae 2747 gdb_assert (obj);
94af9270
KS
2748
2749 /* OBJ may be a pointer value rather than the object itself. */
2750 obj = coerce_ref (obj);
d0c97917 2751 while (check_typedef (obj->type ())->code () == TYPE_CODE_PTR)
94af9270 2752 obj = coerce_ref (value_ind (obj));
d0c97917 2753 obj_type_name = obj->type ()->name ();
94af9270
KS
2754
2755 /* First check whether this is a data member, e.g. a pointer to
2756 a function. */
d0c97917 2757 if (check_typedef (obj->type ())->code () == TYPE_CODE_STRUCT)
94af9270 2758 {
8a13d42d 2759 *valp = search_struct_field (name, obj,
d0c97917 2760 check_typedef (obj->type ()), 0);
94af9270
KS
2761 if (*valp)
2762 {
2763 *staticp = 1;
2764 return 0;
2765 }
2766 }
c906108c 2767
4c3376c8 2768 /* Retrieve the list of methods with the name NAME. */
38139a96
PA
2769 value_find_oload_method_list (&temp, name, 0, &methods,
2770 &xmethods, &basetype, &boffset);
4c3376c8 2771 /* If this is a method only search, and no methods were found
dda83cd7 2772 the search has failed. */
38139a96 2773 if (method == METHOD && methods.empty () && xmethods.empty ())
8a3fe4f8 2774 error (_("Couldn't find method %s%s%s"),
c5aa993b
JM
2775 obj_type_name,
2776 (obj_type_name && *obj_type_name) ? "::" : "",
2777 name);
4a1970e4 2778 /* If we are dealing with stub method types, they should have
ac3eeb49
MS
2779 been resolved by find_method_list via
2780 value_find_oload_method_list above. */
38139a96 2781 if (!methods.empty ())
4c3376c8 2782 {
38139a96 2783 gdb_assert (TYPE_SELF_TYPE (methods[0].type) != NULL);
4c3376c8 2784
85cca2bc
PA
2785 src_method_oload_champ
2786 = find_oload_champ (args,
38139a96
PA
2787 methods.size (),
2788 methods.data (), NULL, NULL,
85cca2bc 2789 &src_method_badness);
233e8b28
SC
2790
2791 src_method_match_quality = classify_oload_match
6b1747cd 2792 (src_method_badness, args.size (),
38139a96 2793 oload_method_static_p (methods.data (), src_method_oload_champ));
233e8b28 2794 }
4c3376c8 2795
38139a96 2796 if (!xmethods.empty ())
233e8b28 2797 {
85cca2bc
PA
2798 ext_method_oload_champ
2799 = find_oload_champ (args,
38139a96
PA
2800 xmethods.size (),
2801 NULL, xmethods.data (), NULL,
85cca2bc 2802 &ext_method_badness);
233e8b28 2803 ext_method_match_quality = classify_oload_match (ext_method_badness,
6b1747cd 2804 args.size (), 0);
4c3376c8
SW
2805 }
2806
233e8b28
SC
2807 if (src_method_oload_champ >= 0 && ext_method_oload_champ >= 0)
2808 {
2809 switch (compare_badness (ext_method_badness, src_method_badness))
2810 {
2811 case 0: /* Src method and xmethod are equally good. */
233e8b28
SC
2812 /* If src method and xmethod are equally good, then
2813 xmethod should be the winner. Hence, fall through to the
2814 case where a xmethod is better than the source
2815 method, except when the xmethod match quality is
2816 non-standard. */
d182e398 2817 [[fallthrough]];
233e8b28
SC
2818 case 1: /* Src method and ext method are incompatible. */
2819 /* If ext method match is not standard, then let source method
2820 win. Otherwise, fallthrough to let xmethod win. */
2821 if (ext_method_match_quality != STANDARD)
2822 {
2823 method_oload_champ = src_method_oload_champ;
2824 method_badness = src_method_badness;
2825 ext_method_oload_champ = -1;
2826 method_match_quality = src_method_match_quality;
2827 break;
2828 }
d182e398 2829 [[fallthrough]];
233e8b28
SC
2830 case 2: /* Ext method is champion. */
2831 method_oload_champ = ext_method_oload_champ;
2832 method_badness = ext_method_badness;
2833 src_method_oload_champ = -1;
2834 method_match_quality = ext_method_match_quality;
2835 break;
2836 case 3: /* Src method is champion. */
2837 method_oload_champ = src_method_oload_champ;
2838 method_badness = src_method_badness;
2839 ext_method_oload_champ = -1;
2840 method_match_quality = src_method_match_quality;
2841 break;
2842 default:
2843 gdb_assert_not_reached ("Unexpected overload comparison "
2844 "result");
2845 break;
2846 }
2847 }
2848 else if (src_method_oload_champ >= 0)
2849 {
2850 method_oload_champ = src_method_oload_champ;
2851 method_badness = src_method_badness;
2852 method_match_quality = src_method_match_quality;
2853 }
2854 else if (ext_method_oload_champ >= 0)
2855 {
2856 method_oload_champ = ext_method_oload_champ;
2857 method_badness = ext_method_badness;
2858 method_match_quality = ext_method_match_quality;
2859 }
c906108c 2860 }
4c3376c8
SW
2861
2862 if (method == NON_METHOD || method == BOTH)
c906108c 2863 {
7322dca9 2864 const char *qualified_name = NULL;
c906108c 2865
b021a221 2866 /* If the overload match is being search for both as a method
dda83cd7
SM
2867 and non member function, the first argument must now be
2868 dereferenced. */
4c3376c8 2869 if (method == BOTH)
2b214ea6 2870 args[0] = value_ind (args[0]);
4c3376c8 2871
7322dca9 2872 if (fsym)
dda83cd7
SM
2873 {
2874 qualified_name = fsym->natural_name ();
7322dca9 2875
dda83cd7 2876 /* If we have a function with a C++ name, try to extract just
7322dca9
SW
2877 the function part. Do not try this for non-functions (e.g.
2878 function pointers). */
dda83cd7 2879 if (qualified_name
5f9c5a63 2880 && (check_typedef (fsym->type ())->code ()
78134374 2881 == TYPE_CODE_FUNC))
dda83cd7 2882 {
b926417a 2883 temp_func = cp_func_name (qualified_name);
7322dca9
SW
2884
2885 /* If cp_func_name did not remove anything, the name of the
dda83cd7
SM
2886 symbol did not include scope or argument types - it was
2887 probably a C-style function. */
06d3e5b0 2888 if (temp_func != nullptr)
7322dca9 2889 {
06d3e5b0 2890 if (strcmp (temp_func.get (), qualified_name) == 0)
7322dca9
SW
2891 func_name = NULL;
2892 else
06d3e5b0 2893 func_name = temp_func.get ();
7322dca9 2894 }
dda83cd7
SM
2895 }
2896 }
7322dca9 2897 else
94af9270 2898 {
7322dca9
SW
2899 func_name = name;
2900 qualified_name = name;
94af9270 2901 }
d9639e13 2902
94af9270
KS
2903 /* If there was no C++ name, this must be a C-style function or
2904 not a function at all. Just return the same symbol. Do the
2905 same if cp_func_name fails for some reason. */
8d577d32 2906 if (func_name == NULL)
dda83cd7 2907 {
917317f4 2908 *symp = fsym;
dda83cd7
SM
2909 return 0;
2910 }
917317f4 2911
6b1747cd 2912 func_oload_champ = find_oload_champ_namespace (args,
dda83cd7
SM
2913 func_name,
2914 qualified_name,
2915 &functions,
2916 &func_badness,
2917 no_adl);
8d577d32 2918
4c3376c8 2919 if (func_oload_champ >= 0)
6b1747cd
PA
2920 func_match_quality = classify_oload_match (func_badness,
2921 args.size (), 0);
8d577d32
DC
2922 }
2923
7322dca9 2924 /* Did we find a match ? */
4c3376c8 2925 if (method_oload_champ == -1 && func_oload_champ == -1)
79afc5ef 2926 throw_error (NOT_FOUND_ERROR,
dda83cd7
SM
2927 _("No symbol \"%s\" in current context."),
2928 name);
8d577d32 2929
4c3376c8
SW
2930 /* If we have found both a method match and a function
2931 match, find out which one is better, and calculate match
2932 quality. */
2933 if (method_oload_champ >= 0 && func_oload_champ >= 0)
2934 {
2935 switch (compare_badness (func_badness, method_badness))
dda83cd7 2936 {
4c3376c8 2937 case 0: /* Top two contenders are equally good. */
b021a221
MS
2938 /* FIXME: GDB does not support the general ambiguous case.
2939 All candidates should be collected and presented the
2940 user. */
4c3376c8
SW
2941 error (_("Ambiguous overload resolution"));
2942 break;
2943 case 1: /* Incomparable top contenders. */
2944 /* This is an error incompatible candidates
2945 should not have been proposed. */
3e43a32a
MS
2946 error (_("Internal error: incompatible "
2947 "overload candidates proposed"));
4c3376c8
SW
2948 break;
2949 case 2: /* Function champion. */
2950 method_oload_champ = -1;
2951 match_quality = func_match_quality;
2952 break;
2953 case 3: /* Method champion. */
2954 func_oload_champ = -1;
2955 match_quality = method_match_quality;
2956 break;
2957 default:
2958 error (_("Internal error: unexpected overload comparison result"));
2959 break;
dda83cd7 2960 }
4c3376c8
SW
2961 }
2962 else
2963 {
2964 /* We have either a method match or a function match. */
2965 if (method_oload_champ >= 0)
2966 match_quality = method_match_quality;
2967 else
2968 match_quality = func_match_quality;
2969 }
8d577d32
DC
2970
2971 if (match_quality == INCOMPATIBLE)
2972 {
041de3d7 2973 std::string hint = incomplete_type_hint (args);
4c3376c8 2974 if (method == METHOD)
05e8d17b 2975 error (_("Cannot resolve method %s%s%s to any overloaded instance%s"),
8d577d32
DC
2976 obj_type_name,
2977 (obj_type_name && *obj_type_name) ? "::" : "",
041de3d7 2978 name, hint.c_str ());
8d577d32 2979 else
05e8d17b 2980 error (_("Cannot resolve function %s to any overloaded instance%s"),
041de3d7 2981 func_name, hint.c_str ());
8d577d32
DC
2982 }
2983 else if (match_quality == NON_STANDARD)
2984 {
4c3376c8 2985 if (method == METHOD)
3e43a32a
MS
2986 warning (_("Using non-standard conversion to match "
2987 "method %s%s%s to supplied arguments"),
8d577d32
DC
2988 obj_type_name,
2989 (obj_type_name && *obj_type_name) ? "::" : "",
2990 name);
2991 else
3e43a32a
MS
2992 warning (_("Using non-standard conversion to match "
2993 "function %s to supplied arguments"),
8d577d32
DC
2994 func_name);
2995 }
2996
4c3376c8 2997 if (staticp != NULL)
38139a96 2998 *staticp = oload_method_static_p (methods.data (), method_oload_champ);
4c3376c8
SW
2999
3000 if (method_oload_champ >= 0)
8d577d32 3001 {
233e8b28
SC
3002 if (src_method_oload_champ >= 0)
3003 {
38139a96 3004 if (TYPE_FN_FIELD_VIRTUAL_P (methods, method_oload_champ)
e66d4446
SC
3005 && noside != EVAL_AVOID_SIDE_EFFECTS)
3006 {
38139a96 3007 *valp = value_virtual_fn_field (&temp, methods.data (),
e66d4446
SC
3008 method_oload_champ, basetype,
3009 boffset);
3010 }
233e8b28 3011 else
38139a96 3012 *valp = value_fn_field (&temp, methods.data (),
85cca2bc 3013 method_oload_champ, basetype, boffset);
233e8b28 3014 }
8d577d32 3015 else
6bd5c754 3016 *valp = value::from_xmethod
38139a96 3017 (std::move (xmethods[ext_method_oload_champ]));
8d577d32
DC
3018 }
3019 else
38139a96 3020 *symp = functions[func_oload_champ];
8d577d32
DC
3021
3022 if (objp)
3023 {
d0c97917 3024 struct type *temp_type = check_typedef (temp->type ());
da096638 3025 struct type *objtype = check_typedef (obj_type);
a109c7c1 3026
78134374 3027 if (temp_type->code () != TYPE_CODE_PTR
809f3be1 3028 && objtype->is_pointer_or_reference ())
8d577d32
DC
3029 {
3030 temp = value_addr (temp);
3031 }
3032 *objp = temp;
3033 }
7322dca9 3034
8d577d32
DC
3035 switch (match_quality)
3036 {
3037 case INCOMPATIBLE:
3038 return 100;
3039 case NON_STANDARD:
3040 return 10;
3041 default: /* STANDARD */
3042 return 0;
3043 }
3044}
3045
3046/* Find the best overload match, searching for FUNC_NAME in namespaces
3047 contained in QUALIFIED_NAME until it either finds a good match or
3048 runs out of namespaces. It stores the overloaded functions in
82ceee50 3049 *OLOAD_SYMS, and the badness vector in *OLOAD_CHAMP_BV. If NO_ADL,
30baf67b 3050 argument dependent lookup is not performed. */
8d577d32
DC
3051
3052static int
6b1747cd 3053find_oload_champ_namespace (gdb::array_view<value *> args,
8d577d32
DC
3054 const char *func_name,
3055 const char *qualified_name,
0891c3cc 3056 std::vector<symbol *> *oload_syms,
82ceee50 3057 badness_vector *oload_champ_bv,
7322dca9 3058 const int no_adl)
8d577d32
DC
3059{
3060 int oload_champ;
3061
6b1747cd 3062 find_oload_champ_namespace_loop (args,
8d577d32
DC
3063 func_name,
3064 qualified_name, 0,
3065 oload_syms, oload_champ_bv,
7322dca9
SW
3066 &oload_champ,
3067 no_adl);
8d577d32
DC
3068
3069 return oload_champ;
3070}
3071
3072/* Helper function for find_oload_champ_namespace; NAMESPACE_LEN is
3073 how deep we've looked for namespaces, and the champ is stored in
3074 OLOAD_CHAMP. The return value is 1 if the champ is a good one, 0
7322dca9 3075 if it isn't. Other arguments are the same as in
82ceee50 3076 find_oload_champ_namespace. */
8d577d32
DC
3077
3078static int
6b1747cd 3079find_oload_champ_namespace_loop (gdb::array_view<value *> args,
8d577d32
DC
3080 const char *func_name,
3081 const char *qualified_name,
3082 int namespace_len,
0891c3cc 3083 std::vector<symbol *> *oload_syms,
82ceee50 3084 badness_vector *oload_champ_bv,
7322dca9
SW
3085 int *oload_champ,
3086 const int no_adl)
8d577d32
DC
3087{
3088 int next_namespace_len = namespace_len;
3089 int searched_deeper = 0;
8d577d32 3090 int new_oload_champ;
8d577d32
DC
3091 char *new_namespace;
3092
3093 if (next_namespace_len != 0)
3094 {
3095 gdb_assert (qualified_name[next_namespace_len] == ':');
3096 next_namespace_len += 2;
c906108c 3097 }
ac3eeb49
MS
3098 next_namespace_len +=
3099 cp_find_first_component (qualified_name + next_namespace_len);
8d577d32 3100
581e13c1 3101 /* First, see if we have a deeper namespace we can search in.
ac3eeb49 3102 If we get a good match there, use it. */
8d577d32
DC
3103
3104 if (qualified_name[next_namespace_len] == ':')
3105 {
3106 searched_deeper = 1;
3107
6b1747cd 3108 if (find_oload_champ_namespace_loop (args,
8d577d32
DC
3109 func_name, qualified_name,
3110 next_namespace_len,
3111 oload_syms, oload_champ_bv,
7322dca9 3112 oload_champ, no_adl))
8d577d32
DC
3113 {
3114 return 1;
3115 }
3116 };
3117
3118 /* If we reach here, either we're in the deepest namespace or we
3119 didn't find a good match in a deeper namespace. But, in the
3120 latter case, we still have a bad match in a deeper namespace;
3121 note that we might not find any match at all in the current
3122 namespace. (There's always a match in the deepest namespace,
3123 because this overload mechanism only gets called if there's a
3124 function symbol to start off with.) */
3125
224c3ddb 3126 new_namespace = (char *) alloca (namespace_len + 1);
8d577d32
DC
3127 strncpy (new_namespace, qualified_name, namespace_len);
3128 new_namespace[namespace_len] = '\0';
0891c3cc
PA
3129
3130 std::vector<symbol *> new_oload_syms
3131 = make_symbol_overload_list (func_name, new_namespace);
7322dca9
SW
3132
3133 /* If we have reached the deepest level perform argument
3134 determined lookup. */
3135 if (!searched_deeper && !no_adl)
da096638
KS
3136 {
3137 int ix;
3138 struct type **arg_types;
3139
3140 /* Prepare list of argument types for overload resolution. */
3141 arg_types = (struct type **)
6b1747cd
PA
3142 alloca (args.size () * (sizeof (struct type *)));
3143 for (ix = 0; ix < args.size (); ix++)
d0c97917 3144 arg_types[ix] = args[ix]->type ();
0891c3cc
PA
3145 add_symbol_overload_list_adl ({arg_types, args.size ()}, func_name,
3146 &new_oload_syms);
da096638 3147 }
7322dca9 3148
82ceee50 3149 badness_vector new_oload_champ_bv;
85cca2bc
PA
3150 new_oload_champ = find_oload_champ (args,
3151 new_oload_syms.size (),
0891c3cc 3152 NULL, NULL, new_oload_syms.data (),
8d577d32
DC
3153 &new_oload_champ_bv);
3154
3155 /* Case 1: We found a good match. Free earlier matches (if any),
3156 and return it. Case 2: We didn't find a good match, but we're
3157 not the deepest function. Then go with the bad match that the
3158 deeper function found. Case 3: We found a bad match, and we're
3159 the deepest function. Then return what we found, even though
3160 it's a bad match. */
3161
3162 if (new_oload_champ != -1
6b1747cd 3163 && classify_oload_match (new_oload_champ_bv, args.size (), 0) == STANDARD)
8d577d32 3164 {
0891c3cc 3165 *oload_syms = std::move (new_oload_syms);
8d577d32 3166 *oload_champ = new_oload_champ;
82ceee50 3167 *oload_champ_bv = std::move (new_oload_champ_bv);
8d577d32
DC
3168 return 1;
3169 }
3170 else if (searched_deeper)
3171 {
8d577d32
DC
3172 return 0;
3173 }
3174 else
3175 {
0891c3cc 3176 *oload_syms = std::move (new_oload_syms);
8d577d32 3177 *oload_champ = new_oload_champ;
82ceee50 3178 *oload_champ_bv = std::move (new_oload_champ_bv);
8d577d32
DC
3179 return 0;
3180 }
3181}
3182
6b1747cd 3183/* Look for a function to take ARGS. Find the best match from among
38139a96
PA
3184 the overloaded methods or functions given by METHODS or FUNCTIONS
3185 or XMETHODS, respectively. One, and only one of METHODS, FUNCTIONS
3186 and XMETHODS can be non-NULL.
233e8b28 3187
38139a96
PA
3188 NUM_FNS is the length of the array pointed at by METHODS, FUNCTIONS
3189 or XMETHODS, whichever is non-NULL.
233e8b28 3190
8d577d32 3191 Return the index of the best match; store an indication of the
82ceee50 3192 quality of the match in OLOAD_CHAMP_BV. */
8d577d32
DC
3193
3194static int
6b1747cd 3195find_oload_champ (gdb::array_view<value *> args,
85cca2bc 3196 size_t num_fns,
38139a96
PA
3197 fn_field *methods,
3198 xmethod_worker_up *xmethods,
3199 symbol **functions,
82ceee50 3200 badness_vector *oload_champ_bv)
8d577d32 3201{
ac3eeb49 3202 /* A measure of how good an overloaded instance is. */
82ceee50 3203 badness_vector bv;
ac3eeb49
MS
3204 /* Index of best overloaded function. */
3205 int oload_champ = -1;
3206 /* Current ambiguity state for overload resolution. */
3207 int oload_ambiguous = 0;
3208 /* 0 => no ambiguity, 1 => two good funcs, 2 => incomparable funcs. */
8d577d32 3209
9cf95373 3210 /* A champion can be found among methods alone, or among functions
233e8b28
SC
3211 alone, or in xmethods alone, but not in more than one of these
3212 groups. */
38139a96 3213 gdb_assert ((methods != NULL) + (functions != NULL) + (xmethods != NULL)
233e8b28 3214 == 1);
9cf95373 3215
ac3eeb49 3216 /* Consider each candidate in turn. */
85cca2bc 3217 for (size_t ix = 0; ix < num_fns; ix++)
c906108c 3218 {
8d577d32 3219 int jj;
233e8b28 3220 int static_offset = 0;
1d2f86b6 3221 bool varargs = false;
6b1747cd 3222 std::vector<type *> parm_types;
8d577d32 3223
38139a96
PA
3224 if (xmethods != NULL)
3225 parm_types = xmethods[ix]->get_arg_types ();
db577aea
AC
3226 else
3227 {
6b1747cd
PA
3228 size_t nparms;
3229
38139a96 3230 if (methods != NULL)
233e8b28 3231 {
1f704f76 3232 nparms = TYPE_FN_FIELD_TYPE (methods, ix)->num_fields ();
38139a96 3233 static_offset = oload_method_static_p (methods, ix);
1d2f86b6 3234 varargs = TYPE_FN_FIELD_TYPE (methods, ix)->has_varargs ();
233e8b28
SC
3235 }
3236 else
1d2f86b6
HD
3237 {
3238 nparms = functions[ix]->type ()->num_fields ();
3239 varargs = functions[ix]->type ()->has_varargs ();
3240 }
233e8b28 3241
6b1747cd 3242 parm_types.reserve (nparms);
233e8b28 3243 for (jj = 0; jj < nparms; jj++)
6b1747cd 3244 {
38139a96 3245 type *t = (methods != NULL
5d14b6e5 3246 ? (TYPE_FN_FIELD_ARGS (methods, ix)[jj].type ())
5f9c5a63 3247 : functions[ix]->type ()->field (jj).type ());
6b1747cd
PA
3248 parm_types.push_back (t);
3249 }
db577aea 3250 }
c906108c 3251
ac3eeb49 3252 /* Compare parameter types to supplied argument types. Skip
dda83cd7 3253 THIS for static methods. */
6b1747cd 3254 bv = rank_function (parm_types,
1d2f86b6
HD
3255 args.slice (static_offset),
3256 varargs);
c5aa993b 3257
e9194a1a
TBA
3258 if (overload_debug)
3259 {
3260 if (methods != NULL)
6cb06a8c
TT
3261 gdb_printf (gdb_stderr,
3262 "Overloaded method instance %s, # of parms %d\n",
3263 methods[ix].physname, (int) parm_types.size ());
e9194a1a 3264 else if (xmethods != NULL)
6cb06a8c
TT
3265 gdb_printf (gdb_stderr,
3266 "Xmethod worker, # of parms %d\n",
3267 (int) parm_types.size ());
e9194a1a 3268 else
6cb06a8c
TT
3269 gdb_printf (gdb_stderr,
3270 "Overloaded function instance "
3271 "%s # of parms %d\n",
3272 functions[ix]->demangled_name (),
3273 (int) parm_types.size ());
a992a3b0 3274
6cb06a8c
TT
3275 gdb_printf (gdb_stderr,
3276 "...Badness of length : {%d, %d}\n",
3277 bv[0].rank, bv[0].subrank);
a992a3b0
TBA
3278
3279 for (jj = 1; jj < bv.size (); jj++)
6cb06a8c
TT
3280 gdb_printf (gdb_stderr,
3281 "...Badness of arg %d : {%d, %d}\n",
3282 jj, bv[jj].rank, bv[jj].subrank);
e9194a1a
TBA
3283 }
3284
82ceee50 3285 if (oload_champ_bv->empty ())
c5aa993b 3286 {
82ceee50 3287 *oload_champ_bv = std::move (bv);
c5aa993b 3288 oload_champ = 0;
c5aa993b 3289 }
ac3eeb49
MS
3290 else /* See whether current candidate is better or worse than
3291 previous best. */
8d577d32 3292 switch (compare_badness (bv, *oload_champ_bv))
c5aa993b 3293 {
ac3eeb49
MS
3294 case 0: /* Top two contenders are equally good. */
3295 oload_ambiguous = 1;
c5aa993b 3296 break;
ac3eeb49
MS
3297 case 1: /* Incomparable top contenders. */
3298 oload_ambiguous = 2;
c5aa993b 3299 break;
ac3eeb49 3300 case 2: /* New champion, record details. */
82ceee50 3301 *oload_champ_bv = std::move (bv);
c5aa993b
JM
3302 oload_ambiguous = 0;
3303 oload_champ = ix;
c5aa993b
JM
3304 break;
3305 case 3:
3306 default:
3307 break;
3308 }
6b1ba9a0 3309 if (overload_debug)
6cb06a8c
TT
3310 gdb_printf (gdb_stderr, "Overload resolution "
3311 "champion is %d, ambiguous? %d\n",
3312 oload_champ, oload_ambiguous);
c906108c
SS
3313 }
3314
8d577d32
DC
3315 return oload_champ;
3316}
6b1ba9a0 3317
8d577d32
DC
3318/* Return 1 if we're looking at a static method, 0 if we're looking at
3319 a non-static method or a function that isn't a method. */
c906108c 3320
8d577d32 3321static int
2bca57ba 3322oload_method_static_p (struct fn_field *fns_ptr, int index)
8d577d32 3323{
2bca57ba 3324 if (fns_ptr && index >= 0 && TYPE_FN_FIELD_STATIC_P (fns_ptr, index))
8d577d32 3325 return 1;
c906108c 3326 else
8d577d32
DC
3327 return 0;
3328}
c906108c 3329
8d577d32
DC
3330/* Check how good an overload match OLOAD_CHAMP_BV represents. */
3331
3332static enum oload_classification
82ceee50 3333classify_oload_match (const badness_vector &oload_champ_bv,
8d577d32
DC
3334 int nargs,
3335 int static_offset)
3336{
3337 int ix;
da096638 3338 enum oload_classification worst = STANDARD;
8d577d32
DC
3339
3340 for (ix = 1; ix <= nargs - static_offset; ix++)
7f8c9282 3341 {
6403aeea 3342 /* If this conversion is as bad as INCOMPATIBLE_TYPE_BADNESS
dda83cd7 3343 or worse return INCOMPATIBLE. */
82ceee50 3344 if (compare_ranks (oload_champ_bv[ix],
dda83cd7 3345 INCOMPATIBLE_TYPE_BADNESS) <= 0)
ac3eeb49 3346 return INCOMPATIBLE; /* Truly mismatched types. */
6403aeea 3347 /* Otherwise If this conversion is as bad as
dda83cd7 3348 NS_POINTER_CONVERSION_BADNESS or worse return NON_STANDARD. */
82ceee50 3349 else if (compare_ranks (oload_champ_bv[ix],
dda83cd7 3350 NS_POINTER_CONVERSION_BADNESS) <= 0)
da096638 3351 worst = NON_STANDARD; /* Non-standard type conversions
ac3eeb49 3352 needed. */
7f8c9282 3353 }
02f0d45d 3354
da096638
KS
3355 /* If no INCOMPATIBLE classification was found, return the worst one
3356 that was found (if any). */
3357 return worst;
c906108c
SS
3358}
3359
ac3eeb49
MS
3360/* C++: return 1 is NAME is a legitimate name for the destructor of
3361 type TYPE. If TYPE does not have a destructor, or if NAME is
d8228535
JK
3362 inappropriate for TYPE, an error is signaled. Parameter TYPE should not yet
3363 have CHECK_TYPEDEF applied, this function will apply it itself. */
3364
c906108c 3365int
d8228535 3366destructor_name_p (const char *name, struct type *type)
c906108c 3367{
c906108c
SS
3368 if (name[0] == '~')
3369 {
a737d952 3370 const char *dname = type_name_or_error (type);
d8228535 3371 const char *cp = strchr (dname, '<');
c906108c
SS
3372 unsigned int len;
3373
3374 /* Do not compare the template part for template classes. */
3375 if (cp == NULL)
3376 len = strlen (dname);
3377 else
3378 len = cp - dname;
bf896cb0 3379 if (strlen (name + 1) != len || strncmp (dname, name + 1, len) != 0)
8a3fe4f8 3380 error (_("name of destructor must equal name of class"));
c906108c
SS
3381 else
3382 return 1;
3383 }
3384 return 0;
3385}
3386
3d567982
TT
3387/* Find an enum constant named NAME in TYPE. TYPE must be an "enum
3388 class". If the name is found, return a value representing it;
3389 otherwise throw an exception. */
3390
3391static struct value *
3392enum_constant_from_type (struct type *type, const char *name)
3393{
3394 int i;
3395 int name_len = strlen (name);
3396
78134374 3397 gdb_assert (type->code () == TYPE_CODE_ENUM
3bc440a2 3398 && type->is_declared_class ());
3d567982 3399
1f704f76 3400 for (i = TYPE_N_BASECLASSES (type); i < type->num_fields (); ++i)
3d567982 3401 {
33d16dd9 3402 const char *fname = type->field (i).name ();
3d567982
TT
3403 int len;
3404
2ad53ea1 3405 if (type->field (i).loc_kind () != FIELD_LOC_KIND_ENUMVAL
3d567982
TT
3406 || fname == NULL)
3407 continue;
3408
3409 /* Look for the trailing "::NAME", since enum class constant
3410 names are qualified here. */
3411 len = strlen (fname);
3412 if (len + 2 >= name_len
3413 && fname[len - name_len - 2] == ':'
3414 && fname[len - name_len - 1] == ':'
3415 && strcmp (&fname[len - name_len], name) == 0)
970db518 3416 return value_from_longest (type, type->field (i).loc_enumval ());
3d567982
TT
3417 }
3418
3419 error (_("no constant named \"%s\" in enum \"%s\""),
7d93a1e0 3420 name, type->name ());
3d567982
TT
3421}
3422
79c2c32d 3423/* C++: Given an aggregate type CURTYPE, and a member name NAME,
0d5de010
DJ
3424 return the appropriate member (or the address of the member, if
3425 WANT_ADDRESS). This function is used to resolve user expressions
3426 of the form "DOMAIN::NAME". For more details on what happens, see
3427 the comment before value_struct_elt_for_reference. */
79c2c32d
DC
3428
3429struct value *
c848d642 3430value_aggregate_elt (struct type *curtype, const char *name,
072bba3b 3431 struct type *expect_type, int want_address,
79c2c32d
DC
3432 enum noside noside)
3433{
78134374 3434 switch (curtype->code ())
79c2c32d
DC
3435 {
3436 case TYPE_CODE_STRUCT:
3437 case TYPE_CODE_UNION:
ac3eeb49 3438 return value_struct_elt_for_reference (curtype, 0, curtype,
072bba3b 3439 name, expect_type,
0d5de010 3440 want_address, noside);
79c2c32d 3441 case TYPE_CODE_NAMESPACE:
ac3eeb49
MS
3442 return value_namespace_elt (curtype, name,
3443 want_address, noside);
3d567982
TT
3444
3445 case TYPE_CODE_ENUM:
3446 return enum_constant_from_type (curtype, name);
3447
79c2c32d 3448 default:
f34652de 3449 internal_error (_("non-aggregate type in value_aggregate_elt"));
79c2c32d
DC
3450 }
3451}
3452
072bba3b 3453/* Compares the two method/function types T1 and T2 for "equality"
b021a221 3454 with respect to the methods' parameters. If the types of the
072bba3b
KS
3455 two parameter lists are the same, returns 1; 0 otherwise. This
3456 comparison may ignore any artificial parameters in T1 if
3457 SKIP_ARTIFICIAL is non-zero. This function will ALWAYS skip
3458 the first artificial parameter in T1, assumed to be a 'this' pointer.
3459
3460 The type T2 is expected to have come from make_params (in eval.c). */
3461
3462static int
3463compare_parameters (struct type *t1, struct type *t2, int skip_artificial)
3464{
3465 int start = 0;
3466
454977cd 3467 if (t1->num_fields () > 0 && t1->field (0).is_artificial ())
072bba3b
KS
3468 ++start;
3469
3470 /* If skipping artificial fields, find the first real field
581e13c1 3471 in T1. */
072bba3b
KS
3472 if (skip_artificial)
3473 {
1f704f76 3474 while (start < t1->num_fields ()
454977cd 3475 && t1->field (start).is_artificial ())
072bba3b
KS
3476 ++start;
3477 }
3478
581e13c1 3479 /* Now compare parameters. */
072bba3b
KS
3480
3481 /* Special case: a method taking void. T1 will contain no
3482 non-artificial fields, and T2 will contain TYPE_CODE_VOID. */
1f704f76 3483 if ((t1->num_fields () - start) == 0 && t2->num_fields () == 1
940da03e 3484 && t2->field (0).type ()->code () == TYPE_CODE_VOID)
072bba3b
KS
3485 return 1;
3486
1f704f76 3487 if ((t1->num_fields () - start) == t2->num_fields ())
072bba3b
KS
3488 {
3489 int i;
a109c7c1 3490
1f704f76 3491 for (i = 0; i < t2->num_fields (); ++i)
072bba3b 3492 {
940da03e
SM
3493 if (compare_ranks (rank_one_type (t1->field (start + i).type (),
3494 t2->field (i).type (), NULL),
dda83cd7 3495 EXACT_MATCH_BADNESS) != 0)
072bba3b
KS
3496 return 0;
3497 }
3498
3499 return 1;
3500 }
3501
3502 return 0;
3503}
3504
9f6b697b
WP
3505/* C++: Given an aggregate type VT, and a class type CLS, search
3506 recursively for CLS using value V; If found, store the offset
3507 which is either fetched from the virtual base pointer if CLS
3508 is virtual or accumulated offset of its parent classes if
3509 CLS is non-virtual in *BOFFS, set ISVIRT to indicate if CLS
3510 is virtual, and return true. If not found, return false. */
3511
3512static bool
3513get_baseclass_offset (struct type *vt, struct type *cls,
3514 struct value *v, int *boffs, bool *isvirt)
3515{
3516 for (int i = 0; i < TYPE_N_BASECLASSES (vt); i++)
3517 {
940da03e 3518 struct type *t = vt->field (i).type ();
9f6b697b 3519 if (types_equal (t, cls))
dda83cd7
SM
3520 {
3521 if (BASETYPE_VIA_VIRTUAL (vt, i))
3522 {
efaf1ae0 3523 const gdb_byte *adr = v->contents_for_printing ().data ();
76675c4d 3524 *boffs = baseclass_offset (vt, i, adr, v->offset (),
9f6b697b
WP
3525 value_as_long (v), v);
3526 *isvirt = true;
dda83cd7
SM
3527 }
3528 else
9f6b697b 3529 *isvirt = false;
dda83cd7
SM
3530 return true;
3531 }
9f6b697b
WP
3532
3533 if (get_baseclass_offset (check_typedef (t), cls, v, boffs, isvirt))
dda83cd7 3534 {
9f6b697b
WP
3535 if (*isvirt == false) /* Add non-virtual base offset. */
3536 {
efaf1ae0 3537 const gdb_byte *adr = v->contents_for_printing ().data ();
76675c4d 3538 *boffs += baseclass_offset (vt, i, adr, v->offset (),
9f6b697b
WP
3539 value_as_long (v), v);
3540 }
3541 return true;
3542 }
3543 }
3544
3545 return false;
3546}
3547
c906108c 3548/* C++: Given an aggregate type CURTYPE, and a member name NAME,
ac3eeb49
MS
3549 return the address of this member as a "pointer to member" type.
3550 If INTYPE is non-null, then it will be the type of the member we
3551 are looking for. This will help us resolve "pointers to member
3552 functions". This function is used to resolve user expressions of
3553 the form "DOMAIN::NAME". */
c906108c 3554
63d06c5c 3555static struct value *
fba45db2 3556value_struct_elt_for_reference (struct type *domain, int offset,
c848d642 3557 struct type *curtype, const char *name,
ac3eeb49
MS
3558 struct type *intype,
3559 int want_address,
63d06c5c 3560 enum noside noside)
c906108c 3561{
bf2977b5 3562 struct type *t = check_typedef (curtype);
52f0bd74 3563 int i;
b926417a 3564 struct value *result;
c906108c 3565
78134374
SM
3566 if (t->code () != TYPE_CODE_STRUCT
3567 && t->code () != TYPE_CODE_UNION)
3e43a32a
MS
3568 error (_("Internal error: non-aggregate type "
3569 "to value_struct_elt_for_reference"));
c906108c 3570
1f704f76 3571 for (i = t->num_fields () - 1; i >= TYPE_N_BASECLASSES (t); i--)
c906108c 3572 {
33d16dd9 3573 const char *t_field_name = t->field (i).name ();
c5aa993b 3574
6314a349 3575 if (t_field_name && strcmp (t_field_name, name) == 0)
c906108c 3576 {
c819a338 3577 if (t->field (i).is_static ())
c906108c 3578 {
b926417a 3579 struct value *v = value_static_field (t, i);
0d5de010
DJ
3580 if (want_address)
3581 v = value_addr (v);
c906108c
SS
3582 return v;
3583 }
8c329d5c 3584 if (t->field (i).is_packed ())
8a3fe4f8 3585 error (_("pointers to bitfield members not allowed"));
c5aa993b 3586
0d5de010
DJ
3587 if (want_address)
3588 return value_from_longest
940da03e 3589 (lookup_memberptr_type (t->field (i).type (), domain),
b610c045 3590 offset + (LONGEST) (t->field (i).loc_bitpos () >> 3));
f7e3ecae 3591 else if (noside != EVAL_NORMAL)
317c3ed9 3592 return value::allocate (t->field (i).type ());
0d5de010 3593 else
f7e3ecae
KS
3594 {
3595 /* Try to evaluate NAME as a qualified name with implicit
3596 this pointer. In this case, attempt to return the
3597 equivalent to `this->*(&TYPE::NAME)'. */
b926417a 3598 struct value *v = value_of_this_silent (current_language);
f7e3ecae
KS
3599 if (v != NULL)
3600 {
9f6b697b 3601 struct value *ptr, *this_v = v;
f7e3ecae
KS
3602 long mem_offset;
3603 struct type *type, *tmp;
3604
3605 ptr = value_aggregate_elt (domain, name, NULL, 1, noside);
d0c97917 3606 type = check_typedef (ptr->type ());
f7e3ecae 3607 gdb_assert (type != NULL
78134374 3608 && type->code () == TYPE_CODE_MEMBERPTR);
4bfb94b8 3609 tmp = lookup_pointer_type (TYPE_SELF_TYPE (type));
f7e3ecae
KS
3610 v = value_cast_pointers (tmp, v, 1);
3611 mem_offset = value_as_long (ptr);
9f6b697b
WP
3612 if (domain != curtype)
3613 {
3614 /* Find class offset of type CURTYPE from either its
3615 parent type DOMAIN or the type of implied this. */
3616 int boff = 0;
3617 bool isvirt = false;
3618 if (get_baseclass_offset (domain, curtype, v, &boff,
3619 &isvirt))
dda83cd7 3620 mem_offset += boff;
9f6b697b 3621 else
dda83cd7 3622 {
d0c97917 3623 struct type *p = check_typedef (this_v->type ());
27710edb 3624 p = check_typedef (p->target_type ());
dda83cd7 3625 if (get_baseclass_offset (p, curtype, this_v,
9f6b697b 3626 &boff, &isvirt))
dda83cd7
SM
3627 mem_offset += boff;
3628 }
9f6b697b 3629 }
27710edb 3630 tmp = lookup_pointer_type (type->target_type ());
f7e3ecae
KS
3631 result = value_from_pointer (tmp,
3632 value_as_long (v) + mem_offset);
3633 return value_ind (result);
3634 }
3635
3636 error (_("Cannot reference non-static field \"%s\""), name);
3637 }
c906108c
SS
3638 }
3639 }
3640
ac3eeb49
MS
3641 /* C++: If it was not found as a data field, then try to return it
3642 as a pointer to a method. */
c906108c 3643
c906108c 3644 /* Perform all necessary dereferencing. */
78134374 3645 while (intype && intype->code () == TYPE_CODE_PTR)
27710edb 3646 intype = intype->target_type ();
c906108c
SS
3647
3648 for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i)
3649 {
0d5cff50 3650 const char *t_field_name = TYPE_FN_FIELDLIST_NAME (t, i);
c906108c 3651
6314a349 3652 if (t_field_name && strcmp (t_field_name, name) == 0)
c906108c 3653 {
072bba3b
KS
3654 int j;
3655 int len = TYPE_FN_FIELDLIST_LENGTH (t, i);
c906108c 3656 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i);
c5aa993b 3657
de17c821
DJ
3658 check_stub_method_group (t, i);
3659
c906108c
SS
3660 if (intype)
3661 {
072bba3b
KS
3662 for (j = 0; j < len; ++j)
3663 {
3693fdb3
PA
3664 if (TYPE_CONST (intype) != TYPE_FN_FIELD_CONST (f, j))
3665 continue;
3666 if (TYPE_VOLATILE (intype) != TYPE_FN_FIELD_VOLATILE (f, j))
3667 continue;
3668
072bba3b 3669 if (compare_parameters (TYPE_FN_FIELD_TYPE (f, j), intype, 0)
3e43a32a
MS
3670 || compare_parameters (TYPE_FN_FIELD_TYPE (f, j),
3671 intype, 1))
072bba3b
KS
3672 break;
3673 }
3674
3675 if (j == len)
3e43a32a
MS
3676 error (_("no member function matches "
3677 "that type instantiation"));
7f79b1c5 3678 }
c906108c 3679 else
072bba3b
KS
3680 {
3681 int ii;
7f79b1c5
DJ
3682
3683 j = -1;
53832f31 3684 for (ii = 0; ii < len; ++ii)
072bba3b 3685 {
7f79b1c5
DJ
3686 /* Skip artificial methods. This is necessary if,
3687 for example, the user wants to "print
3688 subclass::subclass" with only one user-defined
53832f31
TT
3689 constructor. There is no ambiguity in this case.
3690 We are careful here to allow artificial methods
3691 if they are the unique result. */
072bba3b 3692 if (TYPE_FN_FIELD_ARTIFICIAL (f, ii))
53832f31
TT
3693 {
3694 if (j == -1)
3695 j = ii;
3696 continue;
3697 }
072bba3b 3698
7f79b1c5
DJ
3699 /* Desired method is ambiguous if more than one
3700 method is defined. */
53832f31 3701 if (j != -1 && !TYPE_FN_FIELD_ARTIFICIAL (f, j))
3e43a32a
MS
3702 error (_("non-unique member `%s' requires "
3703 "type instantiation"), name);
072bba3b 3704
7f79b1c5
DJ
3705 j = ii;
3706 }
53832f31
TT
3707
3708 if (j == -1)
3709 error (_("no matching member function"));
072bba3b 3710 }
c5aa993b 3711
0d5de010
DJ
3712 if (TYPE_FN_FIELD_STATIC_P (f, j))
3713 {
ac3eeb49
MS
3714 struct symbol *s =
3715 lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, j),
ccf41c24 3716 0, SEARCH_FUNCTION_DOMAIN, 0).symbol;
a109c7c1 3717
0d5de010
DJ
3718 if (s == NULL)
3719 return NULL;
3720
3721 if (want_address)
63e43d3a 3722 return value_addr (read_var_value (s, 0, 0));
0d5de010 3723 else
63e43d3a 3724 return read_var_value (s, 0, 0);
0d5de010
DJ
3725 }
3726
c906108c
SS
3727 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
3728 {
0d5de010
DJ
3729 if (want_address)
3730 {
317c3ed9 3731 result = value::allocate
0d5de010 3732 (lookup_methodptr_type (TYPE_FN_FIELD_TYPE (f, j)));
d0c97917 3733 cplus_make_method_ptr (result->type (),
bbe912ba 3734 result->contents_writeable ().data (),
0d5de010
DJ
3735 TYPE_FN_FIELD_VOFFSET (f, j), 1);
3736 }
3737 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
317c3ed9 3738 return value::allocate (TYPE_FN_FIELD_TYPE (f, j));
0d5de010
DJ
3739 else
3740 error (_("Cannot reference virtual member function \"%s\""),
3741 name);
c906108c
SS
3742 }
3743 else
3744 {
ac3eeb49
MS
3745 struct symbol *s =
3746 lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, j),
ccf41c24 3747 0, SEARCH_FUNCTION_DOMAIN, 0).symbol;
a109c7c1 3748
c906108c 3749 if (s == NULL)
0d5de010
DJ
3750 return NULL;
3751
b926417a 3752 struct value *v = read_var_value (s, 0, 0);
0d5de010
DJ
3753 if (!want_address)
3754 result = v;
c906108c
SS
3755 else
3756 {
317c3ed9 3757 result = value::allocate (lookup_methodptr_type (TYPE_FN_FIELD_TYPE (f, j)));
d0c97917 3758 cplus_make_method_ptr (result->type (),
bbe912ba 3759 result->contents_writeable ().data (),
9feb2d07 3760 v->address (), 0);
c906108c 3761 }
c906108c 3762 }
0d5de010 3763 return result;
c906108c
SS
3764 }
3765 }
3766 for (i = TYPE_N_BASECLASSES (t) - 1; i >= 0; i--)
3767 {
f23631e4 3768 struct value *v;
c906108c
SS
3769 int base_offset;
3770
3771 if (BASETYPE_VIA_VIRTUAL (t, i))
3772 base_offset = 0;
3773 else
3774 base_offset = TYPE_BASECLASS_BITPOS (t, i) / 8;
3775 v = value_struct_elt_for_reference (domain,
3776 offset + base_offset,
3777 TYPE_BASECLASS (t, i),
ac3eeb49
MS
3778 name, intype,
3779 want_address, noside);
c906108c
SS
3780 if (v)
3781 return v;
3782 }
63d06c5c
DC
3783
3784 /* As a last chance, pretend that CURTYPE is a namespace, and look
3785 it up that way; this (frequently) works for types nested inside
3786 classes. */
3787
ac3eeb49
MS
3788 return value_maybe_namespace_elt (curtype, name,
3789 want_address, noside);
c906108c
SS
3790}
3791
79c2c32d
DC
3792/* C++: Return the member NAME of the namespace given by the type
3793 CURTYPE. */
3794
3795static struct value *
3796value_namespace_elt (const struct type *curtype,
c848d642 3797 const char *name, int want_address,
79c2c32d 3798 enum noside noside)
63d06c5c
DC
3799{
3800 struct value *retval = value_maybe_namespace_elt (curtype, name,
ac3eeb49
MS
3801 want_address,
3802 noside);
63d06c5c
DC
3803
3804 if (retval == NULL)
ac3eeb49 3805 error (_("No symbol \"%s\" in namespace \"%s\"."),
7d93a1e0 3806 name, curtype->name ());
63d06c5c
DC
3807
3808 return retval;
3809}
3810
3811/* A helper function used by value_namespace_elt and
3812 value_struct_elt_for_reference. It looks up NAME inside the
3813 context CURTYPE; this works if CURTYPE is a namespace or if CURTYPE
3814 is a class and NAME refers to a type in CURTYPE itself (as opposed
3815 to, say, some base class of CURTYPE). */
3816
3817static struct value *
3818value_maybe_namespace_elt (const struct type *curtype,
c848d642 3819 const char *name, int want_address,
63d06c5c 3820 enum noside noside)
79c2c32d 3821{
7d93a1e0 3822 const char *namespace_name = curtype->name ();
d12307c1 3823 struct block_symbol sym;
0d5de010 3824 struct value *result;
79c2c32d 3825
13387711 3826 sym = cp_lookup_symbol_namespace (namespace_name, name,
ccf41c24 3827 get_selected_block (0), SEARCH_VFT);
41f62f39 3828
d12307c1 3829 if (sym.symbol == NULL)
63d06c5c 3830 return NULL;
79c2c32d 3831 else if ((noside == EVAL_AVOID_SIDE_EFFECTS)
66d7f48f 3832 && (sym.symbol->aclass () == LOC_TYPEDEF))
317c3ed9 3833 result = value::allocate (sym.symbol->type ());
79c2c32d 3834 else
d12307c1 3835 result = value_of_variable (sym.symbol, sym.block);
0d5de010 3836
ae6a105d 3837 if (want_address)
0d5de010
DJ
3838 result = value_addr (result);
3839
3840 return result;
79c2c32d
DC
3841}
3842
dfcee124 3843/* Given a pointer or a reference value V, find its real (RTTI) type.
ac3eeb49 3844
c906108c 3845 Other parameters FULL, TOP, USING_ENC as with value_rtti_type()
ac3eeb49 3846 and refer to the values computed for the object pointed to. */
c906108c
SS
3847
3848struct type *
dfcee124 3849value_rtti_indirect_type (struct value *v, int *full,
6b850546 3850 LONGEST *top, int *using_enc)
c906108c 3851{
f7e5394d 3852 struct value *target = NULL;
dfcee124
AG
3853 struct type *type, *real_type, *target_type;
3854
d0c97917 3855 type = v->type ();
dfcee124 3856 type = check_typedef (type);
aa006118 3857 if (TYPE_IS_REFERENCE (type))
dfcee124 3858 target = coerce_ref (v);
78134374 3859 else if (type->code () == TYPE_CODE_PTR)
f7e5394d 3860 {
f7e5394d 3861
a70b8144 3862 try
dda83cd7 3863 {
f7e5394d 3864 target = value_ind (v);
dda83cd7 3865 }
230d2906 3866 catch (const gdb_exception_error &except)
f7e5394d
SM
3867 {
3868 if (except.error == MEMORY_ERROR)
3869 {
3870 /* value_ind threw a memory error. The pointer is NULL or
dda83cd7
SM
3871 contains an uninitialized value: we can't determine any
3872 type. */
f7e5394d
SM
3873 return NULL;
3874 }
eedc3f4f 3875 throw;
f7e5394d
SM
3876 }
3877 }
dfcee124
AG
3878 else
3879 return NULL;
c906108c 3880
dfcee124
AG
3881 real_type = value_rtti_type (target, full, top, using_enc);
3882
3883 if (real_type)
3884 {
3885 /* Copy qualifiers to the referenced object. */
d0c97917 3886 target_type = target->type ();
dfcee124
AG
3887 real_type = make_cv_type (TYPE_CONST (target_type),
3888 TYPE_VOLATILE (target_type), real_type, NULL);
aa006118 3889 if (TYPE_IS_REFERENCE (type))
dda83cd7 3890 real_type = lookup_reference_type (real_type, type->code ());
78134374 3891 else if (type->code () == TYPE_CODE_PTR)
dda83cd7 3892 real_type = lookup_pointer_type (real_type);
dfcee124 3893 else
f34652de 3894 internal_error (_("Unexpected value type."));
dfcee124
AG
3895
3896 /* Copy qualifiers to the pointer/reference. */
3897 real_type = make_cv_type (TYPE_CONST (type), TYPE_VOLATILE (type),
3898 real_type, NULL);
3899 }
c906108c 3900
dfcee124 3901 return real_type;
c906108c
SS
3902}
3903
3904/* Given a value pointed to by ARGP, check its real run-time type, and
3905 if that is different from the enclosing type, create a new value
3906 using the real run-time type as the enclosing type (and of the same
3907 type as ARGP) and return it, with the embedded offset adjusted to
ac3eeb49
MS
3908 be the correct offset to the enclosed object. RTYPE is the type,
3909 and XFULL, XTOP, and XUSING_ENC are the other parameters, computed
3910 by value_rtti_type(). If these are available, they can be supplied
3911 and a second call to value_rtti_type() is avoided. (Pass RTYPE ==
3912 NULL if they're not available. */
c906108c 3913
f23631e4 3914struct value *
ac3eeb49
MS
3915value_full_object (struct value *argp,
3916 struct type *rtype,
3917 int xfull, int xtop,
fba45db2 3918 int xusing_enc)
c906108c 3919{
c5aa993b 3920 struct type *real_type;
c906108c 3921 int full = 0;
6b850546 3922 LONGEST top = -1;
c906108c 3923 int using_enc = 0;
f23631e4 3924 struct value *new_val;
c906108c
SS
3925
3926 if (rtype)
3927 {
3928 real_type = rtype;
3929 full = xfull;
3930 top = xtop;
3931 using_enc = xusing_enc;
3932 }
3933 else
3934 real_type = value_rtti_type (argp, &full, &top, &using_enc);
3935
ac3eeb49 3936 /* If no RTTI data, or if object is already complete, do nothing. */
463b870d 3937 if (!real_type || real_type == argp->enclosing_type ())
c906108c
SS
3938 return argp;
3939
a7860e76
TT
3940 /* In a destructor we might see a real type that is a superclass of
3941 the object's type. In this case it is better to leave the object
3942 as-is. */
3943 if (full
463b870d 3944 && real_type->length () < argp->enclosing_type ()->length ())
a7860e76
TT
3945 return argp;
3946
c906108c 3947 /* If we have the full object, but for some reason the enclosing
ac3eeb49
MS
3948 type is wrong, set it. */
3949 /* pai: FIXME -- sounds iffy */
c906108c
SS
3950 if (full)
3951 {
cda03344 3952 argp = argp->copy ();
463b870d 3953 argp->set_enclosing_type (real_type);
c906108c
SS
3954 return argp;
3955 }
3956
581e13c1 3957 /* Check if object is in memory. */
736355f2 3958 if (argp->lval () != lval_memory)
c906108c 3959 {
3e43a32a
MS
3960 warning (_("Couldn't retrieve complete object of RTTI "
3961 "type %s; object may be in register(s)."),
7d93a1e0 3962 real_type->name ());
c5aa993b 3963
c906108c
SS
3964 return argp;
3965 }
c5aa993b 3966
ac3eeb49
MS
3967 /* All other cases -- retrieve the complete object. */
3968 /* Go back by the computed top_offset from the beginning of the
3969 object, adjusting for the embedded offset of argp if that's what
3970 value_rtti_type used for its computation. */
9feb2d07 3971 new_val = value_at_lazy (real_type, argp->address () - top +
391f8628 3972 (using_enc ? 0 : argp->embedded_offset ()));
81ae560c 3973 new_val->deprecated_set_type (argp->type ());
391f8628
TT
3974 new_val->set_embedded_offset ((using_enc
3975 ? top + argp->embedded_offset ()
3976 : top));
c906108c
SS
3977 return new_val;
3978}
3979
389e51db 3980
85bc8cb7
JK
3981/* Return the value of the local variable, if one exists. Throw error
3982 otherwise, such as if the request is made in an inappropriate context. */
c906108c 3983
f23631e4 3984struct value *
85bc8cb7 3985value_of_this (const struct language_defn *lang)
c906108c 3986{
63e43d3a 3987 struct block_symbol sym;
3977b71f 3988 const struct block *b;
bd2b40ac 3989 frame_info_ptr frame;
c906108c 3990
5bae7c4e 3991 if (lang->name_of_this () == NULL)
85bc8cb7 3992 error (_("no `this' in current language"));
aee28ec6 3993
85bc8cb7 3994 frame = get_selected_frame (_("no frame selected"));
c906108c 3995
66a17cb6 3996 b = get_frame_block (frame, NULL);
c906108c 3997
63e43d3a
PMR
3998 sym = lookup_language_this (lang, b);
3999 if (sym.symbol == NULL)
85bc8cb7 4000 error (_("current stack frame does not contain a variable named `%s'"),
5bae7c4e 4001 lang->name_of_this ());
85bc8cb7 4002
63e43d3a 4003 return read_var_value (sym.symbol, sym.block, frame);
85bc8cb7
JK
4004}
4005
4006/* Return the value of the local variable, if one exists. Return NULL
4007 otherwise. Never throw error. */
4008
4009struct value *
4010value_of_this_silent (const struct language_defn *lang)
4011{
4012 struct value *ret = NULL;
85bc8cb7 4013
a70b8144 4014 try
c906108c 4015 {
85bc8cb7 4016 ret = value_of_this (lang);
c906108c 4017 }
230d2906 4018 catch (const gdb_exception_error &except)
492d29ea
PA
4019 {
4020 }
c906108c 4021
d069f99d
AF
4022 return ret;
4023}
4024
ac3eeb49
MS
4025/* Create a slice (sub-string, sub-array) of ARRAY, that is LENGTH
4026 elements long, starting at LOWBOUND. The result has the same lower
4027 bound as the original ARRAY. */
c906108c 4028
f23631e4
AC
4029struct value *
4030value_slice (struct value *array, int lowbound, int length)
c906108c
SS
4031{
4032 struct type *slice_range_type, *slice_type, *range_type;
7a67d0fe 4033 LONGEST lowerbound, upperbound;
f23631e4 4034 struct value *slice;
c906108c 4035 struct type *array_type;
ac3eeb49 4036
d0c97917 4037 array_type = check_typedef (array->type ());
78134374
SM
4038 if (array_type->code () != TYPE_CODE_ARRAY
4039 && array_type->code () != TYPE_CODE_STRING)
8a3fe4f8 4040 error (_("cannot take slice of non-array"));
ac3eeb49 4041
a7067863
AB
4042 if (type_not_allocated (array_type))
4043 error (_("array not allocated"));
4044 if (type_not_associated (array_type))
4045 error (_("array not associated"));
4046
3d967001 4047 range_type = array_type->index_type ();
1f8d2881 4048 if (!get_discrete_bounds (range_type, &lowerbound, &upperbound))
8a3fe4f8 4049 error (_("slice from bad array or bitstring"));
ac3eeb49 4050
c906108c 4051 if (lowbound < lowerbound || length < 0
db034ac5 4052 || lowbound + length - 1 > upperbound)
8a3fe4f8 4053 error (_("slice out of range"));
ac3eeb49 4054
c906108c
SS
4055 /* FIXME-type-allocation: need a way to free this type when we are
4056 done with it. */
e727c536
TT
4057 type_allocator alloc (range_type->target_type ());
4058 slice_range_type = create_static_range_type (alloc,
27710edb 4059 range_type->target_type (),
0c9c3474
SA
4060 lowbound,
4061 lowbound + length - 1);
ac3eeb49 4062
a7c88acd 4063 {
27710edb 4064 struct type *element_type = array_type->target_type ();
a7c88acd 4065 LONGEST offset
df86565b 4066 = (lowbound - lowerbound) * check_typedef (element_type)->length ();
ac3eeb49 4067
9e76b17a 4068 slice_type = create_array_type (alloc,
a7c88acd
JB
4069 element_type,
4070 slice_range_type);
78134374 4071 slice_type->set_code (array_type->code ());
ac3eeb49 4072
736355f2 4073 if (array->lval () == lval_memory && array->lazy ())
cbe793af 4074 slice = value::allocate_lazy (slice_type);
a7c88acd
JB
4075 else
4076 {
317c3ed9 4077 slice = value::allocate (slice_type);
6c49729e
TT
4078 array->contents_copy (slice, 0, offset,
4079 type_length_units (slice_type));
a7c88acd
JB
4080 }
4081
8181b7b6 4082 slice->set_component_location (array);
76675c4d 4083 slice->set_offset (array->offset () + offset);
a7c88acd 4084 }
ac3eeb49 4085
c906108c
SS
4086 return slice;
4087}
4088
6b4a335b 4089/* See value.h. */
c906108c 4090
f23631e4 4091struct value *
6b4a335b 4092value_literal_complex (struct value *arg1,
ac3eeb49
MS
4093 struct value *arg2,
4094 struct type *type)
c906108c 4095{
f23631e4 4096 struct value *val;
27710edb 4097 struct type *real_type = type->target_type ();
c906108c 4098
317c3ed9 4099 val = value::allocate (type);
c906108c
SS
4100 arg1 = value_cast (real_type, arg1);
4101 arg2 = value_cast (real_type, arg2);
4102
df86565b 4103 int len = real_type->length ();
4bce7cda 4104
efaf1ae0 4105 copy (arg1->contents (),
bbe912ba 4106 val->contents_raw ().slice (0, len));
efaf1ae0 4107 copy (arg2->contents (),
bbe912ba 4108 val->contents_raw ().slice (len, len));
4bce7cda 4109
c906108c
SS
4110 return val;
4111}
4112
4c99290d
TT
4113/* See value.h. */
4114
4115struct value *
4116value_real_part (struct value *value)
4117{
d0c97917 4118 struct type *type = check_typedef (value->type ());
27710edb 4119 struct type *ttype = type->target_type ();
4c99290d 4120
78134374 4121 gdb_assert (type->code () == TYPE_CODE_COMPLEX);
4c99290d
TT
4122 return value_from_component (value, ttype, 0);
4123}
4124
4125/* See value.h. */
4126
4127struct value *
4128value_imaginary_part (struct value *value)
4129{
d0c97917 4130 struct type *type = check_typedef (value->type ());
27710edb 4131 struct type *ttype = type->target_type ();
4c99290d 4132
78134374 4133 gdb_assert (type->code () == TYPE_CODE_COMPLEX);
4c99290d 4134 return value_from_component (value, ttype,
df86565b 4135 check_typedef (ttype)->length ());
4c99290d
TT
4136}
4137
ac3eeb49 4138/* Cast a value into the appropriate complex data type. */
c906108c 4139
f23631e4
AC
4140static struct value *
4141cast_into_complex (struct type *type, struct value *val)
c906108c 4142{
27710edb 4143 struct type *real_type = type->target_type ();
ac3eeb49 4144
d0c97917 4145 if (val->type ()->code () == TYPE_CODE_COMPLEX)
c906108c 4146 {
d0c97917 4147 struct type *val_real_type = val->type ()->target_type ();
317c3ed9
TT
4148 struct value *re_val = value::allocate (val_real_type);
4149 struct value *im_val = value::allocate (val_real_type);
df86565b 4150 int len = val_real_type->length ();
c906108c 4151
efaf1ae0 4152 copy (val->contents ().slice (0, len),
bbe912ba 4153 re_val->contents_raw ());
efaf1ae0 4154 copy (val->contents ().slice (len, len),
bbe912ba 4155 im_val->contents_raw ());
c906108c
SS
4156
4157 return value_literal_complex (re_val, im_val, type);
4158 }
d0c97917
TT
4159 else if (val->type ()->code () == TYPE_CODE_FLT
4160 || val->type ()->code () == TYPE_CODE_INT)
ac3eeb49 4161 return value_literal_complex (val,
ee7bb294 4162 value::zero (real_type, not_lval),
ac3eeb49 4163 type);
c906108c 4164 else
8a3fe4f8 4165 error (_("cannot cast non-number to complex"));
c906108c
SS
4166}
4167
6c265988 4168void _initialize_valops ();
c906108c 4169void
6c265988 4170_initialize_valops ()
c906108c 4171{
5bf193a2
AC
4172 add_setshow_boolean_cmd ("overload-resolution", class_support,
4173 &overload_resolution, _("\
4174Set overload resolution in evaluating C++ functions."), _("\
ac3eeb49
MS
4175Show overload resolution in evaluating C++ functions."),
4176 NULL, NULL,
920d2a44 4177 show_overload_resolution,
5bf193a2 4178 &setlist, &showlist);
c906108c 4179 overload_resolution = 1;
c906108c 4180}