gdb: split get_discrete_bounds in two
[deliverable/binutils-gdb.git] / gdb / gdbtypes.c
CommitLineData
c906108c 1/* Support routines for manipulating internal types for GDB.
4f2aea11 2
b811d2c2 3 Copyright (C) 1992-2020 Free Software Foundation, Inc.
4f2aea11 4
c906108c
SS
5 Contributed by Cygnus Support, using pieces from other GDB modules.
6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
c906108c
SS
23#include "bfd.h"
24#include "symtab.h"
25#include "symfile.h"
26#include "objfiles.h"
27#include "gdbtypes.h"
28#include "expression.h"
29#include "language.h"
30#include "target.h"
31#include "value.h"
32#include "demangle.h"
33#include "complaints.h"
34#include "gdbcmd.h"
015a42b4 35#include "cp-abi.h"
ae5a43e0 36#include "hashtab.h"
8de20a37 37#include "cp-support.h"
ca092b61 38#include "bcache.h"
82ca8957 39#include "dwarf2/loc.h"
80180f79 40#include "gdbcore.h"
1841ee5d 41#include "floatformat.h"
a5c641b5 42#include "f-lang.h"
ef83a141 43#include <algorithm>
09584414 44#include "gmp-utils.h"
ac3aafc7 45
6403aeea
SW
46/* Initialize BADNESS constants. */
47
a9d5ef47 48const struct rank LENGTH_MISMATCH_BADNESS = {100,0};
6403aeea 49
a9d5ef47
SW
50const struct rank TOO_FEW_PARAMS_BADNESS = {100,0};
51const struct rank INCOMPATIBLE_TYPE_BADNESS = {100,0};
6403aeea 52
a9d5ef47 53const struct rank EXACT_MATCH_BADNESS = {0,0};
6403aeea 54
a9d5ef47
SW
55const struct rank INTEGER_PROMOTION_BADNESS = {1,0};
56const struct rank FLOAT_PROMOTION_BADNESS = {1,0};
57const struct rank BASE_PTR_CONVERSION_BADNESS = {1,0};
e15c3eb4 58const struct rank CV_CONVERSION_BADNESS = {1, 0};
a9d5ef47
SW
59const struct rank INTEGER_CONVERSION_BADNESS = {2,0};
60const struct rank FLOAT_CONVERSION_BADNESS = {2,0};
61const struct rank INT_FLOAT_CONVERSION_BADNESS = {2,0};
62const struct rank VOID_PTR_CONVERSION_BADNESS = {2,0};
5b4f6e25 63const struct rank BOOL_CONVERSION_BADNESS = {3,0};
a9d5ef47
SW
64const struct rank BASE_CONVERSION_BADNESS = {2,0};
65const struct rank REFERENCE_CONVERSION_BADNESS = {2,0};
06acc08f 66const struct rank REFERENCE_SEE_THROUGH_BADNESS = {0,1};
da096638 67const struct rank NULL_POINTER_CONVERSION_BADNESS = {2,0};
a9d5ef47 68const struct rank NS_POINTER_CONVERSION_BADNESS = {10,0};
a451cb65 69const struct rank NS_INTEGER_POINTER_CONVERSION_BADNESS = {3,0};
6403aeea 70
8da61cc4 71/* Floatformat pairs. */
f9e9243a
UW
72const struct floatformat *floatformats_ieee_half[BFD_ENDIAN_UNKNOWN] = {
73 &floatformat_ieee_half_big,
74 &floatformat_ieee_half_little
75};
8da61cc4
DJ
76const struct floatformat *floatformats_ieee_single[BFD_ENDIAN_UNKNOWN] = {
77 &floatformat_ieee_single_big,
78 &floatformat_ieee_single_little
79};
80const struct floatformat *floatformats_ieee_double[BFD_ENDIAN_UNKNOWN] = {
81 &floatformat_ieee_double_big,
82 &floatformat_ieee_double_little
83};
84const struct floatformat *floatformats_ieee_double_littlebyte_bigword[BFD_ENDIAN_UNKNOWN] = {
85 &floatformat_ieee_double_big,
86 &floatformat_ieee_double_littlebyte_bigword
87};
88const struct floatformat *floatformats_i387_ext[BFD_ENDIAN_UNKNOWN] = {
89 &floatformat_i387_ext,
90 &floatformat_i387_ext
91};
92const struct floatformat *floatformats_m68881_ext[BFD_ENDIAN_UNKNOWN] = {
93 &floatformat_m68881_ext,
94 &floatformat_m68881_ext
95};
96const struct floatformat *floatformats_arm_ext[BFD_ENDIAN_UNKNOWN] = {
97 &floatformat_arm_ext_big,
98 &floatformat_arm_ext_littlebyte_bigword
99};
100const struct floatformat *floatformats_ia64_spill[BFD_ENDIAN_UNKNOWN] = {
101 &floatformat_ia64_spill_big,
102 &floatformat_ia64_spill_little
103};
104const struct floatformat *floatformats_ia64_quad[BFD_ENDIAN_UNKNOWN] = {
105 &floatformat_ia64_quad_big,
106 &floatformat_ia64_quad_little
107};
108const struct floatformat *floatformats_vax_f[BFD_ENDIAN_UNKNOWN] = {
109 &floatformat_vax_f,
110 &floatformat_vax_f
111};
112const struct floatformat *floatformats_vax_d[BFD_ENDIAN_UNKNOWN] = {
113 &floatformat_vax_d,
114 &floatformat_vax_d
115};
b14d30e1 116const struct floatformat *floatformats_ibm_long_double[BFD_ENDIAN_UNKNOWN] = {
f5aee5ee
AM
117 &floatformat_ibm_long_double_big,
118 &floatformat_ibm_long_double_little
b14d30e1 119};
2a67f09d
FW
120const struct floatformat *floatformats_bfloat16[BFD_ENDIAN_UNKNOWN] = {
121 &floatformat_bfloat16_big,
122 &floatformat_bfloat16_little
123};
8da61cc4 124
2873700e
KS
125/* Should opaque types be resolved? */
126
491144b5 127static bool opaque_type_resolution = true;
2873700e 128
79bb1944 129/* See gdbtypes.h. */
2873700e
KS
130
131unsigned int overload_debug = 0;
132
a451cb65
KS
133/* A flag to enable strict type checking. */
134
491144b5 135static bool strict_type_checking = true;
a451cb65 136
2873700e 137/* A function to show whether opaque types are resolved. */
5212577a 138
920d2a44
AC
139static void
140show_opaque_type_resolution (struct ui_file *file, int from_tty,
7ba81444
MS
141 struct cmd_list_element *c,
142 const char *value)
920d2a44 143{
3e43a32a
MS
144 fprintf_filtered (file, _("Resolution of opaque struct/class/union types "
145 "(if set before loading symbols) is %s.\n"),
920d2a44
AC
146 value);
147}
148
2873700e 149/* A function to show whether C++ overload debugging is enabled. */
5212577a 150
920d2a44
AC
151static void
152show_overload_debug (struct ui_file *file, int from_tty,
153 struct cmd_list_element *c, const char *value)
154{
7ba81444
MS
155 fprintf_filtered (file, _("Debugging of C++ overloading is %s.\n"),
156 value);
920d2a44 157}
c906108c 158
a451cb65
KS
159/* A function to show the status of strict type checking. */
160
161static void
162show_strict_type_checking (struct ui_file *file, int from_tty,
163 struct cmd_list_element *c, const char *value)
164{
165 fprintf_filtered (file, _("Strict type checking is %s.\n"), value);
166}
167
5212577a 168\f
e9bb382b
UW
169/* Allocate a new OBJFILE-associated type structure and fill it
170 with some defaults. Space for the type structure is allocated
171 on the objfile's objfile_obstack. */
c906108c
SS
172
173struct type *
fba45db2 174alloc_type (struct objfile *objfile)
c906108c 175{
52f0bd74 176 struct type *type;
c906108c 177
e9bb382b
UW
178 gdb_assert (objfile != NULL);
179
7ba81444 180 /* Alloc the structure and start off with all fields zeroed. */
e9bb382b
UW
181 type = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct type);
182 TYPE_MAIN_TYPE (type) = OBSTACK_ZALLOC (&objfile->objfile_obstack,
183 struct main_type);
184 OBJSTAT (objfile, n_types++);
c906108c 185
e9bb382b
UW
186 TYPE_OBJFILE_OWNED (type) = 1;
187 TYPE_OWNER (type).objfile = objfile;
c906108c 188
7ba81444 189 /* Initialize the fields that might not be zero. */
c906108c 190
67607e24 191 type->set_code (TYPE_CODE_UNDEF);
2fdde8f8 192 TYPE_CHAIN (type) = type; /* Chain back to itself. */
c906108c 193
c16abbde 194 return type;
c906108c
SS
195}
196
e9bb382b
UW
197/* Allocate a new GDBARCH-associated type structure and fill it
198 with some defaults. Space for the type structure is allocated
8f57eec2 199 on the obstack associated with GDBARCH. */
e9bb382b
UW
200
201struct type *
202alloc_type_arch (struct gdbarch *gdbarch)
203{
204 struct type *type;
205
206 gdb_assert (gdbarch != NULL);
207
208 /* Alloc the structure and start off with all fields zeroed. */
209
8f57eec2
PP
210 type = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct type);
211 TYPE_MAIN_TYPE (type) = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct main_type);
e9bb382b
UW
212
213 TYPE_OBJFILE_OWNED (type) = 0;
214 TYPE_OWNER (type).gdbarch = gdbarch;
215
216 /* Initialize the fields that might not be zero. */
217
67607e24 218 type->set_code (TYPE_CODE_UNDEF);
e9bb382b
UW
219 TYPE_CHAIN (type) = type; /* Chain back to itself. */
220
221 return type;
222}
223
224/* If TYPE is objfile-associated, allocate a new type structure
225 associated with the same objfile. If TYPE is gdbarch-associated,
226 allocate a new type structure associated with the same gdbarch. */
227
228struct type *
229alloc_type_copy (const struct type *type)
230{
231 if (TYPE_OBJFILE_OWNED (type))
232 return alloc_type (TYPE_OWNER (type).objfile);
233 else
234 return alloc_type_arch (TYPE_OWNER (type).gdbarch);
235}
236
237/* If TYPE is gdbarch-associated, return that architecture.
238 If TYPE is objfile-associated, return that objfile's architecture. */
239
240struct gdbarch *
241get_type_arch (const struct type *type)
242{
2fabdf33
AB
243 struct gdbarch *arch;
244
e9bb382b 245 if (TYPE_OBJFILE_OWNED (type))
08feed99 246 arch = TYPE_OWNER (type).objfile->arch ();
e9bb382b 247 else
2fabdf33
AB
248 arch = TYPE_OWNER (type).gdbarch;
249
250 /* The ARCH can be NULL if TYPE is associated with neither an objfile nor
251 a gdbarch, however, this is very rare, and even then, in most cases
252 that get_type_arch is called, we assume that a non-NULL value is
253 returned. */
254 gdb_assert (arch != NULL);
255 return arch;
e9bb382b
UW
256}
257
99ad9427
YQ
258/* See gdbtypes.h. */
259
260struct type *
261get_target_type (struct type *type)
262{
263 if (type != NULL)
264 {
265 type = TYPE_TARGET_TYPE (type);
266 if (type != NULL)
267 type = check_typedef (type);
268 }
269
270 return type;
271}
272
2e056931
SM
273/* See gdbtypes.h. */
274
275unsigned int
276type_length_units (struct type *type)
277{
278 struct gdbarch *arch = get_type_arch (type);
279 int unit_size = gdbarch_addressable_memory_unit_size (arch);
280
281 return TYPE_LENGTH (type) / unit_size;
282}
283
2fdde8f8
DJ
284/* Alloc a new type instance structure, fill it with some defaults,
285 and point it at OLDTYPE. Allocate the new type instance from the
286 same place as OLDTYPE. */
287
288static struct type *
289alloc_type_instance (struct type *oldtype)
290{
291 struct type *type;
292
293 /* Allocate the structure. */
294
e9bb382b 295 if (! TYPE_OBJFILE_OWNED (oldtype))
2fabdf33 296 type = GDBARCH_OBSTACK_ZALLOC (get_type_arch (oldtype), struct type);
2fdde8f8 297 else
1deafd4e
PA
298 type = OBSTACK_ZALLOC (&TYPE_OBJFILE (oldtype)->objfile_obstack,
299 struct type);
300
2fdde8f8
DJ
301 TYPE_MAIN_TYPE (type) = TYPE_MAIN_TYPE (oldtype);
302
303 TYPE_CHAIN (type) = type; /* Chain back to itself for now. */
304
c16abbde 305 return type;
2fdde8f8
DJ
306}
307
308/* Clear all remnants of the previous type at TYPE, in preparation for
e9bb382b 309 replacing it with something else. Preserve owner information. */
5212577a 310
2fdde8f8
DJ
311static void
312smash_type (struct type *type)
313{
e9bb382b
UW
314 int objfile_owned = TYPE_OBJFILE_OWNED (type);
315 union type_owner owner = TYPE_OWNER (type);
316
2fdde8f8
DJ
317 memset (TYPE_MAIN_TYPE (type), 0, sizeof (struct main_type));
318
e9bb382b
UW
319 /* Restore owner information. */
320 TYPE_OBJFILE_OWNED (type) = objfile_owned;
321 TYPE_OWNER (type) = owner;
322
2fdde8f8
DJ
323 /* For now, delete the rings. */
324 TYPE_CHAIN (type) = type;
325
326 /* For now, leave the pointer/reference types alone. */
327}
328
c906108c
SS
329/* Lookup a pointer to a type TYPE. TYPEPTR, if nonzero, points
330 to a pointer to memory where the pointer type should be stored.
331 If *TYPEPTR is zero, update it to point to the pointer type we return.
332 We allocate new memory if needed. */
333
334struct type *
fba45db2 335make_pointer_type (struct type *type, struct type **typeptr)
c906108c 336{
52f0bd74 337 struct type *ntype; /* New type */
053cb41b 338 struct type *chain;
c906108c
SS
339
340 ntype = TYPE_POINTER_TYPE (type);
341
c5aa993b 342 if (ntype)
c906108c 343 {
c5aa993b 344 if (typeptr == 0)
7ba81444
MS
345 return ntype; /* Don't care about alloc,
346 and have new type. */
c906108c 347 else if (*typeptr == 0)
c5aa993b 348 {
7ba81444 349 *typeptr = ntype; /* Tracking alloc, and have new type. */
c906108c 350 return ntype;
c5aa993b 351 }
c906108c
SS
352 }
353
354 if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */
355 {
e9bb382b 356 ntype = alloc_type_copy (type);
c906108c
SS
357 if (typeptr)
358 *typeptr = ntype;
359 }
7ba81444 360 else /* We have storage, but need to reset it. */
c906108c
SS
361 {
362 ntype = *typeptr;
053cb41b 363 chain = TYPE_CHAIN (ntype);
2fdde8f8 364 smash_type (ntype);
053cb41b 365 TYPE_CHAIN (ntype) = chain;
c906108c
SS
366 }
367
368 TYPE_TARGET_TYPE (ntype) = type;
369 TYPE_POINTER_TYPE (type) = ntype;
370
5212577a 371 /* FIXME! Assumes the machine has only one representation for pointers! */
c906108c 372
50810684
UW
373 TYPE_LENGTH (ntype)
374 = gdbarch_ptr_bit (get_type_arch (type)) / TARGET_CHAR_BIT;
67607e24 375 ntype->set_code (TYPE_CODE_PTR);
c906108c 376
67b2adb2 377 /* Mark pointers as unsigned. The target converts between pointers
76e71323 378 and addresses (CORE_ADDRs) using gdbarch_pointer_to_address and
7ba81444 379 gdbarch_address_to_pointer. */
653223d3 380 ntype->set_is_unsigned (true);
c5aa993b 381
053cb41b
JB
382 /* Update the length of all the other variants of this type. */
383 chain = TYPE_CHAIN (ntype);
384 while (chain != ntype)
385 {
386 TYPE_LENGTH (chain) = TYPE_LENGTH (ntype);
387 chain = TYPE_CHAIN (chain);
388 }
389
c906108c
SS
390 return ntype;
391}
392
393/* Given a type TYPE, return a type of pointers to that type.
394 May need to construct such a type if this is the first use. */
395
396struct type *
fba45db2 397lookup_pointer_type (struct type *type)
c906108c 398{
c5aa993b 399 return make_pointer_type (type, (struct type **) 0);
c906108c
SS
400}
401
7ba81444
MS
402/* Lookup a C++ `reference' to a type TYPE. TYPEPTR, if nonzero,
403 points to a pointer to memory where the reference type should be
404 stored. If *TYPEPTR is zero, update it to point to the reference
3b224330
AV
405 type we return. We allocate new memory if needed. REFCODE denotes
406 the kind of reference type to lookup (lvalue or rvalue reference). */
c906108c
SS
407
408struct type *
3b224330 409make_reference_type (struct type *type, struct type **typeptr,
dda83cd7 410 enum type_code refcode)
c906108c 411{
52f0bd74 412 struct type *ntype; /* New type */
3b224330 413 struct type **reftype;
1e98b326 414 struct type *chain;
c906108c 415
3b224330
AV
416 gdb_assert (refcode == TYPE_CODE_REF || refcode == TYPE_CODE_RVALUE_REF);
417
418 ntype = (refcode == TYPE_CODE_REF ? TYPE_REFERENCE_TYPE (type)
dda83cd7 419 : TYPE_RVALUE_REFERENCE_TYPE (type));
c906108c 420
c5aa993b 421 if (ntype)
c906108c 422 {
c5aa993b 423 if (typeptr == 0)
7ba81444
MS
424 return ntype; /* Don't care about alloc,
425 and have new type. */
c906108c 426 else if (*typeptr == 0)
c5aa993b 427 {
7ba81444 428 *typeptr = ntype; /* Tracking alloc, and have new type. */
c906108c 429 return ntype;
c5aa993b 430 }
c906108c
SS
431 }
432
433 if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */
434 {
e9bb382b 435 ntype = alloc_type_copy (type);
c906108c
SS
436 if (typeptr)
437 *typeptr = ntype;
438 }
7ba81444 439 else /* We have storage, but need to reset it. */
c906108c
SS
440 {
441 ntype = *typeptr;
1e98b326 442 chain = TYPE_CHAIN (ntype);
2fdde8f8 443 smash_type (ntype);
1e98b326 444 TYPE_CHAIN (ntype) = chain;
c906108c
SS
445 }
446
447 TYPE_TARGET_TYPE (ntype) = type;
3b224330 448 reftype = (refcode == TYPE_CODE_REF ? &TYPE_REFERENCE_TYPE (type)
dda83cd7 449 : &TYPE_RVALUE_REFERENCE_TYPE (type));
3b224330
AV
450
451 *reftype = ntype;
c906108c 452
7ba81444
MS
453 /* FIXME! Assume the machine has only one representation for
454 references, and that it matches the (only) representation for
455 pointers! */
c906108c 456
50810684
UW
457 TYPE_LENGTH (ntype) =
458 gdbarch_ptr_bit (get_type_arch (type)) / TARGET_CHAR_BIT;
67607e24 459 ntype->set_code (refcode);
c5aa993b 460
3b224330 461 *reftype = ntype;
c906108c 462
1e98b326
JB
463 /* Update the length of all the other variants of this type. */
464 chain = TYPE_CHAIN (ntype);
465 while (chain != ntype)
466 {
467 TYPE_LENGTH (chain) = TYPE_LENGTH (ntype);
468 chain = TYPE_CHAIN (chain);
469 }
470
c906108c
SS
471 return ntype;
472}
473
7ba81444
MS
474/* Same as above, but caller doesn't care about memory allocation
475 details. */
c906108c
SS
476
477struct type *
3b224330
AV
478lookup_reference_type (struct type *type, enum type_code refcode)
479{
480 return make_reference_type (type, (struct type **) 0, refcode);
481}
482
483/* Lookup the lvalue reference type for the type TYPE. */
484
485struct type *
486lookup_lvalue_reference_type (struct type *type)
487{
488 return lookup_reference_type (type, TYPE_CODE_REF);
489}
490
491/* Lookup the rvalue reference type for the type TYPE. */
492
493struct type *
494lookup_rvalue_reference_type (struct type *type)
c906108c 495{
3b224330 496 return lookup_reference_type (type, TYPE_CODE_RVALUE_REF);
c906108c
SS
497}
498
7ba81444
MS
499/* Lookup a function type that returns type TYPE. TYPEPTR, if
500 nonzero, points to a pointer to memory where the function type
501 should be stored. If *TYPEPTR is zero, update it to point to the
0c8b41f1 502 function type we return. We allocate new memory if needed. */
c906108c
SS
503
504struct type *
0c8b41f1 505make_function_type (struct type *type, struct type **typeptr)
c906108c 506{
52f0bd74 507 struct type *ntype; /* New type */
c906108c
SS
508
509 if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */
510 {
e9bb382b 511 ntype = alloc_type_copy (type);
c906108c
SS
512 if (typeptr)
513 *typeptr = ntype;
514 }
7ba81444 515 else /* We have storage, but need to reset it. */
c906108c
SS
516 {
517 ntype = *typeptr;
2fdde8f8 518 smash_type (ntype);
c906108c
SS
519 }
520
521 TYPE_TARGET_TYPE (ntype) = type;
522
523 TYPE_LENGTH (ntype) = 1;
67607e24 524 ntype->set_code (TYPE_CODE_FUNC);
c5aa993b 525
b6cdc2c1
JK
526 INIT_FUNC_SPECIFIC (ntype);
527
c906108c
SS
528 return ntype;
529}
530
c906108c
SS
531/* Given a type TYPE, return a type of functions that return that type.
532 May need to construct such a type if this is the first use. */
533
534struct type *
fba45db2 535lookup_function_type (struct type *type)
c906108c 536{
0c8b41f1 537 return make_function_type (type, (struct type **) 0);
c906108c
SS
538}
539
71918a86 540/* Given a type TYPE and argument types, return the appropriate
a6fb9c08
TT
541 function type. If the final type in PARAM_TYPES is NULL, make a
542 varargs function. */
71918a86
TT
543
544struct type *
545lookup_function_type_with_arguments (struct type *type,
546 int nparams,
547 struct type **param_types)
548{
549 struct type *fn = make_function_type (type, (struct type **) 0);
550 int i;
551
e314d629 552 if (nparams > 0)
a6fb9c08 553 {
e314d629
TT
554 if (param_types[nparams - 1] == NULL)
555 {
556 --nparams;
1d6286ed 557 fn->set_has_varargs (true);
e314d629 558 }
78134374 559 else if (check_typedef (param_types[nparams - 1])->code ()
e314d629
TT
560 == TYPE_CODE_VOID)
561 {
562 --nparams;
563 /* Caller should have ensured this. */
564 gdb_assert (nparams == 0);
27e69b7a 565 fn->set_is_prototyped (true);
e314d629 566 }
54990598 567 else
27e69b7a 568 fn->set_is_prototyped (true);
a6fb9c08
TT
569 }
570
5e33d5f4 571 fn->set_num_fields (nparams);
3cabb6b0
SM
572 fn->set_fields
573 ((struct field *) TYPE_ZALLOC (fn, nparams * sizeof (struct field)));
71918a86 574 for (i = 0; i < nparams; ++i)
5d14b6e5 575 fn->field (i).set_type (param_types[i]);
71918a86
TT
576
577 return fn;
578}
579
69896a2c
PA
580/* Identify address space identifier by name -- return a
581 type_instance_flags. */
5212577a 582
314ad88d 583type_instance_flags
69896a2c
PA
584address_space_name_to_type_instance_flags (struct gdbarch *gdbarch,
585 const char *space_identifier)
47663de5 586{
314ad88d 587 type_instance_flags type_flags;
d8734c88 588
7ba81444 589 /* Check for known address space delimiters. */
47663de5 590 if (!strcmp (space_identifier, "code"))
876cecd0 591 return TYPE_INSTANCE_FLAG_CODE_SPACE;
47663de5 592 else if (!strcmp (space_identifier, "data"))
876cecd0 593 return TYPE_INSTANCE_FLAG_DATA_SPACE;
5f11f355 594 else if (gdbarch_address_class_name_to_type_flags_p (gdbarch)
dda83cd7 595 && gdbarch_address_class_name_to_type_flags (gdbarch,
5f11f355
AC
596 space_identifier,
597 &type_flags))
8b2dbe47 598 return type_flags;
47663de5 599 else
8a3fe4f8 600 error (_("Unknown address space specifier: \"%s\""), space_identifier);
47663de5
MS
601}
602
69896a2c
PA
603/* Identify address space identifier by type_instance_flags and return
604 the string version of the adress space name. */
47663de5 605
321432c0 606const char *
69896a2c
PA
607address_space_type_instance_flags_to_name (struct gdbarch *gdbarch,
608 type_instance_flags space_flag)
47663de5 609{
876cecd0 610 if (space_flag & TYPE_INSTANCE_FLAG_CODE_SPACE)
47663de5 611 return "code";
876cecd0 612 else if (space_flag & TYPE_INSTANCE_FLAG_DATA_SPACE)
47663de5 613 return "data";
876cecd0 614 else if ((space_flag & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
dda83cd7 615 && gdbarch_address_class_type_flags_to_name_p (gdbarch))
5f11f355 616 return gdbarch_address_class_type_flags_to_name (gdbarch, space_flag);
47663de5
MS
617 else
618 return NULL;
619}
620
2fdde8f8 621/* Create a new type with instance flags NEW_FLAGS, based on TYPE.
ad766c0a
JB
622
623 If STORAGE is non-NULL, create the new type instance there.
624 STORAGE must be in the same obstack as TYPE. */
47663de5 625
b9362cc7 626static struct type *
314ad88d 627make_qualified_type (struct type *type, type_instance_flags new_flags,
2fdde8f8 628 struct type *storage)
47663de5
MS
629{
630 struct type *ntype;
631
632 ntype = type;
5f61c20e
JK
633 do
634 {
10242f36 635 if (ntype->instance_flags () == new_flags)
5f61c20e
JK
636 return ntype;
637 ntype = TYPE_CHAIN (ntype);
638 }
639 while (ntype != type);
47663de5 640
2fdde8f8
DJ
641 /* Create a new type instance. */
642 if (storage == NULL)
643 ntype = alloc_type_instance (type);
644 else
645 {
7ba81444
MS
646 /* If STORAGE was provided, it had better be in the same objfile
647 as TYPE. Otherwise, we can't link it into TYPE's cv chain:
648 if one objfile is freed and the other kept, we'd have
649 dangling pointers. */
ad766c0a
JB
650 gdb_assert (TYPE_OBJFILE (type) == TYPE_OBJFILE (storage));
651
2fdde8f8
DJ
652 ntype = storage;
653 TYPE_MAIN_TYPE (ntype) = TYPE_MAIN_TYPE (type);
654 TYPE_CHAIN (ntype) = ntype;
655 }
47663de5
MS
656
657 /* Pointers or references to the original type are not relevant to
2fdde8f8 658 the new type. */
47663de5
MS
659 TYPE_POINTER_TYPE (ntype) = (struct type *) 0;
660 TYPE_REFERENCE_TYPE (ntype) = (struct type *) 0;
47663de5 661
2fdde8f8
DJ
662 /* Chain the new qualified type to the old type. */
663 TYPE_CHAIN (ntype) = TYPE_CHAIN (type);
664 TYPE_CHAIN (type) = ntype;
665
666 /* Now set the instance flags and return the new type. */
314ad88d 667 ntype->set_instance_flags (new_flags);
47663de5 668
ab5d3da6
KB
669 /* Set length of new type to that of the original type. */
670 TYPE_LENGTH (ntype) = TYPE_LENGTH (type);
671
47663de5
MS
672 return ntype;
673}
674
2fdde8f8
DJ
675/* Make an address-space-delimited variant of a type -- a type that
676 is identical to the one supplied except that it has an address
677 space attribute attached to it (such as "code" or "data").
678
7ba81444
MS
679 The space attributes "code" and "data" are for Harvard
680 architectures. The address space attributes are for architectures
681 which have alternately sized pointers or pointers with alternate
682 representations. */
2fdde8f8
DJ
683
684struct type *
314ad88d
PA
685make_type_with_address_space (struct type *type,
686 type_instance_flags space_flag)
2fdde8f8 687{
314ad88d
PA
688 type_instance_flags new_flags = ((type->instance_flags ()
689 & ~(TYPE_INSTANCE_FLAG_CODE_SPACE
690 | TYPE_INSTANCE_FLAG_DATA_SPACE
691 | TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL))
692 | space_flag);
2fdde8f8
DJ
693
694 return make_qualified_type (type, new_flags, NULL);
695}
c906108c
SS
696
697/* Make a "c-v" variant of a type -- a type that is identical to the
698 one supplied except that it may have const or volatile attributes
699 CNST is a flag for setting the const attribute
700 VOLTL is a flag for setting the volatile attribute
701 TYPE is the base type whose variant we are creating.
c906108c 702
ad766c0a
JB
703 If TYPEPTR and *TYPEPTR are non-zero, then *TYPEPTR points to
704 storage to hold the new qualified type; *TYPEPTR and TYPE must be
705 in the same objfile. Otherwise, allocate fresh memory for the new
706 type whereever TYPE lives. If TYPEPTR is non-zero, set it to the
707 new type we construct. */
5212577a 708
c906108c 709struct type *
7ba81444
MS
710make_cv_type (int cnst, int voltl,
711 struct type *type,
712 struct type **typeptr)
c906108c 713{
52f0bd74 714 struct type *ntype; /* New type */
c906108c 715
314ad88d
PA
716 type_instance_flags new_flags = (type->instance_flags ()
717 & ~(TYPE_INSTANCE_FLAG_CONST
718 | TYPE_INSTANCE_FLAG_VOLATILE));
c906108c 719
c906108c 720 if (cnst)
876cecd0 721 new_flags |= TYPE_INSTANCE_FLAG_CONST;
c906108c
SS
722
723 if (voltl)
876cecd0 724 new_flags |= TYPE_INSTANCE_FLAG_VOLATILE;
a02fd225 725
2fdde8f8 726 if (typeptr && *typeptr != NULL)
a02fd225 727 {
ad766c0a
JB
728 /* TYPE and *TYPEPTR must be in the same objfile. We can't have
729 a C-V variant chain that threads across objfiles: if one
730 objfile gets freed, then the other has a broken C-V chain.
731
732 This code used to try to copy over the main type from TYPE to
733 *TYPEPTR if they were in different objfiles, but that's
734 wrong, too: TYPE may have a field list or member function
735 lists, which refer to types of their own, etc. etc. The
736 whole shebang would need to be copied over recursively; you
737 can't have inter-objfile pointers. The only thing to do is
738 to leave stub types as stub types, and look them up afresh by
739 name each time you encounter them. */
740 gdb_assert (TYPE_OBJFILE (*typeptr) == TYPE_OBJFILE (type));
2fdde8f8
DJ
741 }
742
7ba81444
MS
743 ntype = make_qualified_type (type, new_flags,
744 typeptr ? *typeptr : NULL);
c906108c 745
2fdde8f8
DJ
746 if (typeptr != NULL)
747 *typeptr = ntype;
a02fd225 748
2fdde8f8 749 return ntype;
a02fd225 750}
c906108c 751
06d66ee9
TT
752/* Make a 'restrict'-qualified version of TYPE. */
753
754struct type *
755make_restrict_type (struct type *type)
756{
757 return make_qualified_type (type,
10242f36 758 (type->instance_flags ()
06d66ee9
TT
759 | TYPE_INSTANCE_FLAG_RESTRICT),
760 NULL);
761}
762
f1660027
TT
763/* Make a type without const, volatile, or restrict. */
764
765struct type *
766make_unqualified_type (struct type *type)
767{
768 return make_qualified_type (type,
10242f36 769 (type->instance_flags ()
f1660027
TT
770 & ~(TYPE_INSTANCE_FLAG_CONST
771 | TYPE_INSTANCE_FLAG_VOLATILE
772 | TYPE_INSTANCE_FLAG_RESTRICT)),
773 NULL);
774}
775
a2c2acaf
MW
776/* Make a '_Atomic'-qualified version of TYPE. */
777
778struct type *
779make_atomic_type (struct type *type)
780{
781 return make_qualified_type (type,
10242f36 782 (type->instance_flags ()
a2c2acaf
MW
783 | TYPE_INSTANCE_FLAG_ATOMIC),
784 NULL);
785}
786
2fdde8f8
DJ
787/* Replace the contents of ntype with the type *type. This changes the
788 contents, rather than the pointer for TYPE_MAIN_TYPE (ntype); thus
789 the changes are propogated to all types in the TYPE_CHAIN.
dd6bda65 790
cda6c68a
JB
791 In order to build recursive types, it's inevitable that we'll need
792 to update types in place --- but this sort of indiscriminate
793 smashing is ugly, and needs to be replaced with something more
2fdde8f8
DJ
794 controlled. TYPE_MAIN_TYPE is a step in this direction; it's not
795 clear if more steps are needed. */
5212577a 796
dd6bda65
DJ
797void
798replace_type (struct type *ntype, struct type *type)
799{
ab5d3da6 800 struct type *chain;
dd6bda65 801
ad766c0a
JB
802 /* These two types had better be in the same objfile. Otherwise,
803 the assignment of one type's main type structure to the other
804 will produce a type with references to objects (names; field
805 lists; etc.) allocated on an objfile other than its own. */
e46dd0f4 806 gdb_assert (TYPE_OBJFILE (ntype) == TYPE_OBJFILE (type));
ad766c0a 807
2fdde8f8 808 *TYPE_MAIN_TYPE (ntype) = *TYPE_MAIN_TYPE (type);
dd6bda65 809
7ba81444
MS
810 /* The type length is not a part of the main type. Update it for
811 each type on the variant chain. */
ab5d3da6 812 chain = ntype;
5f61c20e
JK
813 do
814 {
815 /* Assert that this element of the chain has no address-class bits
816 set in its flags. Such type variants might have type lengths
817 which are supposed to be different from the non-address-class
818 variants. This assertion shouldn't ever be triggered because
819 symbol readers which do construct address-class variants don't
820 call replace_type(). */
821 gdb_assert (TYPE_ADDRESS_CLASS_ALL (chain) == 0);
822
823 TYPE_LENGTH (chain) = TYPE_LENGTH (type);
824 chain = TYPE_CHAIN (chain);
825 }
826 while (ntype != chain);
ab5d3da6 827
2fdde8f8
DJ
828 /* Assert that the two types have equivalent instance qualifiers.
829 This should be true for at least all of our debug readers. */
10242f36 830 gdb_assert (ntype->instance_flags () == type->instance_flags ());
dd6bda65
DJ
831}
832
c906108c
SS
833/* Implement direct support for MEMBER_TYPE in GNU C++.
834 May need to construct such a type if this is the first use.
835 The TYPE is the type of the member. The DOMAIN is the type
836 of the aggregate that the member belongs to. */
837
838struct type *
0d5de010 839lookup_memberptr_type (struct type *type, struct type *domain)
c906108c 840{
52f0bd74 841 struct type *mtype;
c906108c 842
e9bb382b 843 mtype = alloc_type_copy (type);
0d5de010 844 smash_to_memberptr_type (mtype, domain, type);
c16abbde 845 return mtype;
c906108c
SS
846}
847
0d5de010
DJ
848/* Return a pointer-to-method type, for a method of type TO_TYPE. */
849
850struct type *
851lookup_methodptr_type (struct type *to_type)
852{
853 struct type *mtype;
854
e9bb382b 855 mtype = alloc_type_copy (to_type);
0b92b5bb 856 smash_to_methodptr_type (mtype, to_type);
0d5de010
DJ
857 return mtype;
858}
859
7ba81444
MS
860/* Allocate a stub method whose return type is TYPE. This apparently
861 happens for speed of symbol reading, since parsing out the
862 arguments to the method is cpu-intensive, the way we are doing it.
863 So, we will fill in arguments later. This always returns a fresh
864 type. */
c906108c
SS
865
866struct type *
fba45db2 867allocate_stub_method (struct type *type)
c906108c
SS
868{
869 struct type *mtype;
870
e9bb382b 871 mtype = alloc_type_copy (type);
67607e24 872 mtype->set_code (TYPE_CODE_METHOD);
e9bb382b 873 TYPE_LENGTH (mtype) = 1;
b4b73759 874 mtype->set_is_stub (true);
c906108c 875 TYPE_TARGET_TYPE (mtype) = type;
4bfb94b8 876 /* TYPE_SELF_TYPE (mtype) = unknown yet */
c16abbde 877 return mtype;
c906108c
SS
878}
879
0f59d5fc
PA
880/* See gdbtypes.h. */
881
882bool
883operator== (const dynamic_prop &l, const dynamic_prop &r)
884{
8c2e4e06 885 if (l.kind () != r.kind ())
0f59d5fc
PA
886 return false;
887
8c2e4e06 888 switch (l.kind ())
0f59d5fc
PA
889 {
890 case PROP_UNDEFINED:
891 return true;
892 case PROP_CONST:
8c2e4e06 893 return l.const_val () == r.const_val ();
0f59d5fc
PA
894 case PROP_ADDR_OFFSET:
895 case PROP_LOCEXPR:
896 case PROP_LOCLIST:
8c2e4e06 897 return l.baton () == r.baton ();
ef83a141 898 case PROP_VARIANT_PARTS:
8c2e4e06 899 return l.variant_parts () == r.variant_parts ();
ef83a141 900 case PROP_TYPE:
8c2e4e06 901 return l.original_type () == r.original_type ();
0f59d5fc
PA
902 }
903
904 gdb_assert_not_reached ("unhandled dynamic_prop kind");
905}
906
907/* See gdbtypes.h. */
908
909bool
910operator== (const range_bounds &l, const range_bounds &r)
911{
912#define FIELD_EQ(FIELD) (l.FIELD == r.FIELD)
913
914 return (FIELD_EQ (low)
915 && FIELD_EQ (high)
916 && FIELD_EQ (flag_upper_bound_is_count)
4e962e74
TT
917 && FIELD_EQ (flag_bound_evaluated)
918 && FIELD_EQ (bias));
0f59d5fc
PA
919
920#undef FIELD_EQ
921}
922
729efb13
SA
923/* Create a range type with a dynamic range from LOW_BOUND to
924 HIGH_BOUND, inclusive. See create_range_type for further details. */
c906108c
SS
925
926struct type *
729efb13
SA
927create_range_type (struct type *result_type, struct type *index_type,
928 const struct dynamic_prop *low_bound,
4e962e74
TT
929 const struct dynamic_prop *high_bound,
930 LONGEST bias)
c906108c 931{
b86352cf
AB
932 /* The INDEX_TYPE should be a type capable of holding the upper and lower
933 bounds, as such a zero sized, or void type makes no sense. */
78134374 934 gdb_assert (index_type->code () != TYPE_CODE_VOID);
b86352cf
AB
935 gdb_assert (TYPE_LENGTH (index_type) > 0);
936
c906108c 937 if (result_type == NULL)
e9bb382b 938 result_type = alloc_type_copy (index_type);
67607e24 939 result_type->set_code (TYPE_CODE_RANGE);
c906108c 940 TYPE_TARGET_TYPE (result_type) = index_type;
e46d3488 941 if (index_type->is_stub ())
8f53807e 942 result_type->set_target_is_stub (true);
c906108c
SS
943 else
944 TYPE_LENGTH (result_type) = TYPE_LENGTH (check_typedef (index_type));
729efb13 945
c4dfcb36
SM
946 range_bounds *bounds
947 = (struct range_bounds *) TYPE_ZALLOC (result_type, sizeof (range_bounds));
948 bounds->low = *low_bound;
949 bounds->high = *high_bound;
950 bounds->bias = bias;
8c2e4e06 951 bounds->stride.set_const_val (0);
c4dfcb36
SM
952
953 result_type->set_bounds (bounds);
5bbd8269 954
09584414
JB
955 if (index_type->code () == TYPE_CODE_FIXED_POINT)
956 result_type->set_is_unsigned (index_type->is_unsigned ());
6390859c
TT
957 /* Note that the signed-ness of a range type can't simply be copied
958 from the underlying type. Consider a case where the underlying
959 type is 'int', but the range type can hold 0..65535, and where
960 the range is further specified to fit into 16 bits. In this
961 case, if we copy the underlying type's sign, then reading some
962 range values will cause an unwanted sign extension. So, we have
963 some heuristics here instead. */
09584414 964 else if (low_bound->kind () == PROP_CONST && low_bound->const_val () >= 0)
6390859c
TT
965 result_type->set_is_unsigned (true);
966 /* Ada allows the declaration of range types whose upper bound is
967 less than the lower bound, so checking the lower bound is not
968 enough. Make sure we do not mark a range type whose upper bound
969 is negative as unsigned. */
970 if (high_bound->kind () == PROP_CONST && high_bound->const_val () < 0)
971 result_type->set_is_unsigned (false);
972
db558e34
SM
973 result_type->set_endianity_is_not_default
974 (index_type->endianity_is_not_default ());
a05cf17a 975
262452ec 976 return result_type;
c906108c
SS
977}
978
5bbd8269
AB
979/* See gdbtypes.h. */
980
981struct type *
982create_range_type_with_stride (struct type *result_type,
983 struct type *index_type,
984 const struct dynamic_prop *low_bound,
985 const struct dynamic_prop *high_bound,
986 LONGEST bias,
987 const struct dynamic_prop *stride,
988 bool byte_stride_p)
989{
990 result_type = create_range_type (result_type, index_type, low_bound,
991 high_bound, bias);
992
993 gdb_assert (stride != nullptr);
599088e3
SM
994 result_type->bounds ()->stride = *stride;
995 result_type->bounds ()->flag_is_byte_stride = byte_stride_p;
5bbd8269
AB
996
997 return result_type;
998}
999
1000
1001
729efb13
SA
1002/* Create a range type using either a blank type supplied in
1003 RESULT_TYPE, or creating a new type, inheriting the objfile from
1004 INDEX_TYPE.
1005
1006 Indices will be of type INDEX_TYPE, and will range from LOW_BOUND
1007 to HIGH_BOUND, inclusive.
1008
1009 FIXME: Maybe we should check the TYPE_CODE of RESULT_TYPE to make
1010 sure it is TYPE_CODE_UNDEF before we bash it into a range type? */
1011
1012struct type *
1013create_static_range_type (struct type *result_type, struct type *index_type,
1014 LONGEST low_bound, LONGEST high_bound)
1015{
1016 struct dynamic_prop low, high;
1017
8c2e4e06
SM
1018 low.set_const_val (low_bound);
1019 high.set_const_val (high_bound);
729efb13 1020
4e962e74 1021 result_type = create_range_type (result_type, index_type, &low, &high, 0);
729efb13
SA
1022
1023 return result_type;
1024}
1025
80180f79
SA
1026/* Predicate tests whether BOUNDS are static. Returns 1 if all bounds values
1027 are static, otherwise returns 0. */
1028
5bbd8269 1029static bool
80180f79
SA
1030has_static_range (const struct range_bounds *bounds)
1031{
5bbd8269
AB
1032 /* If the range doesn't have a defined stride then its stride field will
1033 be initialized to the constant 0. */
8c2e4e06
SM
1034 return (bounds->low.kind () == PROP_CONST
1035 && bounds->high.kind () == PROP_CONST
1036 && bounds->stride.kind () == PROP_CONST);
80180f79
SA
1037}
1038
14c09924 1039/* If TYPE's low bound is a known constant, return it, else return nullopt. */
80180f79 1040
14c09924
SM
1041static gdb::optional<LONGEST>
1042get_discrete_low_bound (struct type *type)
c906108c 1043{
f168693b 1044 type = check_typedef (type);
78134374 1045 switch (type->code ())
c906108c
SS
1046 {
1047 case TYPE_CODE_RANGE:
14c09924
SM
1048 {
1049 /* This function only works for ranges with a constant low bound. */
1050 if (type->bounds ()->low.kind () != PROP_CONST)
1051 return {};
1052
1053 LONGEST low = type->bounds ()->low.const_val ();
1054
1055 if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ENUM)
1056 {
1057 gdb::optional<LONGEST> low_pos
1058 = discrete_position (TYPE_TARGET_TYPE (type), low);
1059
1060 if (low_pos.has_value ())
1061 low = *low_pos;
1062 }
1063
1064 return low;
1065 }
1066
1067 case TYPE_CODE_ENUM:
1068 {
1069 if (type->num_fields () > 0)
1070 {
1071 /* The enums may not be sorted by value, so search all
1072 entries. */
1073 LONGEST low = TYPE_FIELD_ENUMVAL (type, 0);
1074
1075 for (int i = 0; i < type->num_fields (); i++)
1076 {
1077 if (TYPE_FIELD_ENUMVAL (type, i) < low)
1078 low = TYPE_FIELD_ENUMVAL (type, i);
1079 }
1080
1081 /* Set unsigned indicator if warranted. */
1082 if (low >= 0)
1083 type->set_is_unsigned (true);
1084
1085 return low;
1086 }
1087 else
1088 return 0;
1089 }
1090
1091 case TYPE_CODE_BOOL:
1092 return 0;
1093
1094 case TYPE_CODE_INT:
1095 if (TYPE_LENGTH (type) > sizeof (LONGEST)) /* Too big */
1f8d2881 1096 return false;
7c6f2712 1097
14c09924
SM
1098 if (!type->is_unsigned ())
1099 return -(1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1));
7c6f2712 1100
14c09924
SM
1101 /* fall through */
1102 case TYPE_CODE_CHAR:
1103 return 0;
6244c119 1104
14c09924
SM
1105 default:
1106 return false;
1107 }
1108}
6244c119 1109
14c09924 1110/* If TYPE's high bound is a known constant, return it, else return nullopt. */
6244c119 1111
14c09924
SM
1112static gdb::optional<LONGEST>
1113get_discrete_high_bound (struct type *type)
1114{
1115 type = check_typedef (type);
1116 switch (type->code ())
1117 {
1118 case TYPE_CODE_RANGE:
1119 {
1120 /* This function only works for ranges with a constant high bound. */
1121 if (type->bounds ()->high.kind () != PROP_CONST)
1122 return {};
1123
1124 LONGEST high = type->bounds ()->high.const_val ();
1125
1126 if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ENUM)
1127 {
1128 gdb::optional<LONGEST> high_pos
1129 = discrete_position (TYPE_TARGET_TYPE (type), high);
1130
1131 if (high_pos.has_value ())
1132 high = *high_pos;
1133 }
1134
1135 return high;
1136 }
1f8d2881 1137
c906108c 1138 case TYPE_CODE_ENUM:
14c09924
SM
1139 {
1140 if (type->num_fields () > 0)
1141 {
1142 /* The enums may not be sorted by value, so search all
1143 entries. */
1144 LONGEST high = TYPE_FIELD_ENUMVAL (type, 0);
1145
1146 for (int i = 0; i < type->num_fields (); i++)
1147 {
1148 if (TYPE_FIELD_ENUMVAL (type, i) > high)
1149 high = TYPE_FIELD_ENUMVAL (type, i);
1150 }
1151
1152 return high;
1153 }
1154 else
1155 return -1;
1156 }
1f8d2881 1157
c906108c 1158 case TYPE_CODE_BOOL:
14c09924 1159 return 1;
1f8d2881 1160
c906108c 1161 case TYPE_CODE_INT:
c5aa993b 1162 if (TYPE_LENGTH (type) > sizeof (LONGEST)) /* Too big */
1f8d2881
SM
1163 return false;
1164
c6d940a9 1165 if (!type->is_unsigned ())
c906108c 1166 {
14c09924
SM
1167 LONGEST low = -(1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1));
1168 return -low - 1;
c906108c 1169 }
14c09924 1170
86a73007 1171 /* fall through */
c906108c 1172 case TYPE_CODE_CHAR:
14c09924
SM
1173 {
1174 /* This round-about calculation is to avoid shifting by
1175 TYPE_LENGTH (type) * TARGET_CHAR_BIT, which will not work
1176 if TYPE_LENGTH (type) == sizeof (LONGEST). */
1177 LONGEST high = 1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1);
1178 return (high - 1) | high;
1179 }
1f8d2881 1180
c906108c 1181 default:
1f8d2881 1182 return false;
c906108c
SS
1183 }
1184}
1185
14c09924
SM
1186/* See gdbtypes.h. */
1187
1188bool
1189get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp)
1190{
1191 gdb::optional<LONGEST> low = get_discrete_low_bound (type);
1192 gdb::optional<LONGEST> high = get_discrete_high_bound (type);
1193
1194 if (!low.has_value () || !high.has_value ())
1195 return false;
1196
1197 *lowp = *low;
1198 *highp = *high;
1199
1200 return true;
1201}
1202
584903d3 1203/* See gdbtypes.h */
dbc98a8b 1204
584903d3 1205bool
dbc98a8b
KW
1206get_array_bounds (struct type *type, LONGEST *low_bound, LONGEST *high_bound)
1207{
3d967001 1208 struct type *index = type->index_type ();
dbc98a8b
KW
1209 LONGEST low = 0;
1210 LONGEST high = 0;
dbc98a8b
KW
1211
1212 if (index == NULL)
584903d3 1213 return false;
dbc98a8b 1214
1f8d2881 1215 if (!get_discrete_bounds (index, &low, &high))
584903d3 1216 return false;
dbc98a8b 1217
dbc98a8b
KW
1218 if (low_bound)
1219 *low_bound = low;
1220
1221 if (high_bound)
1222 *high_bound = high;
1223
584903d3 1224 return true;
dbc98a8b
KW
1225}
1226
aa715135
JG
1227/* Assuming that TYPE is a discrete type and VAL is a valid integer
1228 representation of a value of this type, save the corresponding
1229 position number in POS.
1230
1231 Its differs from VAL only in the case of enumeration types. In
1232 this case, the position number of the value of the first listed
1233 enumeration literal is zero; the position number of the value of
1234 each subsequent enumeration literal is one more than that of its
1235 predecessor in the list.
1236
1237 Return 1 if the operation was successful. Return zero otherwise,
1238 in which case the value of POS is unmodified.
1239*/
1240
6244c119
SM
1241gdb::optional<LONGEST>
1242discrete_position (struct type *type, LONGEST val)
aa715135 1243{
0bc2354b
TT
1244 if (type->code () == TYPE_CODE_RANGE)
1245 type = TYPE_TARGET_TYPE (type);
1246
78134374 1247 if (type->code () == TYPE_CODE_ENUM)
aa715135
JG
1248 {
1249 int i;
1250
1f704f76 1251 for (i = 0; i < type->num_fields (); i += 1)
dda83cd7
SM
1252 {
1253 if (val == TYPE_FIELD_ENUMVAL (type, i))
6244c119 1254 return i;
dda83cd7 1255 }
6244c119 1256
aa715135 1257 /* Invalid enumeration value. */
6244c119 1258 return {};
aa715135
JG
1259 }
1260 else
6244c119 1261 return val;
aa715135
JG
1262}
1263
8dbb1375
HD
1264/* If the array TYPE has static bounds calculate and update its
1265 size, then return true. Otherwise return false and leave TYPE
1266 unchanged. */
1267
1268static bool
1269update_static_array_size (struct type *type)
1270{
78134374 1271 gdb_assert (type->code () == TYPE_CODE_ARRAY);
8dbb1375 1272
3d967001 1273 struct type *range_type = type->index_type ();
8dbb1375 1274
24e99c6c 1275 if (type->dyn_prop (DYN_PROP_BYTE_STRIDE) == nullptr
599088e3 1276 && has_static_range (range_type->bounds ())
8dbb1375
HD
1277 && (!type_not_associated (type)
1278 && !type_not_allocated (type)))
1279 {
1280 LONGEST low_bound, high_bound;
1281 int stride;
1282 struct type *element_type;
1283
1284 /* If the array itself doesn't provide a stride value then take
1285 whatever stride the range provides. Don't update BIT_STRIDE as
1286 we don't want to place the stride value from the range into this
1287 arrays bit size field. */
1288 stride = TYPE_FIELD_BITSIZE (type, 0);
1289 if (stride == 0)
107406b7 1290 stride = range_type->bit_stride ();
8dbb1375 1291
1f8d2881 1292 if (!get_discrete_bounds (range_type, &low_bound, &high_bound))
8dbb1375 1293 low_bound = high_bound = 0;
1f8d2881 1294
8dbb1375
HD
1295 element_type = check_typedef (TYPE_TARGET_TYPE (type));
1296 /* Be careful when setting the array length. Ada arrays can be
1297 empty arrays with the high_bound being smaller than the low_bound.
1298 In such cases, the array length should be zero. */
1299 if (high_bound < low_bound)
1300 TYPE_LENGTH (type) = 0;
1301 else if (stride != 0)
1302 {
1303 /* Ensure that the type length is always positive, even in the
1304 case where (for example in Fortran) we have a negative
1305 stride. It is possible to have a single element array with a
1306 negative stride in Fortran (this doesn't mean anything
1307 special, it's still just a single element array) so do
1308 consider that case when touching this code. */
1309 LONGEST element_count = std::abs (high_bound - low_bound + 1);
1310 TYPE_LENGTH (type)
1311 = ((std::abs (stride) * element_count) + 7) / 8;
1312 }
1313 else
1314 TYPE_LENGTH (type) =
1315 TYPE_LENGTH (element_type) * (high_bound - low_bound + 1);
1316
b72795a8
TT
1317 /* If this array's element is itself an array with a bit stride,
1318 then we want to update this array's bit stride to reflect the
1319 size of the sub-array. Otherwise, we'll end up using the
1320 wrong size when trying to find elements of the outer
1321 array. */
1322 if (element_type->code () == TYPE_CODE_ARRAY
1323 && TYPE_LENGTH (element_type) != 0
1324 && TYPE_FIELD_BITSIZE (element_type, 0) != 0
5d8254e1 1325 && get_array_bounds (element_type, &low_bound, &high_bound)
b72795a8
TT
1326 && high_bound >= low_bound)
1327 TYPE_FIELD_BITSIZE (type, 0)
1328 = ((high_bound - low_bound + 1)
1329 * TYPE_FIELD_BITSIZE (element_type, 0));
1330
8dbb1375
HD
1331 return true;
1332 }
1333
1334 return false;
1335}
1336
7ba81444
MS
1337/* Create an array type using either a blank type supplied in
1338 RESULT_TYPE, or creating a new type, inheriting the objfile from
1339 RANGE_TYPE.
c906108c
SS
1340
1341 Elements will be of type ELEMENT_TYPE, the indices will be of type
1342 RANGE_TYPE.
1343
a405673c
JB
1344 BYTE_STRIDE_PROP, when not NULL, provides the array's byte stride.
1345 This byte stride property is added to the resulting array type
1346 as a DYN_PROP_BYTE_STRIDE. As a consequence, the BYTE_STRIDE_PROP
1347 argument can only be used to create types that are objfile-owned
1348 (see add_dyn_prop), meaning that either this function must be called
1349 with an objfile-owned RESULT_TYPE, or an objfile-owned RANGE_TYPE.
1350
1351 BIT_STRIDE is taken into account only when BYTE_STRIDE_PROP is NULL.
dc53a7ad
JB
1352 If BIT_STRIDE is not zero, build a packed array type whose element
1353 size is BIT_STRIDE. Otherwise, ignore this parameter.
1354
7ba81444
MS
1355 FIXME: Maybe we should check the TYPE_CODE of RESULT_TYPE to make
1356 sure it is TYPE_CODE_UNDEF before we bash it into an array
1357 type? */
c906108c
SS
1358
1359struct type *
dc53a7ad
JB
1360create_array_type_with_stride (struct type *result_type,
1361 struct type *element_type,
1362 struct type *range_type,
a405673c 1363 struct dynamic_prop *byte_stride_prop,
dc53a7ad 1364 unsigned int bit_stride)
c906108c 1365{
a405673c 1366 if (byte_stride_prop != NULL
8c2e4e06 1367 && byte_stride_prop->kind () == PROP_CONST)
a405673c
JB
1368 {
1369 /* The byte stride is actually not dynamic. Pretend we were
1370 called with bit_stride set instead of byte_stride_prop.
1371 This will give us the same result type, while avoiding
1372 the need to handle this as a special case. */
8c2e4e06 1373 bit_stride = byte_stride_prop->const_val () * 8;
a405673c
JB
1374 byte_stride_prop = NULL;
1375 }
1376
c906108c 1377 if (result_type == NULL)
e9bb382b
UW
1378 result_type = alloc_type_copy (range_type);
1379
67607e24 1380 result_type->set_code (TYPE_CODE_ARRAY);
c906108c 1381 TYPE_TARGET_TYPE (result_type) = element_type;
5bbd8269 1382
5e33d5f4 1383 result_type->set_num_fields (1);
3cabb6b0
SM
1384 result_type->set_fields
1385 ((struct field *) TYPE_ZALLOC (result_type, sizeof (struct field)));
262abc0d 1386 result_type->set_index_type (range_type);
8dbb1375 1387 if (byte_stride_prop != NULL)
5c54719c 1388 result_type->add_dyn_prop (DYN_PROP_BYTE_STRIDE, *byte_stride_prop);
8dbb1375
HD
1389 else if (bit_stride > 0)
1390 TYPE_FIELD_BITSIZE (result_type, 0) = bit_stride;
80180f79 1391
8dbb1375 1392 if (!update_static_array_size (result_type))
80180f79
SA
1393 {
1394 /* This type is dynamic and its length needs to be computed
dda83cd7
SM
1395 on demand. In the meantime, avoid leaving the TYPE_LENGTH
1396 undefined by setting it to zero. Although we are not expected
1397 to trust TYPE_LENGTH in this case, setting the size to zero
1398 allows us to avoid allocating objects of random sizes in case
1399 we accidently do. */
80180f79
SA
1400 TYPE_LENGTH (result_type) = 0;
1401 }
1402
a9ff5f12 1403 /* TYPE_TARGET_STUB will take care of zero length arrays. */
c906108c 1404 if (TYPE_LENGTH (result_type) == 0)
8f53807e 1405 result_type->set_target_is_stub (true);
c906108c 1406
c16abbde 1407 return result_type;
c906108c
SS
1408}
1409
dc53a7ad
JB
1410/* Same as create_array_type_with_stride but with no bit_stride
1411 (BIT_STRIDE = 0), thus building an unpacked array. */
1412
1413struct type *
1414create_array_type (struct type *result_type,
1415 struct type *element_type,
1416 struct type *range_type)
1417{
1418 return create_array_type_with_stride (result_type, element_type,
a405673c 1419 range_type, NULL, 0);
dc53a7ad
JB
1420}
1421
e3506a9f
UW
1422struct type *
1423lookup_array_range_type (struct type *element_type,
63375b74 1424 LONGEST low_bound, LONGEST high_bound)
e3506a9f 1425{
929b5ad4
JB
1426 struct type *index_type;
1427 struct type *range_type;
1428
1429 if (TYPE_OBJFILE_OWNED (element_type))
1430 index_type = objfile_type (TYPE_OWNER (element_type).objfile)->builtin_int;
1431 else
1432 index_type = builtin_type (get_type_arch (element_type))->builtin_int;
1433 range_type = create_static_range_type (NULL, index_type,
1434 low_bound, high_bound);
d8734c88 1435
e3506a9f
UW
1436 return create_array_type (NULL, element_type, range_type);
1437}
1438
7ba81444
MS
1439/* Create a string type using either a blank type supplied in
1440 RESULT_TYPE, or creating a new type. String types are similar
1441 enough to array of char types that we can use create_array_type to
1442 build the basic type and then bash it into a string type.
c906108c
SS
1443
1444 For fixed length strings, the range type contains 0 as the lower
1445 bound and the length of the string minus one as the upper bound.
1446
7ba81444
MS
1447 FIXME: Maybe we should check the TYPE_CODE of RESULT_TYPE to make
1448 sure it is TYPE_CODE_UNDEF before we bash it into a string
1449 type? */
c906108c
SS
1450
1451struct type *
3b7538c0
UW
1452create_string_type (struct type *result_type,
1453 struct type *string_char_type,
7ba81444 1454 struct type *range_type)
c906108c
SS
1455{
1456 result_type = create_array_type (result_type,
f290d38e 1457 string_char_type,
c906108c 1458 range_type);
67607e24 1459 result_type->set_code (TYPE_CODE_STRING);
c16abbde 1460 return result_type;
c906108c
SS
1461}
1462
e3506a9f
UW
1463struct type *
1464lookup_string_range_type (struct type *string_char_type,
63375b74 1465 LONGEST low_bound, LONGEST high_bound)
e3506a9f
UW
1466{
1467 struct type *result_type;
d8734c88 1468
e3506a9f
UW
1469 result_type = lookup_array_range_type (string_char_type,
1470 low_bound, high_bound);
67607e24 1471 result_type->set_code (TYPE_CODE_STRING);
e3506a9f
UW
1472 return result_type;
1473}
1474
c906108c 1475struct type *
fba45db2 1476create_set_type (struct type *result_type, struct type *domain_type)
c906108c 1477{
c906108c 1478 if (result_type == NULL)
e9bb382b
UW
1479 result_type = alloc_type_copy (domain_type);
1480
67607e24 1481 result_type->set_code (TYPE_CODE_SET);
5e33d5f4 1482 result_type->set_num_fields (1);
3cabb6b0
SM
1483 result_type->set_fields
1484 ((struct field *) TYPE_ZALLOC (result_type, sizeof (struct field)));
c906108c 1485
e46d3488 1486 if (!domain_type->is_stub ())
c906108c 1487 {
f9780d5b 1488 LONGEST low_bound, high_bound, bit_length;
d8734c88 1489
1f8d2881 1490 if (!get_discrete_bounds (domain_type, &low_bound, &high_bound))
c906108c 1491 low_bound = high_bound = 0;
1f8d2881 1492
c906108c
SS
1493 bit_length = high_bound - low_bound + 1;
1494 TYPE_LENGTH (result_type)
1495 = (bit_length + TARGET_CHAR_BIT - 1) / TARGET_CHAR_BIT;
f9780d5b 1496 if (low_bound >= 0)
653223d3 1497 result_type->set_is_unsigned (true);
c906108c 1498 }
5d14b6e5 1499 result_type->field (0).set_type (domain_type);
c906108c 1500
c16abbde 1501 return result_type;
c906108c
SS
1502}
1503
ea37ba09
DJ
1504/* Convert ARRAY_TYPE to a vector type. This may modify ARRAY_TYPE
1505 and any array types nested inside it. */
1506
1507void
1508make_vector_type (struct type *array_type)
1509{
1510 struct type *inner_array, *elt_type;
ea37ba09
DJ
1511
1512 /* Find the innermost array type, in case the array is
1513 multi-dimensional. */
1514 inner_array = array_type;
78134374 1515 while (TYPE_TARGET_TYPE (inner_array)->code () == TYPE_CODE_ARRAY)
ea37ba09
DJ
1516 inner_array = TYPE_TARGET_TYPE (inner_array);
1517
1518 elt_type = TYPE_TARGET_TYPE (inner_array);
78134374 1519 if (elt_type->code () == TYPE_CODE_INT)
ea37ba09 1520 {
314ad88d
PA
1521 type_instance_flags flags
1522 = elt_type->instance_flags () | TYPE_INSTANCE_FLAG_NOTTEXT;
ea37ba09
DJ
1523 elt_type = make_qualified_type (elt_type, flags, NULL);
1524 TYPE_TARGET_TYPE (inner_array) = elt_type;
1525 }
1526
2062087b 1527 array_type->set_is_vector (true);
ea37ba09
DJ
1528}
1529
794ac428 1530struct type *
ac3aafc7
EZ
1531init_vector_type (struct type *elt_type, int n)
1532{
1533 struct type *array_type;
d8734c88 1534
e3506a9f 1535 array_type = lookup_array_range_type (elt_type, 0, n - 1);
ea37ba09 1536 make_vector_type (array_type);
ac3aafc7
EZ
1537 return array_type;
1538}
1539
09e2d7c7
DE
1540/* Internal routine called by TYPE_SELF_TYPE to return the type that TYPE
1541 belongs to. In c++ this is the class of "this", but TYPE_THIS_TYPE is too
1542 confusing. "self" is a common enough replacement for "this".
1543 TYPE must be one of TYPE_CODE_METHODPTR, TYPE_CODE_MEMBERPTR, or
1544 TYPE_CODE_METHOD. */
1545
1546struct type *
1547internal_type_self_type (struct type *type)
1548{
78134374 1549 switch (type->code ())
09e2d7c7
DE
1550 {
1551 case TYPE_CODE_METHODPTR:
1552 case TYPE_CODE_MEMBERPTR:
eaaf76ab
DE
1553 if (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_NONE)
1554 return NULL;
09e2d7c7
DE
1555 gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_SELF_TYPE);
1556 return TYPE_MAIN_TYPE (type)->type_specific.self_type;
1557 case TYPE_CODE_METHOD:
eaaf76ab
DE
1558 if (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_NONE)
1559 return NULL;
09e2d7c7
DE
1560 gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_FUNC);
1561 return TYPE_MAIN_TYPE (type)->type_specific.func_stuff->self_type;
1562 default:
1563 gdb_assert_not_reached ("bad type");
1564 }
1565}
1566
1567/* Set the type of the class that TYPE belongs to.
1568 In c++ this is the class of "this".
1569 TYPE must be one of TYPE_CODE_METHODPTR, TYPE_CODE_MEMBERPTR, or
1570 TYPE_CODE_METHOD. */
1571
1572void
1573set_type_self_type (struct type *type, struct type *self_type)
1574{
78134374 1575 switch (type->code ())
09e2d7c7
DE
1576 {
1577 case TYPE_CODE_METHODPTR:
1578 case TYPE_CODE_MEMBERPTR:
1579 if (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_NONE)
1580 TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_SELF_TYPE;
1581 gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_SELF_TYPE);
1582 TYPE_MAIN_TYPE (type)->type_specific.self_type = self_type;
1583 break;
1584 case TYPE_CODE_METHOD:
1585 if (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_NONE)
1586 INIT_FUNC_SPECIFIC (type);
1587 gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_FUNC);
1588 TYPE_MAIN_TYPE (type)->type_specific.func_stuff->self_type = self_type;
1589 break;
1590 default:
1591 gdb_assert_not_reached ("bad type");
1592 }
1593}
1594
1595/* Smash TYPE to be a type of pointers to members of SELF_TYPE with type
0d5de010
DJ
1596 TO_TYPE. A member pointer is a wierd thing -- it amounts to a
1597 typed offset into a struct, e.g. "an int at offset 8". A MEMBER
1598 TYPE doesn't include the offset (that's the value of the MEMBER
1599 itself), but does include the structure type into which it points
1600 (for some reason).
c906108c 1601
7ba81444
MS
1602 When "smashing" the type, we preserve the objfile that the old type
1603 pointed to, since we aren't changing where the type is actually
c906108c
SS
1604 allocated. */
1605
1606void
09e2d7c7 1607smash_to_memberptr_type (struct type *type, struct type *self_type,
0d5de010 1608 struct type *to_type)
c906108c 1609{
2fdde8f8 1610 smash_type (type);
67607e24 1611 type->set_code (TYPE_CODE_MEMBERPTR);
c906108c 1612 TYPE_TARGET_TYPE (type) = to_type;
09e2d7c7 1613 set_type_self_type (type, self_type);
0d5de010
DJ
1614 /* Assume that a data member pointer is the same size as a normal
1615 pointer. */
50810684
UW
1616 TYPE_LENGTH (type)
1617 = gdbarch_ptr_bit (get_type_arch (to_type)) / TARGET_CHAR_BIT;
c906108c
SS
1618}
1619
0b92b5bb
TT
1620/* Smash TYPE to be a type of pointer to methods type TO_TYPE.
1621
1622 When "smashing" the type, we preserve the objfile that the old type
1623 pointed to, since we aren't changing where the type is actually
1624 allocated. */
1625
1626void
1627smash_to_methodptr_type (struct type *type, struct type *to_type)
1628{
1629 smash_type (type);
67607e24 1630 type->set_code (TYPE_CODE_METHODPTR);
0b92b5bb 1631 TYPE_TARGET_TYPE (type) = to_type;
09e2d7c7 1632 set_type_self_type (type, TYPE_SELF_TYPE (to_type));
0b92b5bb 1633 TYPE_LENGTH (type) = cplus_method_ptr_size (to_type);
0b92b5bb
TT
1634}
1635
09e2d7c7 1636/* Smash TYPE to be a type of method of SELF_TYPE with type TO_TYPE.
c906108c
SS
1637 METHOD just means `function that gets an extra "this" argument'.
1638
7ba81444
MS
1639 When "smashing" the type, we preserve the objfile that the old type
1640 pointed to, since we aren't changing where the type is actually
c906108c
SS
1641 allocated. */
1642
1643void
09e2d7c7 1644smash_to_method_type (struct type *type, struct type *self_type,
ad2f7632
DJ
1645 struct type *to_type, struct field *args,
1646 int nargs, int varargs)
c906108c 1647{
2fdde8f8 1648 smash_type (type);
67607e24 1649 type->set_code (TYPE_CODE_METHOD);
c906108c 1650 TYPE_TARGET_TYPE (type) = to_type;
09e2d7c7 1651 set_type_self_type (type, self_type);
3cabb6b0 1652 type->set_fields (args);
5e33d5f4 1653 type->set_num_fields (nargs);
ad2f7632 1654 if (varargs)
1d6286ed 1655 type->set_has_varargs (true);
c906108c 1656 TYPE_LENGTH (type) = 1; /* In practice, this is never needed. */
c906108c
SS
1657}
1658
a737d952 1659/* A wrapper of TYPE_NAME which calls error if the type is anonymous.
d8228535
JK
1660 Since GCC PR debug/47510 DWARF provides associated information to detect the
1661 anonymous class linkage name from its typedef.
1662
1663 Parameter TYPE should not yet have CHECK_TYPEDEF applied, this function will
1664 apply it itself. */
1665
1666const char *
a737d952 1667type_name_or_error (struct type *type)
d8228535
JK
1668{
1669 struct type *saved_type = type;
1670 const char *name;
1671 struct objfile *objfile;
1672
f168693b 1673 type = check_typedef (type);
d8228535 1674
7d93a1e0 1675 name = type->name ();
d8228535
JK
1676 if (name != NULL)
1677 return name;
1678
7d93a1e0 1679 name = saved_type->name ();
d8228535
JK
1680 objfile = TYPE_OBJFILE (saved_type);
1681 error (_("Invalid anonymous type %s [in module %s], GCC PR debug/47510 bug?"),
4262abfb
JK
1682 name ? name : "<anonymous>",
1683 objfile ? objfile_name (objfile) : "<arch>");
d8228535
JK
1684}
1685
7ba81444
MS
1686/* Lookup a typedef or primitive type named NAME, visible in lexical
1687 block BLOCK. If NOERR is nonzero, return zero if NAME is not
1688 suitably defined. */
c906108c
SS
1689
1690struct type *
e6c014f2 1691lookup_typename (const struct language_defn *language,
b858499d 1692 const char *name,
34eaf542 1693 const struct block *block, int noerr)
c906108c 1694{
52f0bd74 1695 struct symbol *sym;
c906108c 1696
1994afbf 1697 sym = lookup_symbol_in_language (name, block, VAR_DOMAIN,
d12307c1 1698 language->la_language, NULL).symbol;
c51fe631
DE
1699 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
1700 return SYMBOL_TYPE (sym);
1701
c51fe631
DE
1702 if (noerr)
1703 return NULL;
1704 error (_("No type named %s."), name);
c906108c
SS
1705}
1706
1707struct type *
e6c014f2 1708lookup_unsigned_typename (const struct language_defn *language,
b858499d 1709 const char *name)
c906108c 1710{
224c3ddb 1711 char *uns = (char *) alloca (strlen (name) + 10);
c906108c
SS
1712
1713 strcpy (uns, "unsigned ");
1714 strcpy (uns + 9, name);
b858499d 1715 return lookup_typename (language, uns, NULL, 0);
c906108c
SS
1716}
1717
1718struct type *
b858499d 1719lookup_signed_typename (const struct language_defn *language, const char *name)
c906108c
SS
1720{
1721 struct type *t;
224c3ddb 1722 char *uns = (char *) alloca (strlen (name) + 8);
c906108c
SS
1723
1724 strcpy (uns, "signed ");
1725 strcpy (uns + 7, name);
b858499d 1726 t = lookup_typename (language, uns, NULL, 1);
7ba81444 1727 /* If we don't find "signed FOO" just try again with plain "FOO". */
c906108c
SS
1728 if (t != NULL)
1729 return t;
b858499d 1730 return lookup_typename (language, name, NULL, 0);
c906108c
SS
1731}
1732
1733/* Lookup a structure type named "struct NAME",
1734 visible in lexical block BLOCK. */
1735
1736struct type *
270140bd 1737lookup_struct (const char *name, const struct block *block)
c906108c 1738{
52f0bd74 1739 struct symbol *sym;
c906108c 1740
d12307c1 1741 sym = lookup_symbol (name, block, STRUCT_DOMAIN, 0).symbol;
c906108c
SS
1742
1743 if (sym == NULL)
1744 {
8a3fe4f8 1745 error (_("No struct type named %s."), name);
c906108c 1746 }
78134374 1747 if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_STRUCT)
c906108c 1748 {
7ba81444
MS
1749 error (_("This context has class, union or enum %s, not a struct."),
1750 name);
c906108c
SS
1751 }
1752 return (SYMBOL_TYPE (sym));
1753}
1754
1755/* Lookup a union type named "union NAME",
1756 visible in lexical block BLOCK. */
1757
1758struct type *
270140bd 1759lookup_union (const char *name, const struct block *block)
c906108c 1760{
52f0bd74 1761 struct symbol *sym;
c5aa993b 1762 struct type *t;
c906108c 1763
d12307c1 1764 sym = lookup_symbol (name, block, STRUCT_DOMAIN, 0).symbol;
c906108c
SS
1765
1766 if (sym == NULL)
8a3fe4f8 1767 error (_("No union type named %s."), name);
c906108c 1768
c5aa993b 1769 t = SYMBOL_TYPE (sym);
c906108c 1770
78134374 1771 if (t->code () == TYPE_CODE_UNION)
c16abbde 1772 return t;
c906108c 1773
7ba81444
MS
1774 /* If we get here, it's not a union. */
1775 error (_("This context has class, struct or enum %s, not a union."),
1776 name);
c906108c
SS
1777}
1778
c906108c
SS
1779/* Lookup an enum type named "enum NAME",
1780 visible in lexical block BLOCK. */
1781
1782struct type *
270140bd 1783lookup_enum (const char *name, const struct block *block)
c906108c 1784{
52f0bd74 1785 struct symbol *sym;
c906108c 1786
d12307c1 1787 sym = lookup_symbol (name, block, STRUCT_DOMAIN, 0).symbol;
c906108c
SS
1788 if (sym == NULL)
1789 {
8a3fe4f8 1790 error (_("No enum type named %s."), name);
c906108c 1791 }
78134374 1792 if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_ENUM)
c906108c 1793 {
7ba81444
MS
1794 error (_("This context has class, struct or union %s, not an enum."),
1795 name);
c906108c
SS
1796 }
1797 return (SYMBOL_TYPE (sym));
1798}
1799
1800/* Lookup a template type named "template NAME<TYPE>",
1801 visible in lexical block BLOCK. */
1802
1803struct type *
61f4b350 1804lookup_template_type (const char *name, struct type *type,
270140bd 1805 const struct block *block)
c906108c
SS
1806{
1807 struct symbol *sym;
7ba81444 1808 char *nam = (char *)
7d93a1e0 1809 alloca (strlen (name) + strlen (type->name ()) + 4);
d8734c88 1810
c906108c
SS
1811 strcpy (nam, name);
1812 strcat (nam, "<");
7d93a1e0 1813 strcat (nam, type->name ());
0963b4bd 1814 strcat (nam, " >"); /* FIXME, extra space still introduced in gcc? */
c906108c 1815
d12307c1 1816 sym = lookup_symbol (nam, block, VAR_DOMAIN, 0).symbol;
c906108c
SS
1817
1818 if (sym == NULL)
1819 {
8a3fe4f8 1820 error (_("No template type named %s."), name);
c906108c 1821 }
78134374 1822 if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_STRUCT)
c906108c 1823 {
7ba81444
MS
1824 error (_("This context has class, union or enum %s, not a struct."),
1825 name);
c906108c
SS
1826 }
1827 return (SYMBOL_TYPE (sym));
1828}
1829
ef0bd204 1830/* See gdbtypes.h. */
c906108c 1831
ef0bd204
JB
1832struct_elt
1833lookup_struct_elt (struct type *type, const char *name, int noerr)
c906108c
SS
1834{
1835 int i;
1836
1837 for (;;)
1838 {
f168693b 1839 type = check_typedef (type);
78134374
SM
1840 if (type->code () != TYPE_CODE_PTR
1841 && type->code () != TYPE_CODE_REF)
c906108c
SS
1842 break;
1843 type = TYPE_TARGET_TYPE (type);
1844 }
1845
78134374
SM
1846 if (type->code () != TYPE_CODE_STRUCT
1847 && type->code () != TYPE_CODE_UNION)
c906108c 1848 {
2f408ecb
PA
1849 std::string type_name = type_to_string (type);
1850 error (_("Type %s is not a structure or union type."),
1851 type_name.c_str ());
c906108c
SS
1852 }
1853
1f704f76 1854 for (i = type->num_fields () - 1; i >= TYPE_N_BASECLASSES (type); i--)
c906108c 1855 {
0d5cff50 1856 const char *t_field_name = TYPE_FIELD_NAME (type, i);
c906108c 1857
db577aea 1858 if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
c906108c 1859 {
ceacbf6e 1860 return {&type->field (i), TYPE_FIELD_BITPOS (type, i)};
c906108c 1861 }
f5a010c0
PM
1862 else if (!t_field_name || *t_field_name == '\0')
1863 {
ef0bd204 1864 struct_elt elt
940da03e 1865 = lookup_struct_elt (type->field (i).type (), name, 1);
ef0bd204
JB
1866 if (elt.field != NULL)
1867 {
1868 elt.offset += TYPE_FIELD_BITPOS (type, i);
1869 return elt;
1870 }
f5a010c0 1871 }
c906108c
SS
1872 }
1873
1874 /* OK, it's not in this class. Recursively check the baseclasses. */
1875 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
1876 {
ef0bd204
JB
1877 struct_elt elt = lookup_struct_elt (TYPE_BASECLASS (type, i), name, 1);
1878 if (elt.field != NULL)
1879 return elt;
c906108c
SS
1880 }
1881
1882 if (noerr)
ef0bd204 1883 return {nullptr, 0};
c5aa993b 1884
2f408ecb
PA
1885 std::string type_name = type_to_string (type);
1886 error (_("Type %s has no component named %s."), type_name.c_str (), name);
c906108c
SS
1887}
1888
ef0bd204
JB
1889/* See gdbtypes.h. */
1890
1891struct type *
1892lookup_struct_elt_type (struct type *type, const char *name, int noerr)
1893{
1894 struct_elt elt = lookup_struct_elt (type, name, noerr);
1895 if (elt.field != NULL)
b6cdac4b 1896 return elt.field->type ();
ef0bd204
JB
1897 else
1898 return NULL;
1899}
1900
ed3ef339
DE
1901/* Store in *MAX the largest number representable by unsigned integer type
1902 TYPE. */
1903
1904void
1905get_unsigned_type_max (struct type *type, ULONGEST *max)
1906{
1907 unsigned int n;
1908
f168693b 1909 type = check_typedef (type);
c6d940a9 1910 gdb_assert (type->code () == TYPE_CODE_INT && type->is_unsigned ());
ed3ef339
DE
1911 gdb_assert (TYPE_LENGTH (type) <= sizeof (ULONGEST));
1912
1913 /* Written this way to avoid overflow. */
1914 n = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
1915 *max = ((((ULONGEST) 1 << (n - 1)) - 1) << 1) | 1;
1916}
1917
1918/* Store in *MIN, *MAX the smallest and largest numbers representable by
1919 signed integer type TYPE. */
1920
1921void
1922get_signed_type_minmax (struct type *type, LONGEST *min, LONGEST *max)
1923{
1924 unsigned int n;
1925
f168693b 1926 type = check_typedef (type);
c6d940a9 1927 gdb_assert (type->code () == TYPE_CODE_INT && !type->is_unsigned ());
ed3ef339
DE
1928 gdb_assert (TYPE_LENGTH (type) <= sizeof (LONGEST));
1929
1930 n = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
1931 *min = -((ULONGEST) 1 << (n - 1));
1932 *max = ((ULONGEST) 1 << (n - 1)) - 1;
1933}
1934
ae6ae975
DE
1935/* Internal routine called by TYPE_VPTR_FIELDNO to return the value of
1936 cplus_stuff.vptr_fieldno.
1937
1938 cplus_stuff is initialized to cplus_struct_default which does not
1939 set vptr_fieldno to -1 for portability reasons (IWBN to use C99
1940 designated initializers). We cope with that here. */
1941
1942int
1943internal_type_vptr_fieldno (struct type *type)
1944{
f168693b 1945 type = check_typedef (type);
78134374
SM
1946 gdb_assert (type->code () == TYPE_CODE_STRUCT
1947 || type->code () == TYPE_CODE_UNION);
ae6ae975
DE
1948 if (!HAVE_CPLUS_STRUCT (type))
1949 return -1;
1950 return TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_fieldno;
1951}
1952
1953/* Set the value of cplus_stuff.vptr_fieldno. */
1954
1955void
1956set_type_vptr_fieldno (struct type *type, int fieldno)
1957{
f168693b 1958 type = check_typedef (type);
78134374
SM
1959 gdb_assert (type->code () == TYPE_CODE_STRUCT
1960 || type->code () == TYPE_CODE_UNION);
ae6ae975
DE
1961 if (!HAVE_CPLUS_STRUCT (type))
1962 ALLOCATE_CPLUS_STRUCT_TYPE (type);
1963 TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_fieldno = fieldno;
1964}
1965
1966/* Internal routine called by TYPE_VPTR_BASETYPE to return the value of
1967 cplus_stuff.vptr_basetype. */
1968
1969struct type *
1970internal_type_vptr_basetype (struct type *type)
1971{
f168693b 1972 type = check_typedef (type);
78134374
SM
1973 gdb_assert (type->code () == TYPE_CODE_STRUCT
1974 || type->code () == TYPE_CODE_UNION);
ae6ae975
DE
1975 gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_CPLUS_STUFF);
1976 return TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_basetype;
1977}
1978
1979/* Set the value of cplus_stuff.vptr_basetype. */
1980
1981void
1982set_type_vptr_basetype (struct type *type, struct type *basetype)
1983{
f168693b 1984 type = check_typedef (type);
78134374
SM
1985 gdb_assert (type->code () == TYPE_CODE_STRUCT
1986 || type->code () == TYPE_CODE_UNION);
ae6ae975
DE
1987 if (!HAVE_CPLUS_STRUCT (type))
1988 ALLOCATE_CPLUS_STRUCT_TYPE (type);
1989 TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_basetype = basetype;
1990}
1991
81fe8080
DE
1992/* Lookup the vptr basetype/fieldno values for TYPE.
1993 If found store vptr_basetype in *BASETYPEP if non-NULL, and return
1994 vptr_fieldno. Also, if found and basetype is from the same objfile,
1995 cache the results.
1996 If not found, return -1 and ignore BASETYPEP.
1997 Callers should be aware that in some cases (for example,
c906108c 1998 the type or one of its baseclasses is a stub type and we are
d48cc9dd
DJ
1999 debugging a .o file, or the compiler uses DWARF-2 and is not GCC),
2000 this function will not be able to find the
7ba81444 2001 virtual function table pointer, and vptr_fieldno will remain -1 and
81fe8080 2002 vptr_basetype will remain NULL or incomplete. */
c906108c 2003
81fe8080
DE
2004int
2005get_vptr_fieldno (struct type *type, struct type **basetypep)
c906108c 2006{
f168693b 2007 type = check_typedef (type);
c906108c
SS
2008
2009 if (TYPE_VPTR_FIELDNO (type) < 0)
2010 {
2011 int i;
2012
7ba81444 2013 /* We must start at zero in case the first (and only) baseclass
dda83cd7 2014 is virtual (and hence we cannot share the table pointer). */
c906108c
SS
2015 for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
2016 {
81fe8080
DE
2017 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
2018 int fieldno;
2019 struct type *basetype;
2020
2021 fieldno = get_vptr_fieldno (baseclass, &basetype);
2022 if (fieldno >= 0)
c906108c 2023 {
81fe8080 2024 /* If the type comes from a different objfile we can't cache
0963b4bd 2025 it, it may have a different lifetime. PR 2384 */
5ef73790 2026 if (TYPE_OBJFILE (type) == TYPE_OBJFILE (basetype))
81fe8080 2027 {
ae6ae975
DE
2028 set_type_vptr_fieldno (type, fieldno);
2029 set_type_vptr_basetype (type, basetype);
81fe8080
DE
2030 }
2031 if (basetypep)
2032 *basetypep = basetype;
2033 return fieldno;
c906108c
SS
2034 }
2035 }
81fe8080
DE
2036
2037 /* Not found. */
2038 return -1;
2039 }
2040 else
2041 {
2042 if (basetypep)
2043 *basetypep = TYPE_VPTR_BASETYPE (type);
2044 return TYPE_VPTR_FIELDNO (type);
c906108c
SS
2045 }
2046}
2047
44e1a9eb
DJ
2048static void
2049stub_noname_complaint (void)
2050{
b98664d3 2051 complaint (_("stub type has NULL name"));
44e1a9eb
DJ
2052}
2053
a405673c
JB
2054/* Return nonzero if TYPE has a DYN_PROP_BYTE_STRIDE dynamic property
2055 attached to it, and that property has a non-constant value. */
2056
2057static int
2058array_type_has_dynamic_stride (struct type *type)
2059{
24e99c6c 2060 struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_BYTE_STRIDE);
a405673c 2061
8c2e4e06 2062 return (prop != NULL && prop->kind () != PROP_CONST);
a405673c
JB
2063}
2064
d98b7a16 2065/* Worker for is_dynamic_type. */
80180f79 2066
d98b7a16 2067static int
ee715b5a 2068is_dynamic_type_internal (struct type *type, int top_level)
80180f79
SA
2069{
2070 type = check_typedef (type);
2071
e771e4be 2072 /* We only want to recognize references at the outermost level. */
78134374 2073 if (top_level && type->code () == TYPE_CODE_REF)
e771e4be
PMR
2074 type = check_typedef (TYPE_TARGET_TYPE (type));
2075
3cdcd0ce
JB
2076 /* Types that have a dynamic TYPE_DATA_LOCATION are considered
2077 dynamic, even if the type itself is statically defined.
2078 From a user's point of view, this may appear counter-intuitive;
2079 but it makes sense in this context, because the point is to determine
2080 whether any part of the type needs to be resolved before it can
2081 be exploited. */
2082 if (TYPE_DATA_LOCATION (type) != NULL
2083 && (TYPE_DATA_LOCATION_KIND (type) == PROP_LOCEXPR
2084 || TYPE_DATA_LOCATION_KIND (type) == PROP_LOCLIST))
2085 return 1;
2086
3f2f83dd
KB
2087 if (TYPE_ASSOCIATED_PROP (type))
2088 return 1;
2089
2090 if (TYPE_ALLOCATED_PROP (type))
2091 return 1;
2092
24e99c6c 2093 struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS);
8c2e4e06 2094 if (prop != nullptr && prop->kind () != PROP_TYPE)
ef83a141
TT
2095 return 1;
2096
f8e89861
TT
2097 if (TYPE_HAS_DYNAMIC_LENGTH (type))
2098 return 1;
2099
78134374 2100 switch (type->code ())
80180f79 2101 {
6f8a3220 2102 case TYPE_CODE_RANGE:
ddb87a81
JB
2103 {
2104 /* A range type is obviously dynamic if it has at least one
2105 dynamic bound. But also consider the range type to be
2106 dynamic when its subtype is dynamic, even if the bounds
2107 of the range type are static. It allows us to assume that
2108 the subtype of a static range type is also static. */
599088e3 2109 return (!has_static_range (type->bounds ())
ee715b5a 2110 || is_dynamic_type_internal (TYPE_TARGET_TYPE (type), 0));
ddb87a81 2111 }
6f8a3220 2112
216a7e6b
AB
2113 case TYPE_CODE_STRING:
2114 /* Strings are very much like an array of characters, and can be
2115 treated as one here. */
80180f79
SA
2116 case TYPE_CODE_ARRAY:
2117 {
1f704f76 2118 gdb_assert (type->num_fields () == 1);
6f8a3220 2119
a405673c 2120 /* The array is dynamic if either the bounds are dynamic... */
3d967001 2121 if (is_dynamic_type_internal (type->index_type (), 0))
80180f79 2122 return 1;
a405673c
JB
2123 /* ... or the elements it contains have a dynamic contents... */
2124 if (is_dynamic_type_internal (TYPE_TARGET_TYPE (type), 0))
2125 return 1;
2126 /* ... or if it has a dynamic stride... */
2127 if (array_type_has_dynamic_stride (type))
2128 return 1;
2129 return 0;
80180f79 2130 }
012370f6
TT
2131
2132 case TYPE_CODE_STRUCT:
2133 case TYPE_CODE_UNION:
2134 {
2135 int i;
2136
7d79de9a
TT
2137 bool is_cplus = HAVE_CPLUS_STRUCT (type);
2138
1f704f76 2139 for (i = 0; i < type->num_fields (); ++i)
7d79de9a
TT
2140 {
2141 /* Static fields can be ignored here. */
ceacbf6e 2142 if (field_is_static (&type->field (i)))
7d79de9a
TT
2143 continue;
2144 /* If the field has dynamic type, then so does TYPE. */
940da03e 2145 if (is_dynamic_type_internal (type->field (i).type (), 0))
7d79de9a
TT
2146 return 1;
2147 /* If the field is at a fixed offset, then it is not
2148 dynamic. */
2149 if (TYPE_FIELD_LOC_KIND (type, i) != FIELD_LOC_KIND_DWARF_BLOCK)
2150 continue;
2151 /* Do not consider C++ virtual base types to be dynamic
2152 due to the field's offset being dynamic; these are
2153 handled via other means. */
2154 if (is_cplus && BASETYPE_VIA_VIRTUAL (type, i))
2155 continue;
012370f6 2156 return 1;
7d79de9a 2157 }
012370f6
TT
2158 }
2159 break;
80180f79 2160 }
92e2a17f
TT
2161
2162 return 0;
80180f79
SA
2163}
2164
d98b7a16
TT
2165/* See gdbtypes.h. */
2166
2167int
2168is_dynamic_type (struct type *type)
2169{
ee715b5a 2170 return is_dynamic_type_internal (type, 1);
d98b7a16
TT
2171}
2172
df25ebbd 2173static struct type *resolve_dynamic_type_internal
ee715b5a 2174 (struct type *type, struct property_addr_info *addr_stack, int top_level);
d98b7a16 2175
df25ebbd
JB
2176/* Given a dynamic range type (dyn_range_type) and a stack of
2177 struct property_addr_info elements, return a static version
2178 of that type. */
d190df30 2179
80180f79 2180static struct type *
df25ebbd
JB
2181resolve_dynamic_range (struct type *dyn_range_type,
2182 struct property_addr_info *addr_stack)
80180f79
SA
2183{
2184 CORE_ADDR value;
ddb87a81 2185 struct type *static_range_type, *static_target_type;
5bbd8269 2186 struct dynamic_prop low_bound, high_bound, stride;
80180f79 2187
78134374 2188 gdb_assert (dyn_range_type->code () == TYPE_CODE_RANGE);
80180f79 2189
599088e3 2190 const struct dynamic_prop *prop = &dyn_range_type->bounds ()->low;
63e43d3a 2191 if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
8c2e4e06 2192 low_bound.set_const_val (value);
80180f79 2193 else
8c2e4e06 2194 low_bound.set_undefined ();
80180f79 2195
599088e3 2196 prop = &dyn_range_type->bounds ()->high;
63e43d3a 2197 if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
80180f79 2198 {
8c2e4e06 2199 high_bound.set_const_val (value);
c451ebe5 2200
599088e3 2201 if (dyn_range_type->bounds ()->flag_upper_bound_is_count)
8c2e4e06
SM
2202 high_bound.set_const_val
2203 (low_bound.const_val () + high_bound.const_val () - 1);
80180f79
SA
2204 }
2205 else
8c2e4e06 2206 high_bound.set_undefined ();
80180f79 2207
599088e3
SM
2208 bool byte_stride_p = dyn_range_type->bounds ()->flag_is_byte_stride;
2209 prop = &dyn_range_type->bounds ()->stride;
5bbd8269
AB
2210 if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
2211 {
8c2e4e06 2212 stride.set_const_val (value);
5bbd8269
AB
2213
2214 /* If we have a bit stride that is not an exact number of bytes then
2215 I really don't think this is going to work with current GDB, the
2216 array indexing code in GDB seems to be pretty heavily tied to byte
2217 offsets right now. Assuming 8 bits in a byte. */
2218 struct gdbarch *gdbarch = get_type_arch (dyn_range_type);
2219 int unit_size = gdbarch_addressable_memory_unit_size (gdbarch);
2220 if (!byte_stride_p && (value % (unit_size * 8)) != 0)
2221 error (_("bit strides that are not a multiple of the byte size "
2222 "are currently not supported"));
2223 }
2224 else
2225 {
8c2e4e06 2226 stride.set_undefined ();
5bbd8269
AB
2227 byte_stride_p = true;
2228 }
2229
ddb87a81
JB
2230 static_target_type
2231 = resolve_dynamic_type_internal (TYPE_TARGET_TYPE (dyn_range_type),
ee715b5a 2232 addr_stack, 0);
599088e3 2233 LONGEST bias = dyn_range_type->bounds ()->bias;
5bbd8269
AB
2234 static_range_type = create_range_type_with_stride
2235 (copy_type (dyn_range_type), static_target_type,
2236 &low_bound, &high_bound, bias, &stride, byte_stride_p);
599088e3 2237 static_range_type->bounds ()->flag_bound_evaluated = 1;
6f8a3220
JB
2238 return static_range_type;
2239}
2240
216a7e6b
AB
2241/* Resolves dynamic bound values of an array or string type TYPE to static
2242 ones. ADDR_STACK is a stack of struct property_addr_info to be used if
2243 needed during the dynamic resolution. */
6f8a3220
JB
2244
2245static struct type *
216a7e6b
AB
2246resolve_dynamic_array_or_string (struct type *type,
2247 struct property_addr_info *addr_stack)
6f8a3220
JB
2248{
2249 CORE_ADDR value;
2250 struct type *elt_type;
2251 struct type *range_type;
2252 struct type *ary_dim;
3f2f83dd 2253 struct dynamic_prop *prop;
a405673c 2254 unsigned int bit_stride = 0;
6f8a3220 2255
216a7e6b
AB
2256 /* For dynamic type resolution strings can be treated like arrays of
2257 characters. */
78134374
SM
2258 gdb_assert (type->code () == TYPE_CODE_ARRAY
2259 || type->code () == TYPE_CODE_STRING);
6f8a3220 2260
3f2f83dd
KB
2261 type = copy_type (type);
2262
6f8a3220 2263 elt_type = type;
3d967001 2264 range_type = check_typedef (elt_type->index_type ());
df25ebbd 2265 range_type = resolve_dynamic_range (range_type, addr_stack);
6f8a3220 2266
3f2f83dd
KB
2267 /* Resolve allocated/associated here before creating a new array type, which
2268 will update the length of the array accordingly. */
2269 prop = TYPE_ALLOCATED_PROP (type);
2270 if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
8c2e4e06
SM
2271 prop->set_const_val (value);
2272
3f2f83dd
KB
2273 prop = TYPE_ASSOCIATED_PROP (type);
2274 if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
8c2e4e06 2275 prop->set_const_val (value);
3f2f83dd 2276
80180f79
SA
2277 ary_dim = check_typedef (TYPE_TARGET_TYPE (elt_type));
2278
78134374 2279 if (ary_dim != NULL && ary_dim->code () == TYPE_CODE_ARRAY)
216a7e6b 2280 elt_type = resolve_dynamic_array_or_string (ary_dim, addr_stack);
80180f79
SA
2281 else
2282 elt_type = TYPE_TARGET_TYPE (type);
2283
24e99c6c 2284 prop = type->dyn_prop (DYN_PROP_BYTE_STRIDE);
a405673c
JB
2285 if (prop != NULL)
2286 {
603490bf 2287 if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
a405673c 2288 {
7aa91313 2289 type->remove_dyn_prop (DYN_PROP_BYTE_STRIDE);
a405673c
JB
2290 bit_stride = (unsigned int) (value * 8);
2291 }
2292 else
2293 {
2294 /* Could be a bug in our code, but it could also happen
2295 if the DWARF info is not correct. Issue a warning,
2296 and assume no byte/bit stride (leave bit_stride = 0). */
2297 warning (_("cannot determine array stride for type %s"),
7d93a1e0 2298 type->name () ? type->name () : "<no name>");
a405673c
JB
2299 }
2300 }
2301 else
2302 bit_stride = TYPE_FIELD_BITSIZE (type, 0);
2303
2304 return create_array_type_with_stride (type, elt_type, range_type, NULL,
dda83cd7 2305 bit_stride);
80180f79
SA
2306}
2307
012370f6 2308/* Resolve dynamic bounds of members of the union TYPE to static
df25ebbd
JB
2309 bounds. ADDR_STACK is a stack of struct property_addr_info
2310 to be used if needed during the dynamic resolution. */
012370f6
TT
2311
2312static struct type *
df25ebbd
JB
2313resolve_dynamic_union (struct type *type,
2314 struct property_addr_info *addr_stack)
012370f6
TT
2315{
2316 struct type *resolved_type;
2317 int i;
2318 unsigned int max_len = 0;
2319
78134374 2320 gdb_assert (type->code () == TYPE_CODE_UNION);
012370f6
TT
2321
2322 resolved_type = copy_type (type);
3cabb6b0
SM
2323 resolved_type->set_fields
2324 ((struct field *)
2325 TYPE_ALLOC (resolved_type,
2326 resolved_type->num_fields () * sizeof (struct field)));
80fc5e77
SM
2327 memcpy (resolved_type->fields (),
2328 type->fields (),
1f704f76
SM
2329 resolved_type->num_fields () * sizeof (struct field));
2330 for (i = 0; i < resolved_type->num_fields (); ++i)
012370f6
TT
2331 {
2332 struct type *t;
2333
ceacbf6e 2334 if (field_is_static (&type->field (i)))
012370f6
TT
2335 continue;
2336
940da03e 2337 t = resolve_dynamic_type_internal (resolved_type->field (i).type (),
ee715b5a 2338 addr_stack, 0);
5d14b6e5 2339 resolved_type->field (i).set_type (t);
2f33032a
KS
2340
2341 struct type *real_type = check_typedef (t);
2342 if (TYPE_LENGTH (real_type) > max_len)
2343 max_len = TYPE_LENGTH (real_type);
012370f6
TT
2344 }
2345
2346 TYPE_LENGTH (resolved_type) = max_len;
2347 return resolved_type;
2348}
2349
ef83a141
TT
2350/* See gdbtypes.h. */
2351
2352bool
2353variant::matches (ULONGEST value, bool is_unsigned) const
2354{
2355 for (const discriminant_range &range : discriminants)
2356 if (range.contains (value, is_unsigned))
2357 return true;
2358 return false;
2359}
2360
2361static void
2362compute_variant_fields_inner (struct type *type,
2363 struct property_addr_info *addr_stack,
2364 const variant_part &part,
2365 std::vector<bool> &flags);
2366
2367/* A helper function to determine which variant fields will be active.
2368 This handles both the variant's direct fields, and any variant
2369 parts embedded in this variant. TYPE is the type we're examining.
2370 ADDR_STACK holds information about the concrete object. VARIANT is
2371 the current variant to be handled. FLAGS is where the results are
2372 stored -- this function sets the Nth element in FLAGS if the
2373 corresponding field is enabled. ENABLED is whether this variant is
2374 enabled or not. */
2375
2376static void
2377compute_variant_fields_recurse (struct type *type,
2378 struct property_addr_info *addr_stack,
2379 const variant &variant,
2380 std::vector<bool> &flags,
2381 bool enabled)
2382{
2383 for (int field = variant.first_field; field < variant.last_field; ++field)
2384 flags[field] = enabled;
2385
2386 for (const variant_part &new_part : variant.parts)
2387 {
2388 if (enabled)
2389 compute_variant_fields_inner (type, addr_stack, new_part, flags);
2390 else
2391 {
2392 for (const auto &sub_variant : new_part.variants)
2393 compute_variant_fields_recurse (type, addr_stack, sub_variant,
2394 flags, enabled);
2395 }
2396 }
2397}
2398
2399/* A helper function to determine which variant fields will be active.
2400 This evaluates the discriminant, decides which variant (if any) is
2401 active, and then updates FLAGS to reflect which fields should be
2402 available. TYPE is the type we're examining. ADDR_STACK holds
2403 information about the concrete object. VARIANT is the current
2404 variant to be handled. FLAGS is where the results are stored --
2405 this function sets the Nth element in FLAGS if the corresponding
2406 field is enabled. */
2407
2408static void
2409compute_variant_fields_inner (struct type *type,
2410 struct property_addr_info *addr_stack,
2411 const variant_part &part,
2412 std::vector<bool> &flags)
2413{
2414 /* Evaluate the discriminant. */
2415 gdb::optional<ULONGEST> discr_value;
2416 if (part.discriminant_index != -1)
2417 {
2418 int idx = part.discriminant_index;
2419
2420 if (TYPE_FIELD_LOC_KIND (type, idx) != FIELD_LOC_KIND_BITPOS)
2421 error (_("Cannot determine struct field location"
2422 " (invalid location kind)"));
2423
b249d2c2
TT
2424 if (addr_stack->valaddr.data () != NULL)
2425 discr_value = unpack_field_as_long (type, addr_stack->valaddr.data (),
2426 idx);
ef83a141
TT
2427 else
2428 {
2429 CORE_ADDR addr = (addr_stack->addr
2430 + (TYPE_FIELD_BITPOS (type, idx)
2431 / TARGET_CHAR_BIT));
2432
2433 LONGEST bitsize = TYPE_FIELD_BITSIZE (type, idx);
2434 LONGEST size = bitsize / 8;
2435 if (size == 0)
940da03e 2436 size = TYPE_LENGTH (type->field (idx).type ());
ef83a141
TT
2437
2438 gdb_byte bits[sizeof (ULONGEST)];
2439 read_memory (addr, bits, size);
2440
2441 LONGEST bitpos = (TYPE_FIELD_BITPOS (type, idx)
2442 % TARGET_CHAR_BIT);
2443
940da03e 2444 discr_value = unpack_bits_as_long (type->field (idx).type (),
ef83a141
TT
2445 bits, bitpos, bitsize);
2446 }
2447 }
2448
2449 /* Go through each variant and see which applies. */
2450 const variant *default_variant = nullptr;
2451 const variant *applied_variant = nullptr;
2452 for (const auto &variant : part.variants)
2453 {
2454 if (variant.is_default ())
2455 default_variant = &variant;
2456 else if (discr_value.has_value ()
2457 && variant.matches (*discr_value, part.is_unsigned))
2458 {
2459 applied_variant = &variant;
2460 break;
2461 }
2462 }
2463 if (applied_variant == nullptr)
2464 applied_variant = default_variant;
2465
2466 for (const auto &variant : part.variants)
2467 compute_variant_fields_recurse (type, addr_stack, variant,
2468 flags, applied_variant == &variant);
2469}
2470
2471/* Determine which variant fields are available in TYPE. The enabled
2472 fields are stored in RESOLVED_TYPE. ADDR_STACK holds information
2473 about the concrete object. PARTS describes the top-level variant
2474 parts for this type. */
2475
2476static void
2477compute_variant_fields (struct type *type,
2478 struct type *resolved_type,
2479 struct property_addr_info *addr_stack,
2480 const gdb::array_view<variant_part> &parts)
2481{
2482 /* Assume all fields are included by default. */
1f704f76 2483 std::vector<bool> flags (resolved_type->num_fields (), true);
ef83a141
TT
2484
2485 /* Now disable fields based on the variants that control them. */
2486 for (const auto &part : parts)
2487 compute_variant_fields_inner (type, addr_stack, part, flags);
2488
5e33d5f4
SM
2489 resolved_type->set_num_fields
2490 (std::count (flags.begin (), flags.end (), true));
3cabb6b0
SM
2491 resolved_type->set_fields
2492 ((struct field *)
2493 TYPE_ALLOC (resolved_type,
2494 resolved_type->num_fields () * sizeof (struct field)));
2495
ef83a141 2496 int out = 0;
1f704f76 2497 for (int i = 0; i < type->num_fields (); ++i)
ef83a141
TT
2498 {
2499 if (!flags[i])
2500 continue;
2501
ceacbf6e 2502 resolved_type->field (out) = type->field (i);
ef83a141
TT
2503 ++out;
2504 }
2505}
2506
012370f6 2507/* Resolve dynamic bounds of members of the struct TYPE to static
df25ebbd
JB
2508 bounds. ADDR_STACK is a stack of struct property_addr_info to
2509 be used if needed during the dynamic resolution. */
012370f6
TT
2510
2511static struct type *
df25ebbd
JB
2512resolve_dynamic_struct (struct type *type,
2513 struct property_addr_info *addr_stack)
012370f6
TT
2514{
2515 struct type *resolved_type;
2516 int i;
6908c509 2517 unsigned resolved_type_bit_length = 0;
012370f6 2518
78134374 2519 gdb_assert (type->code () == TYPE_CODE_STRUCT);
1f704f76 2520 gdb_assert (type->num_fields () > 0);
012370f6
TT
2521
2522 resolved_type = copy_type (type);
ef83a141 2523
24e99c6c 2524 dynamic_prop *variant_prop = resolved_type->dyn_prop (DYN_PROP_VARIANT_PARTS);
8c2e4e06 2525 if (variant_prop != nullptr && variant_prop->kind () == PROP_VARIANT_PARTS)
ef83a141
TT
2526 {
2527 compute_variant_fields (type, resolved_type, addr_stack,
8c2e4e06 2528 *variant_prop->variant_parts ());
ef83a141
TT
2529 /* We want to leave the property attached, so that the Rust code
2530 can tell whether the type was originally an enum. */
8c2e4e06 2531 variant_prop->set_original_type (type);
ef83a141
TT
2532 }
2533 else
2534 {
3cabb6b0
SM
2535 resolved_type->set_fields
2536 ((struct field *)
2537 TYPE_ALLOC (resolved_type,
2538 resolved_type->num_fields () * sizeof (struct field)));
80fc5e77
SM
2539 memcpy (resolved_type->fields (),
2540 type->fields (),
1f704f76 2541 resolved_type->num_fields () * sizeof (struct field));
ef83a141
TT
2542 }
2543
1f704f76 2544 for (i = 0; i < resolved_type->num_fields (); ++i)
012370f6 2545 {
6908c509 2546 unsigned new_bit_length;
df25ebbd 2547 struct property_addr_info pinfo;
012370f6 2548
ceacbf6e 2549 if (field_is_static (&resolved_type->field (i)))
012370f6
TT
2550 continue;
2551
7d79de9a
TT
2552 if (TYPE_FIELD_LOC_KIND (resolved_type, i) == FIELD_LOC_KIND_DWARF_BLOCK)
2553 {
2554 struct dwarf2_property_baton baton;
2555 baton.property_type
940da03e 2556 = lookup_pointer_type (resolved_type->field (i).type ());
7d79de9a
TT
2557 baton.locexpr = *TYPE_FIELD_DWARF_BLOCK (resolved_type, i);
2558
2559 struct dynamic_prop prop;
8c2e4e06 2560 prop.set_locexpr (&baton);
7d79de9a
TT
2561
2562 CORE_ADDR addr;
2563 if (dwarf2_evaluate_property (&prop, nullptr, addr_stack, &addr,
2564 true))
ceacbf6e 2565 SET_FIELD_BITPOS (resolved_type->field (i),
7d79de9a
TT
2566 TARGET_CHAR_BIT * (addr - addr_stack->addr));
2567 }
2568
6908c509
JB
2569 /* As we know this field is not a static field, the field's
2570 field_loc_kind should be FIELD_LOC_KIND_BITPOS. Verify
2571 this is the case, but only trigger a simple error rather
2572 than an internal error if that fails. While failing
2573 that verification indicates a bug in our code, the error
2574 is not severe enough to suggest to the user he stops
2575 his debugging session because of it. */
ef83a141 2576 if (TYPE_FIELD_LOC_KIND (resolved_type, i) != FIELD_LOC_KIND_BITPOS)
6908c509
JB
2577 error (_("Cannot determine struct field location"
2578 " (invalid location kind)"));
df25ebbd 2579
940da03e 2580 pinfo.type = check_typedef (resolved_type->field (i).type ());
c3345124 2581 pinfo.valaddr = addr_stack->valaddr;
9920b434
BH
2582 pinfo.addr
2583 = (addr_stack->addr
2584 + (TYPE_FIELD_BITPOS (resolved_type, i) / TARGET_CHAR_BIT));
df25ebbd
JB
2585 pinfo.next = addr_stack;
2586
5d14b6e5 2587 resolved_type->field (i).set_type
940da03e 2588 (resolve_dynamic_type_internal (resolved_type->field (i).type (),
5d14b6e5 2589 &pinfo, 0));
df25ebbd
JB
2590 gdb_assert (TYPE_FIELD_LOC_KIND (resolved_type, i)
2591 == FIELD_LOC_KIND_BITPOS);
2592
6908c509
JB
2593 new_bit_length = TYPE_FIELD_BITPOS (resolved_type, i);
2594 if (TYPE_FIELD_BITSIZE (resolved_type, i) != 0)
2595 new_bit_length += TYPE_FIELD_BITSIZE (resolved_type, i);
2596 else
2f33032a
KS
2597 {
2598 struct type *real_type
2599 = check_typedef (resolved_type->field (i).type ());
2600
2601 new_bit_length += (TYPE_LENGTH (real_type) * TARGET_CHAR_BIT);
2602 }
6908c509
JB
2603
2604 /* Normally, we would use the position and size of the last field
2605 to determine the size of the enclosing structure. But GCC seems
2606 to be encoding the position of some fields incorrectly when
2607 the struct contains a dynamic field that is not placed last.
2608 So we compute the struct size based on the field that has
2609 the highest position + size - probably the best we can do. */
2610 if (new_bit_length > resolved_type_bit_length)
2611 resolved_type_bit_length = new_bit_length;
012370f6
TT
2612 }
2613
9920b434
BH
2614 /* The length of a type won't change for fortran, but it does for C and Ada.
2615 For fortran the size of dynamic fields might change over time but not the
2616 type length of the structure. If we adapt it, we run into problems
2617 when calculating the element offset for arrays of structs. */
2618 if (current_language->la_language != language_fortran)
2619 TYPE_LENGTH (resolved_type)
2620 = (resolved_type_bit_length + TARGET_CHAR_BIT - 1) / TARGET_CHAR_BIT;
6908c509 2621
9e195661
PMR
2622 /* The Ada language uses this field as a cache for static fixed types: reset
2623 it as RESOLVED_TYPE must have its own static fixed type. */
2624 TYPE_TARGET_TYPE (resolved_type) = NULL;
2625
012370f6
TT
2626 return resolved_type;
2627}
2628
d98b7a16 2629/* Worker for resolved_dynamic_type. */
80180f79 2630
d98b7a16 2631static struct type *
df25ebbd 2632resolve_dynamic_type_internal (struct type *type,
ee715b5a
PMR
2633 struct property_addr_info *addr_stack,
2634 int top_level)
80180f79
SA
2635{
2636 struct type *real_type = check_typedef (type);
f8e89861 2637 struct type *resolved_type = nullptr;
d9823cbb 2638 struct dynamic_prop *prop;
3cdcd0ce 2639 CORE_ADDR value;
80180f79 2640
ee715b5a 2641 if (!is_dynamic_type_internal (real_type, top_level))
80180f79
SA
2642 return type;
2643
f8e89861
TT
2644 gdb::optional<CORE_ADDR> type_length;
2645 prop = TYPE_DYNAMIC_LENGTH (type);
2646 if (prop != NULL
2647 && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
2648 type_length = value;
2649
78134374 2650 if (type->code () == TYPE_CODE_TYPEDEF)
6f8a3220 2651 {
cac9b138
JK
2652 resolved_type = copy_type (type);
2653 TYPE_TARGET_TYPE (resolved_type)
ee715b5a
PMR
2654 = resolve_dynamic_type_internal (TYPE_TARGET_TYPE (type), addr_stack,
2655 top_level);
5537b577
JK
2656 }
2657 else
2658 {
2659 /* Before trying to resolve TYPE, make sure it is not a stub. */
2660 type = real_type;
012370f6 2661
78134374 2662 switch (type->code ())
5537b577 2663 {
e771e4be
PMR
2664 case TYPE_CODE_REF:
2665 {
2666 struct property_addr_info pinfo;
2667
2668 pinfo.type = check_typedef (TYPE_TARGET_TYPE (type));
b249d2c2
TT
2669 pinfo.valaddr = {};
2670 if (addr_stack->valaddr.data () != NULL)
2671 pinfo.addr = extract_typed_address (addr_stack->valaddr.data (),
2672 type);
c3345124
JB
2673 else
2674 pinfo.addr = read_memory_typed_address (addr_stack->addr, type);
e771e4be
PMR
2675 pinfo.next = addr_stack;
2676
2677 resolved_type = copy_type (type);
2678 TYPE_TARGET_TYPE (resolved_type)
2679 = resolve_dynamic_type_internal (TYPE_TARGET_TYPE (type),
2680 &pinfo, top_level);
2681 break;
2682 }
2683
216a7e6b
AB
2684 case TYPE_CODE_STRING:
2685 /* Strings are very much like an array of characters, and can be
2686 treated as one here. */
5537b577 2687 case TYPE_CODE_ARRAY:
216a7e6b 2688 resolved_type = resolve_dynamic_array_or_string (type, addr_stack);
5537b577
JK
2689 break;
2690
2691 case TYPE_CODE_RANGE:
df25ebbd 2692 resolved_type = resolve_dynamic_range (type, addr_stack);
5537b577
JK
2693 break;
2694
2695 case TYPE_CODE_UNION:
df25ebbd 2696 resolved_type = resolve_dynamic_union (type, addr_stack);
5537b577
JK
2697 break;
2698
2699 case TYPE_CODE_STRUCT:
df25ebbd 2700 resolved_type = resolve_dynamic_struct (type, addr_stack);
5537b577
JK
2701 break;
2702 }
6f8a3220 2703 }
80180f79 2704
f8e89861
TT
2705 if (resolved_type == nullptr)
2706 return type;
2707
2708 if (type_length.has_value ())
2709 {
2710 TYPE_LENGTH (resolved_type) = *type_length;
7aa91313 2711 resolved_type->remove_dyn_prop (DYN_PROP_BYTE_SIZE);
f8e89861
TT
2712 }
2713
3cdcd0ce
JB
2714 /* Resolve data_location attribute. */
2715 prop = TYPE_DATA_LOCATION (resolved_type);
63e43d3a
PMR
2716 if (prop != NULL
2717 && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
a5c641b5
AB
2718 {
2719 /* Start of Fortran hack. See comment in f-lang.h for what is going
2720 on here.*/
2721 if (current_language->la_language == language_fortran
2722 && resolved_type->code () == TYPE_CODE_ARRAY)
2723 value = fortran_adjust_dynamic_array_base_address_hack (resolved_type,
2724 value);
2725 /* End of Fortran hack. */
2726 prop->set_const_val (value);
2727 }
3cdcd0ce 2728
80180f79
SA
2729 return resolved_type;
2730}
2731
d98b7a16
TT
2732/* See gdbtypes.h */
2733
2734struct type *
b249d2c2
TT
2735resolve_dynamic_type (struct type *type,
2736 gdb::array_view<const gdb_byte> valaddr,
c3345124 2737 CORE_ADDR addr)
d98b7a16 2738{
c3345124
JB
2739 struct property_addr_info pinfo
2740 = {check_typedef (type), valaddr, addr, NULL};
df25ebbd 2741
ee715b5a 2742 return resolve_dynamic_type_internal (type, &pinfo, 1);
d98b7a16
TT
2743}
2744
d9823cbb
KB
2745/* See gdbtypes.h */
2746
24e99c6c
SM
2747dynamic_prop *
2748type::dyn_prop (dynamic_prop_node_kind prop_kind) const
d9823cbb 2749{
98d48915 2750 dynamic_prop_list *node = this->main_type->dyn_prop_list;
d9823cbb
KB
2751
2752 while (node != NULL)
2753 {
2754 if (node->prop_kind == prop_kind)
dda83cd7 2755 return &node->prop;
d9823cbb
KB
2756 node = node->next;
2757 }
2758 return NULL;
2759}
2760
2761/* See gdbtypes.h */
2762
2763void
5c54719c 2764type::add_dyn_prop (dynamic_prop_node_kind prop_kind, dynamic_prop prop)
d9823cbb
KB
2765{
2766 struct dynamic_prop_list *temp;
2767
5c54719c 2768 gdb_assert (TYPE_OBJFILE_OWNED (this));
d9823cbb 2769
5c54719c 2770 temp = XOBNEW (&TYPE_OBJFILE (this)->objfile_obstack,
50a82047 2771 struct dynamic_prop_list);
d9823cbb 2772 temp->prop_kind = prop_kind;
283a9958 2773 temp->prop = prop;
98d48915 2774 temp->next = this->main_type->dyn_prop_list;
d9823cbb 2775
98d48915 2776 this->main_type->dyn_prop_list = temp;
d9823cbb
KB
2777}
2778
7aa91313 2779/* See gdbtypes.h. */
9920b434
BH
2780
2781void
7aa91313 2782type::remove_dyn_prop (dynamic_prop_node_kind kind)
9920b434
BH
2783{
2784 struct dynamic_prop_list *prev_node, *curr_node;
2785
98d48915 2786 curr_node = this->main_type->dyn_prop_list;
9920b434
BH
2787 prev_node = NULL;
2788
2789 while (NULL != curr_node)
2790 {
7aa91313 2791 if (curr_node->prop_kind == kind)
9920b434
BH
2792 {
2793 /* Update the linked list but don't free anything.
2794 The property was allocated on objstack and it is not known
2795 if we are on top of it. Nevertheless, everything is released
2796 when the complete objstack is freed. */
2797 if (NULL == prev_node)
98d48915 2798 this->main_type->dyn_prop_list = curr_node->next;
9920b434
BH
2799 else
2800 prev_node->next = curr_node->next;
2801
2802 return;
2803 }
2804
2805 prev_node = curr_node;
2806 curr_node = curr_node->next;
2807 }
2808}
d9823cbb 2809
92163a10
JK
2810/* Find the real type of TYPE. This function returns the real type,
2811 after removing all layers of typedefs, and completing opaque or stub
2812 types. Completion changes the TYPE argument, but stripping of
2813 typedefs does not.
2814
2815 Instance flags (e.g. const/volatile) are preserved as typedefs are
2816 stripped. If necessary a new qualified form of the underlying type
2817 is created.
2818
2819 NOTE: This will return a typedef if TYPE_TARGET_TYPE for the typedef has
2820 not been computed and we're either in the middle of reading symbols, or
2821 there was no name for the typedef in the debug info.
2822
9bc118a5
DE
2823 NOTE: Lookup of opaque types can throw errors for invalid symbol files.
2824 QUITs in the symbol reading code can also throw.
2825 Thus this function can throw an exception.
2826
92163a10
JK
2827 If TYPE is a TYPE_CODE_TYPEDEF, its length is updated to the length of
2828 the target type.
c906108c
SS
2829
2830 If this is a stubbed struct (i.e. declared as struct foo *), see if
0963b4bd 2831 we can find a full definition in some other file. If so, copy this
7ba81444
MS
2832 definition, so we can use it in future. There used to be a comment
2833 (but not any code) that if we don't find a full definition, we'd
2834 set a flag so we don't spend time in the future checking the same
2835 type. That would be a mistake, though--we might load in more
92163a10 2836 symbols which contain a full definition for the type. */
c906108c
SS
2837
2838struct type *
a02fd225 2839check_typedef (struct type *type)
c906108c
SS
2840{
2841 struct type *orig_type = type;
a02fd225 2842
423c0af8
MS
2843 gdb_assert (type);
2844
314ad88d
PA
2845 /* While we're removing typedefs, we don't want to lose qualifiers.
2846 E.g., const/volatile. */
2847 type_instance_flags instance_flags = type->instance_flags ();
2848
78134374 2849 while (type->code () == TYPE_CODE_TYPEDEF)
c906108c
SS
2850 {
2851 if (!TYPE_TARGET_TYPE (type))
2852 {
0d5cff50 2853 const char *name;
c906108c
SS
2854 struct symbol *sym;
2855
2856 /* It is dangerous to call lookup_symbol if we are currently
7ba81444 2857 reading a symtab. Infinite recursion is one danger. */
c906108c 2858 if (currently_reading_symtab)
92163a10 2859 return make_qualified_type (type, instance_flags, NULL);
c906108c 2860
7d93a1e0 2861 name = type->name ();
e86ca25f
TT
2862 /* FIXME: shouldn't we look in STRUCT_DOMAIN and/or
2863 VAR_DOMAIN as appropriate? */
c906108c
SS
2864 if (name == NULL)
2865 {
23136709 2866 stub_noname_complaint ();
92163a10 2867 return make_qualified_type (type, instance_flags, NULL);
c906108c 2868 }
d12307c1 2869 sym = lookup_symbol (name, 0, STRUCT_DOMAIN, 0).symbol;
c906108c
SS
2870 if (sym)
2871 TYPE_TARGET_TYPE (type) = SYMBOL_TYPE (sym);
7ba81444 2872 else /* TYPE_CODE_UNDEF */
e9bb382b 2873 TYPE_TARGET_TYPE (type) = alloc_type_arch (get_type_arch (type));
c906108c
SS
2874 }
2875 type = TYPE_TARGET_TYPE (type);
c906108c 2876
92163a10
JK
2877 /* Preserve the instance flags as we traverse down the typedef chain.
2878
2879 Handling address spaces/classes is nasty, what do we do if there's a
2880 conflict?
2881 E.g., what if an outer typedef marks the type as class_1 and an inner
2882 typedef marks the type as class_2?
2883 This is the wrong place to do such error checking. We leave it to
2884 the code that created the typedef in the first place to flag the
2885 error. We just pick the outer address space (akin to letting the
2886 outer cast in a chain of casting win), instead of assuming
2887 "it can't happen". */
2888 {
314ad88d
PA
2889 const type_instance_flags ALL_SPACES
2890 = (TYPE_INSTANCE_FLAG_CODE_SPACE
2891 | TYPE_INSTANCE_FLAG_DATA_SPACE);
2892 const type_instance_flags ALL_CLASSES
2893 = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL;
2894
2895 type_instance_flags new_instance_flags = type->instance_flags ();
92163a10
JK
2896
2897 /* Treat code vs data spaces and address classes separately. */
2898 if ((instance_flags & ALL_SPACES) != 0)
2899 new_instance_flags &= ~ALL_SPACES;
2900 if ((instance_flags & ALL_CLASSES) != 0)
2901 new_instance_flags &= ~ALL_CLASSES;
2902
2903 instance_flags |= new_instance_flags;
2904 }
2905 }
a02fd225 2906
7ba81444
MS
2907 /* If this is a struct/class/union with no fields, then check
2908 whether a full definition exists somewhere else. This is for
2909 systems where a type definition with no fields is issued for such
2910 types, instead of identifying them as stub types in the first
2911 place. */
c5aa993b 2912
7ba81444
MS
2913 if (TYPE_IS_OPAQUE (type)
2914 && opaque_type_resolution
2915 && !currently_reading_symtab)
c906108c 2916 {
7d93a1e0 2917 const char *name = type->name ();
c5aa993b 2918 struct type *newtype;
d8734c88 2919
c906108c
SS
2920 if (name == NULL)
2921 {
23136709 2922 stub_noname_complaint ();
92163a10 2923 return make_qualified_type (type, instance_flags, NULL);
c906108c
SS
2924 }
2925 newtype = lookup_transparent_type (name);
ad766c0a 2926
c906108c 2927 if (newtype)
ad766c0a 2928 {
7ba81444
MS
2929 /* If the resolved type and the stub are in the same
2930 objfile, then replace the stub type with the real deal.
2931 But if they're in separate objfiles, leave the stub
2932 alone; we'll just look up the transparent type every time
2933 we call check_typedef. We can't create pointers between
2934 types allocated to different objfiles, since they may
2935 have different lifetimes. Trying to copy NEWTYPE over to
2936 TYPE's objfile is pointless, too, since you'll have to
2937 move over any other types NEWTYPE refers to, which could
2938 be an unbounded amount of stuff. */
ad766c0a 2939 if (TYPE_OBJFILE (newtype) == TYPE_OBJFILE (type))
10242f36 2940 type = make_qualified_type (newtype, type->instance_flags (), type);
ad766c0a
JB
2941 else
2942 type = newtype;
2943 }
c906108c 2944 }
7ba81444
MS
2945 /* Otherwise, rely on the stub flag being set for opaque/stubbed
2946 types. */
e46d3488 2947 else if (type->is_stub () && !currently_reading_symtab)
c906108c 2948 {
7d93a1e0 2949 const char *name = type->name ();
e86ca25f 2950 /* FIXME: shouldn't we look in STRUCT_DOMAIN and/or VAR_DOMAIN
dda83cd7 2951 as appropriate? */
c906108c 2952 struct symbol *sym;
d8734c88 2953
c906108c
SS
2954 if (name == NULL)
2955 {
23136709 2956 stub_noname_complaint ();
92163a10 2957 return make_qualified_type (type, instance_flags, NULL);
c906108c 2958 }
d12307c1 2959 sym = lookup_symbol (name, 0, STRUCT_DOMAIN, 0).symbol;
c906108c 2960 if (sym)
dda83cd7
SM
2961 {
2962 /* Same as above for opaque types, we can replace the stub
2963 with the complete type only if they are in the same
2964 objfile. */
78134374 2965 if (TYPE_OBJFILE (SYMBOL_TYPE (sym)) == TYPE_OBJFILE (type))
10242f36
SM
2966 type = make_qualified_type (SYMBOL_TYPE (sym),
2967 type->instance_flags (), type);
c26f2453
JB
2968 else
2969 type = SYMBOL_TYPE (sym);
dda83cd7 2970 }
c906108c
SS
2971 }
2972
d2183968 2973 if (type->target_is_stub ())
c906108c 2974 {
c906108c
SS
2975 struct type *target_type = check_typedef (TYPE_TARGET_TYPE (type));
2976
d2183968 2977 if (target_type->is_stub () || target_type->target_is_stub ())
c5aa993b 2978 {
73e2eb35 2979 /* Nothing we can do. */
c5aa993b 2980 }
78134374 2981 else if (type->code () == TYPE_CODE_RANGE)
c906108c
SS
2982 {
2983 TYPE_LENGTH (type) = TYPE_LENGTH (target_type);
8f53807e 2984 type->set_target_is_stub (false);
c906108c 2985 }
78134374 2986 else if (type->code () == TYPE_CODE_ARRAY
8dbb1375 2987 && update_static_array_size (type))
8f53807e 2988 type->set_target_is_stub (false);
c906108c 2989 }
92163a10
JK
2990
2991 type = make_qualified_type (type, instance_flags, NULL);
2992
7ba81444 2993 /* Cache TYPE_LENGTH for future use. */
c906108c 2994 TYPE_LENGTH (orig_type) = TYPE_LENGTH (type);
92163a10 2995
c906108c
SS
2996 return type;
2997}
2998
7ba81444 2999/* Parse a type expression in the string [P..P+LENGTH). If an error
48319d1f 3000 occurs, silently return a void type. */
c91ecb25 3001
b9362cc7 3002static struct type *
48319d1f 3003safe_parse_type (struct gdbarch *gdbarch, char *p, int length)
c91ecb25
ND
3004{
3005 struct ui_file *saved_gdb_stderr;
34365054 3006 struct type *type = NULL; /* Initialize to keep gcc happy. */
c91ecb25 3007
7ba81444 3008 /* Suppress error messages. */
c91ecb25 3009 saved_gdb_stderr = gdb_stderr;
d7e74731 3010 gdb_stderr = &null_stream;
c91ecb25 3011
7ba81444 3012 /* Call parse_and_eval_type() without fear of longjmp()s. */
a70b8144 3013 try
8e7b59a5
KS
3014 {
3015 type = parse_and_eval_type (p, length);
3016 }
230d2906 3017 catch (const gdb_exception_error &except)
492d29ea
PA
3018 {
3019 type = builtin_type (gdbarch)->builtin_void;
3020 }
c91ecb25 3021
7ba81444 3022 /* Stop suppressing error messages. */
c91ecb25
ND
3023 gdb_stderr = saved_gdb_stderr;
3024
3025 return type;
3026}
3027
c906108c
SS
3028/* Ugly hack to convert method stubs into method types.
3029
7ba81444
MS
3030 He ain't kiddin'. This demangles the name of the method into a
3031 string including argument types, parses out each argument type,
3032 generates a string casting a zero to that type, evaluates the
3033 string, and stuffs the resulting type into an argtype vector!!!
3034 Then it knows the type of the whole function (including argument
3035 types for overloading), which info used to be in the stab's but was
3036 removed to hack back the space required for them. */
c906108c 3037
de17c821 3038static void
fba45db2 3039check_stub_method (struct type *type, int method_id, int signature_id)
c906108c 3040{
50810684 3041 struct gdbarch *gdbarch = get_type_arch (type);
c906108c
SS
3042 struct fn_field *f;
3043 char *mangled_name = gdb_mangle_name (type, method_id, signature_id);
8de20a37
TT
3044 char *demangled_name = gdb_demangle (mangled_name,
3045 DMGL_PARAMS | DMGL_ANSI);
c906108c
SS
3046 char *argtypetext, *p;
3047 int depth = 0, argcount = 1;
ad2f7632 3048 struct field *argtypes;
c906108c
SS
3049 struct type *mtype;
3050
3051 /* Make sure we got back a function string that we can use. */
3052 if (demangled_name)
3053 p = strchr (demangled_name, '(');
502dcf4e
AC
3054 else
3055 p = NULL;
c906108c
SS
3056
3057 if (demangled_name == NULL || p == NULL)
7ba81444
MS
3058 error (_("Internal: Cannot demangle mangled name `%s'."),
3059 mangled_name);
c906108c
SS
3060
3061 /* Now, read in the parameters that define this type. */
3062 p += 1;
3063 argtypetext = p;
3064 while (*p)
3065 {
070ad9f0 3066 if (*p == '(' || *p == '<')
c906108c
SS
3067 {
3068 depth += 1;
3069 }
070ad9f0 3070 else if (*p == ')' || *p == '>')
c906108c
SS
3071 {
3072 depth -= 1;
3073 }
3074 else if (*p == ',' && depth == 0)
3075 {
3076 argcount += 1;
3077 }
3078
3079 p += 1;
3080 }
3081
ad2f7632 3082 /* If we read one argument and it was ``void'', don't count it. */
61012eef 3083 if (startswith (argtypetext, "(void)"))
ad2f7632 3084 argcount -= 1;
c906108c 3085
ad2f7632
DJ
3086 /* We need one extra slot, for the THIS pointer. */
3087
3088 argtypes = (struct field *)
3089 TYPE_ALLOC (type, (argcount + 1) * sizeof (struct field));
c906108c 3090 p = argtypetext;
4a1970e4
DJ
3091
3092 /* Add THIS pointer for non-static methods. */
3093 f = TYPE_FN_FIELDLIST1 (type, method_id);
3094 if (TYPE_FN_FIELD_STATIC_P (f, signature_id))
3095 argcount = 0;
3096 else
3097 {
5d14b6e5 3098 argtypes[0].set_type (lookup_pointer_type (type));
4a1970e4
DJ
3099 argcount = 1;
3100 }
c906108c 3101
0963b4bd 3102 if (*p != ')') /* () means no args, skip while. */
c906108c
SS
3103 {
3104 depth = 0;
3105 while (*p)
3106 {
3107 if (depth <= 0 && (*p == ',' || *p == ')'))
3108 {
ad2f7632 3109 /* Avoid parsing of ellipsis, they will be handled below.
dda83cd7 3110 Also avoid ``void'' as above. */
ad2f7632
DJ
3111 if (strncmp (argtypetext, "...", p - argtypetext) != 0
3112 && strncmp (argtypetext, "void", p - argtypetext) != 0)
c906108c 3113 {
5d14b6e5
SM
3114 argtypes[argcount].set_type
3115 (safe_parse_type (gdbarch, argtypetext, p - argtypetext));
c906108c
SS
3116 argcount += 1;
3117 }
3118 argtypetext = p + 1;
3119 }
3120
070ad9f0 3121 if (*p == '(' || *p == '<')
c906108c
SS
3122 {
3123 depth += 1;
3124 }
070ad9f0 3125 else if (*p == ')' || *p == '>')
c906108c
SS
3126 {
3127 depth -= 1;
3128 }
3129
3130 p += 1;
3131 }
3132 }
3133
c906108c
SS
3134 TYPE_FN_FIELD_PHYSNAME (f, signature_id) = mangled_name;
3135
3136 /* Now update the old "stub" type into a real type. */
3137 mtype = TYPE_FN_FIELD_TYPE (f, signature_id);
09e2d7c7
DE
3138 /* MTYPE may currently be a function (TYPE_CODE_FUNC).
3139 We want a method (TYPE_CODE_METHOD). */
3140 smash_to_method_type (mtype, type, TYPE_TARGET_TYPE (mtype),
3141 argtypes, argcount, p[-2] == '.');
b4b73759 3142 mtype->set_is_stub (false);
c906108c 3143 TYPE_FN_FIELD_STUB (f, signature_id) = 0;
ad2f7632
DJ
3144
3145 xfree (demangled_name);
c906108c
SS
3146}
3147
7ba81444
MS
3148/* This is the external interface to check_stub_method, above. This
3149 function unstubs all of the signatures for TYPE's METHOD_ID method
3150 name. After calling this function TYPE_FN_FIELD_STUB will be
3151 cleared for each signature and TYPE_FN_FIELDLIST_NAME will be
3152 correct.
de17c821
DJ
3153
3154 This function unfortunately can not die until stabs do. */
3155
3156void
3157check_stub_method_group (struct type *type, int method_id)
3158{
3159 int len = TYPE_FN_FIELDLIST_LENGTH (type, method_id);
3160 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, method_id);
de17c821 3161
041be526
SM
3162 for (int j = 0; j < len; j++)
3163 {
3164 if (TYPE_FN_FIELD_STUB (f, j))
de17c821 3165 check_stub_method (type, method_id, j);
de17c821
DJ
3166 }
3167}
3168
405feb71 3169/* Ensure it is in .rodata (if available) by working around GCC PR 44690. */
9655fd1a 3170const struct cplus_struct_type cplus_struct_default = { };
c906108c
SS
3171
3172void
fba45db2 3173allocate_cplus_struct_type (struct type *type)
c906108c 3174{
b4ba55a1
JB
3175 if (HAVE_CPLUS_STRUCT (type))
3176 /* Structure was already allocated. Nothing more to do. */
3177 return;
3178
3179 TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_CPLUS_STUFF;
3180 TYPE_RAW_CPLUS_SPECIFIC (type) = (struct cplus_struct_type *)
3181 TYPE_ALLOC (type, sizeof (struct cplus_struct_type));
3182 *(TYPE_RAW_CPLUS_SPECIFIC (type)) = cplus_struct_default;
ae6ae975 3183 set_type_vptr_fieldno (type, -1);
c906108c
SS
3184}
3185
b4ba55a1
JB
3186const struct gnat_aux_type gnat_aux_default =
3187 { NULL };
3188
3189/* Set the TYPE's type-specific kind to TYPE_SPECIFIC_GNAT_STUFF,
3190 and allocate the associated gnat-specific data. The gnat-specific
3191 data is also initialized to gnat_aux_default. */
5212577a 3192
b4ba55a1
JB
3193void
3194allocate_gnat_aux_type (struct type *type)
3195{
3196 TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_GNAT_STUFF;
3197 TYPE_GNAT_SPECIFIC (type) = (struct gnat_aux_type *)
3198 TYPE_ALLOC (type, sizeof (struct gnat_aux_type));
3199 *(TYPE_GNAT_SPECIFIC (type)) = gnat_aux_default;
3200}
3201
ae438bc5
UW
3202/* Helper function to initialize a newly allocated type. Set type code
3203 to CODE and initialize the type-specific fields accordingly. */
3204
3205static void
3206set_type_code (struct type *type, enum type_code code)
3207{
67607e24 3208 type->set_code (code);
ae438bc5
UW
3209
3210 switch (code)
3211 {
3212 case TYPE_CODE_STRUCT:
3213 case TYPE_CODE_UNION:
3214 case TYPE_CODE_NAMESPACE:
dda83cd7
SM
3215 INIT_CPLUS_SPECIFIC (type);
3216 break;
ae438bc5 3217 case TYPE_CODE_FLT:
dda83cd7
SM
3218 TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FLOATFORMAT;
3219 break;
ae438bc5
UW
3220 case TYPE_CODE_FUNC:
3221 INIT_FUNC_SPECIFIC (type);
09584414
JB
3222 break;
3223 case TYPE_CODE_FIXED_POINT:
3224 INIT_FIXED_POINT_SPECIFIC (type);
dda83cd7 3225 break;
ae438bc5
UW
3226 }
3227}
3228
19f392bc
UW
3229/* Helper function to verify floating-point format and size.
3230 BIT is the type size in bits; if BIT equals -1, the size is
3231 determined by the floatformat. Returns size to be used. */
3232
3233static int
0db7851f 3234verify_floatformat (int bit, const struct floatformat *floatformat)
19f392bc 3235{
0db7851f 3236 gdb_assert (floatformat != NULL);
9b790ce7 3237
19f392bc 3238 if (bit == -1)
0db7851f 3239 bit = floatformat->totalsize;
19f392bc 3240
0db7851f
UW
3241 gdb_assert (bit >= 0);
3242 gdb_assert (bit >= floatformat->totalsize);
19f392bc
UW
3243
3244 return bit;
3245}
3246
0db7851f
UW
3247/* Return the floating-point format for a floating-point variable of
3248 type TYPE. */
3249
3250const struct floatformat *
3251floatformat_from_type (const struct type *type)
3252{
78134374 3253 gdb_assert (type->code () == TYPE_CODE_FLT);
0db7851f
UW
3254 gdb_assert (TYPE_FLOATFORMAT (type));
3255 return TYPE_FLOATFORMAT (type);
3256}
3257
c906108c
SS
3258/* Helper function to initialize the standard scalar types.
3259
86f62fd7
TT
3260 If NAME is non-NULL, then it is used to initialize the type name.
3261 Note that NAME is not copied; it is required to have a lifetime at
3262 least as long as OBJFILE. */
c906108c
SS
3263
3264struct type *
77b7c781 3265init_type (struct objfile *objfile, enum type_code code, int bit,
19f392bc 3266 const char *name)
c906108c 3267{
52f0bd74 3268 struct type *type;
c906108c
SS
3269
3270 type = alloc_type (objfile);
ae438bc5 3271 set_type_code (type, code);
77b7c781
UW
3272 gdb_assert ((bit % TARGET_CHAR_BIT) == 0);
3273 TYPE_LENGTH (type) = bit / TARGET_CHAR_BIT;
d0e39ea2 3274 type->set_name (name);
c906108c 3275
c16abbde 3276 return type;
c906108c 3277}
19f392bc 3278
46a4882b
PA
3279/* Allocate a TYPE_CODE_ERROR type structure associated with OBJFILE,
3280 to use with variables that have no debug info. NAME is the type
3281 name. */
3282
3283static struct type *
3284init_nodebug_var_type (struct objfile *objfile, const char *name)
3285{
3286 return init_type (objfile, TYPE_CODE_ERROR, 0, name);
3287}
3288
19f392bc
UW
3289/* Allocate a TYPE_CODE_INT type structure associated with OBJFILE.
3290 BIT is the type size in bits. If UNSIGNED_P is non-zero, set
3291 the type's TYPE_UNSIGNED flag. NAME is the type name. */
3292
3293struct type *
3294init_integer_type (struct objfile *objfile,
3295 int bit, int unsigned_p, const char *name)
3296{
3297 struct type *t;
3298
77b7c781 3299 t = init_type (objfile, TYPE_CODE_INT, bit, name);
19f392bc 3300 if (unsigned_p)
653223d3 3301 t->set_is_unsigned (true);
19f392bc 3302
20a5fcbd
TT
3303 TYPE_SPECIFIC_FIELD (t) = TYPE_SPECIFIC_INT;
3304 TYPE_MAIN_TYPE (t)->type_specific.int_stuff.bit_size = bit;
3305 TYPE_MAIN_TYPE (t)->type_specific.int_stuff.bit_offset = 0;
3306
19f392bc
UW
3307 return t;
3308}
3309
3310/* Allocate a TYPE_CODE_CHAR type structure associated with OBJFILE.
3311 BIT is the type size in bits. If UNSIGNED_P is non-zero, set
3312 the type's TYPE_UNSIGNED flag. NAME is the type name. */
3313
3314struct type *
3315init_character_type (struct objfile *objfile,
3316 int bit, int unsigned_p, const char *name)
3317{
3318 struct type *t;
3319
77b7c781 3320 t = init_type (objfile, TYPE_CODE_CHAR, bit, name);
19f392bc 3321 if (unsigned_p)
653223d3 3322 t->set_is_unsigned (true);
19f392bc
UW
3323
3324 return t;
3325}
3326
3327/* Allocate a TYPE_CODE_BOOL type structure associated with OBJFILE.
3328 BIT is the type size in bits. If UNSIGNED_P is non-zero, set
3329 the type's TYPE_UNSIGNED flag. NAME is the type name. */
3330
3331struct type *
3332init_boolean_type (struct objfile *objfile,
3333 int bit, int unsigned_p, const char *name)
3334{
3335 struct type *t;
3336
77b7c781 3337 t = init_type (objfile, TYPE_CODE_BOOL, bit, name);
19f392bc 3338 if (unsigned_p)
653223d3 3339 t->set_is_unsigned (true);
19f392bc 3340
20a5fcbd
TT
3341 TYPE_SPECIFIC_FIELD (t) = TYPE_SPECIFIC_INT;
3342 TYPE_MAIN_TYPE (t)->type_specific.int_stuff.bit_size = bit;
3343 TYPE_MAIN_TYPE (t)->type_specific.int_stuff.bit_offset = 0;
3344
19f392bc
UW
3345 return t;
3346}
3347
3348/* Allocate a TYPE_CODE_FLT type structure associated with OBJFILE.
3349 BIT is the type size in bits; if BIT equals -1, the size is
3350 determined by the floatformat. NAME is the type name. Set the
103a685e
TT
3351 TYPE_FLOATFORMAT from FLOATFORMATS. BYTE_ORDER is the byte order
3352 to use. If it is BFD_ENDIAN_UNKNOWN (the default), then the byte
3353 order of the objfile's architecture is used. */
19f392bc
UW
3354
3355struct type *
3356init_float_type (struct objfile *objfile,
3357 int bit, const char *name,
103a685e
TT
3358 const struct floatformat **floatformats,
3359 enum bfd_endian byte_order)
19f392bc 3360{
103a685e
TT
3361 if (byte_order == BFD_ENDIAN_UNKNOWN)
3362 {
08feed99 3363 struct gdbarch *gdbarch = objfile->arch ();
103a685e
TT
3364 byte_order = gdbarch_byte_order (gdbarch);
3365 }
3366 const struct floatformat *fmt = floatformats[byte_order];
19f392bc
UW
3367 struct type *t;
3368
0db7851f 3369 bit = verify_floatformat (bit, fmt);
77b7c781 3370 t = init_type (objfile, TYPE_CODE_FLT, bit, name);
0db7851f 3371 TYPE_FLOATFORMAT (t) = fmt;
19f392bc
UW
3372
3373 return t;
3374}
3375
3376/* Allocate a TYPE_CODE_DECFLOAT type structure associated with OBJFILE.
3377 BIT is the type size in bits. NAME is the type name. */
3378
3379struct type *
3380init_decfloat_type (struct objfile *objfile, int bit, const char *name)
3381{
3382 struct type *t;
3383
77b7c781 3384 t = init_type (objfile, TYPE_CODE_DECFLOAT, bit, name);
19f392bc
UW
3385 return t;
3386}
3387
5b930b45
TT
3388/* Allocate a TYPE_CODE_COMPLEX type structure. NAME is the type
3389 name. TARGET_TYPE is the component type. */
19f392bc
UW
3390
3391struct type *
5b930b45 3392init_complex_type (const char *name, struct type *target_type)
19f392bc
UW
3393{
3394 struct type *t;
3395
78134374
SM
3396 gdb_assert (target_type->code () == TYPE_CODE_INT
3397 || target_type->code () == TYPE_CODE_FLT);
5b930b45
TT
3398
3399 if (TYPE_MAIN_TYPE (target_type)->flds_bnds.complex_type == nullptr)
3400 {
6b9d0dfd 3401 if (name == nullptr && target_type->name () != nullptr)
5b930b45
TT
3402 {
3403 char *new_name
3404 = (char *) TYPE_ALLOC (target_type,
7d93a1e0 3405 strlen (target_type->name ())
5b930b45
TT
3406 + strlen ("_Complex ") + 1);
3407 strcpy (new_name, "_Complex ");
7d93a1e0 3408 strcat (new_name, target_type->name ());
5b930b45
TT
3409 name = new_name;
3410 }
3411
3412 t = alloc_type_copy (target_type);
3413 set_type_code (t, TYPE_CODE_COMPLEX);
3414 TYPE_LENGTH (t) = 2 * TYPE_LENGTH (target_type);
d0e39ea2 3415 t->set_name (name);
5b930b45
TT
3416
3417 TYPE_TARGET_TYPE (t) = target_type;
3418 TYPE_MAIN_TYPE (target_type)->flds_bnds.complex_type = t;
3419 }
3420
3421 return TYPE_MAIN_TYPE (target_type)->flds_bnds.complex_type;
19f392bc
UW
3422}
3423
3424/* Allocate a TYPE_CODE_PTR type structure associated with OBJFILE.
3425 BIT is the pointer type size in bits. NAME is the type name.
3426 TARGET_TYPE is the pointer target type. Always sets the pointer type's
3427 TYPE_UNSIGNED flag. */
3428
3429struct type *
3430init_pointer_type (struct objfile *objfile,
3431 int bit, const char *name, struct type *target_type)
3432{
3433 struct type *t;
3434
77b7c781 3435 t = init_type (objfile, TYPE_CODE_PTR, bit, name);
19f392bc 3436 TYPE_TARGET_TYPE (t) = target_type;
653223d3 3437 t->set_is_unsigned (true);
19f392bc
UW
3438 return t;
3439}
3440
09584414
JB
3441/* Allocate a TYPE_CODE_FIXED_POINT type structure associated with OBJFILE.
3442 BIT is the pointer type size in bits.
3443 UNSIGNED_P should be nonzero if the type is unsigned.
3444 NAME is the type name. */
3445
3446struct type *
3447init_fixed_point_type (struct objfile *objfile,
3448 int bit, int unsigned_p, const char *name)
3449{
3450 struct type *t;
3451
3452 t = init_type (objfile, TYPE_CODE_FIXED_POINT, bit, name);
3453 if (unsigned_p)
3454 t->set_is_unsigned (true);
3455
3456 return t;
3457}
3458
2b4424c3
TT
3459/* See gdbtypes.h. */
3460
3461unsigned
3462type_raw_align (struct type *type)
3463{
3464 if (type->align_log2 != 0)
3465 return 1 << (type->align_log2 - 1);
3466 return 0;
3467}
3468
3469/* See gdbtypes.h. */
3470
3471unsigned
3472type_align (struct type *type)
3473{
5561fc30 3474 /* Check alignment provided in the debug information. */
2b4424c3
TT
3475 unsigned raw_align = type_raw_align (type);
3476 if (raw_align != 0)
3477 return raw_align;
3478
5561fc30
AB
3479 /* Allow the architecture to provide an alignment. */
3480 struct gdbarch *arch = get_type_arch (type);
3481 ULONGEST align = gdbarch_type_align (arch, type);
3482 if (align != 0)
3483 return align;
3484
78134374 3485 switch (type->code ())
2b4424c3
TT
3486 {
3487 case TYPE_CODE_PTR:
3488 case TYPE_CODE_FUNC:
3489 case TYPE_CODE_FLAGS:
3490 case TYPE_CODE_INT:
75ba10dc 3491 case TYPE_CODE_RANGE:
2b4424c3
TT
3492 case TYPE_CODE_FLT:
3493 case TYPE_CODE_ENUM:
3494 case TYPE_CODE_REF:
3495 case TYPE_CODE_RVALUE_REF:
3496 case TYPE_CODE_CHAR:
3497 case TYPE_CODE_BOOL:
3498 case TYPE_CODE_DECFLOAT:
70cd633e
AB
3499 case TYPE_CODE_METHODPTR:
3500 case TYPE_CODE_MEMBERPTR:
5561fc30 3501 align = type_length_units (check_typedef (type));
2b4424c3
TT
3502 break;
3503
3504 case TYPE_CODE_ARRAY:
3505 case TYPE_CODE_COMPLEX:
3506 case TYPE_CODE_TYPEDEF:
3507 align = type_align (TYPE_TARGET_TYPE (type));
3508 break;
3509
3510 case TYPE_CODE_STRUCT:
3511 case TYPE_CODE_UNION:
3512 {
41077b66 3513 int number_of_non_static_fields = 0;
1f704f76 3514 for (unsigned i = 0; i < type->num_fields (); ++i)
2b4424c3 3515 {
ceacbf6e 3516 if (!field_is_static (&type->field (i)))
2b4424c3 3517 {
41077b66 3518 number_of_non_static_fields++;
940da03e 3519 ULONGEST f_align = type_align (type->field (i).type ());
bf9a735e
AB
3520 if (f_align == 0)
3521 {
3522 /* Don't pretend we know something we don't. */
3523 align = 0;
3524 break;
3525 }
3526 if (f_align > align)
3527 align = f_align;
2b4424c3 3528 }
2b4424c3 3529 }
41077b66
AB
3530 /* A struct with no fields, or with only static fields has an
3531 alignment of 1. */
3532 if (number_of_non_static_fields == 0)
3533 align = 1;
2b4424c3
TT
3534 }
3535 break;
3536
3537 case TYPE_CODE_SET:
2b4424c3
TT
3538 case TYPE_CODE_STRING:
3539 /* Not sure what to do here, and these can't appear in C or C++
3540 anyway. */
3541 break;
3542
2b4424c3
TT
3543 case TYPE_CODE_VOID:
3544 align = 1;
3545 break;
3546
3547 case TYPE_CODE_ERROR:
3548 case TYPE_CODE_METHOD:
3549 default:
3550 break;
3551 }
3552
3553 if ((align & (align - 1)) != 0)
3554 {
3555 /* Not a power of 2, so pass. */
3556 align = 0;
3557 }
3558
3559 return align;
3560}
3561
3562/* See gdbtypes.h. */
3563
3564bool
3565set_type_align (struct type *type, ULONGEST align)
3566{
3567 /* Must be a power of 2. Zero is ok. */
3568 gdb_assert ((align & (align - 1)) == 0);
3569
3570 unsigned result = 0;
3571 while (align != 0)
3572 {
3573 ++result;
3574 align >>= 1;
3575 }
3576
3577 if (result >= (1 << TYPE_ALIGN_BITS))
3578 return false;
3579
3580 type->align_log2 = result;
3581 return true;
3582}
3583
5212577a
DE
3584\f
3585/* Queries on types. */
c906108c 3586
c906108c 3587int
fba45db2 3588can_dereference (struct type *t)
c906108c 3589{
7ba81444
MS
3590 /* FIXME: Should we return true for references as well as
3591 pointers? */
f168693b 3592 t = check_typedef (t);
c906108c
SS
3593 return
3594 (t != NULL
78134374
SM
3595 && t->code () == TYPE_CODE_PTR
3596 && TYPE_TARGET_TYPE (t)->code () != TYPE_CODE_VOID);
c906108c
SS
3597}
3598
adf40b2e 3599int
fba45db2 3600is_integral_type (struct type *t)
adf40b2e 3601{
f168693b 3602 t = check_typedef (t);
adf40b2e
JM
3603 return
3604 ((t != NULL)
09584414 3605 && !is_fixed_point_type (t)
78134374
SM
3606 && ((t->code () == TYPE_CODE_INT)
3607 || (t->code () == TYPE_CODE_ENUM)
3608 || (t->code () == TYPE_CODE_FLAGS)
3609 || (t->code () == TYPE_CODE_CHAR)
3610 || (t->code () == TYPE_CODE_RANGE)
3611 || (t->code () == TYPE_CODE_BOOL)));
adf40b2e
JM
3612}
3613
70100014
UW
3614int
3615is_floating_type (struct type *t)
3616{
3617 t = check_typedef (t);
3618 return
3619 ((t != NULL)
78134374
SM
3620 && ((t->code () == TYPE_CODE_FLT)
3621 || (t->code () == TYPE_CODE_DECFLOAT)));
70100014
UW
3622}
3623
e09342b5
TJB
3624/* Return true if TYPE is scalar. */
3625
220475ed 3626int
e09342b5
TJB
3627is_scalar_type (struct type *type)
3628{
f168693b 3629 type = check_typedef (type);
e09342b5 3630
09584414
JB
3631 if (is_fixed_point_type (type))
3632 return 0; /* Implemented as a scalar, but more like a floating point. */
3633
78134374 3634 switch (type->code ())
e09342b5
TJB
3635 {
3636 case TYPE_CODE_ARRAY:
3637 case TYPE_CODE_STRUCT:
3638 case TYPE_CODE_UNION:
3639 case TYPE_CODE_SET:
3640 case TYPE_CODE_STRING:
e09342b5
TJB
3641 return 0;
3642 default:
3643 return 1;
3644 }
3645}
3646
3647/* Return true if T is scalar, or a composite type which in practice has
90e4670f
TJB
3648 the memory layout of a scalar type. E.g., an array or struct with only
3649 one scalar element inside it, or a union with only scalar elements. */
e09342b5
TJB
3650
3651int
3652is_scalar_type_recursive (struct type *t)
3653{
f168693b 3654 t = check_typedef (t);
e09342b5
TJB
3655
3656 if (is_scalar_type (t))
3657 return 1;
3658 /* Are we dealing with an array or string of known dimensions? */
78134374 3659 else if ((t->code () == TYPE_CODE_ARRAY
1f704f76 3660 || t->code () == TYPE_CODE_STRING) && t->num_fields () == 1
3d967001 3661 && t->index_type ()->code () == TYPE_CODE_RANGE)
e09342b5
TJB
3662 {
3663 LONGEST low_bound, high_bound;
3664 struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (t));
3665
3d967001 3666 get_discrete_bounds (t->index_type (), &low_bound, &high_bound);
e09342b5
TJB
3667
3668 return high_bound == low_bound && is_scalar_type_recursive (elt_type);
3669 }
3670 /* Are we dealing with a struct with one element? */
1f704f76 3671 else if (t->code () == TYPE_CODE_STRUCT && t->num_fields () == 1)
940da03e 3672 return is_scalar_type_recursive (t->field (0).type ());
78134374 3673 else if (t->code () == TYPE_CODE_UNION)
e09342b5 3674 {
1f704f76 3675 int i, n = t->num_fields ();
e09342b5
TJB
3676
3677 /* If all elements of the union are scalar, then the union is scalar. */
3678 for (i = 0; i < n; i++)
940da03e 3679 if (!is_scalar_type_recursive (t->field (i).type ()))
e09342b5
TJB
3680 return 0;
3681
3682 return 1;
3683 }
3684
3685 return 0;
3686}
3687
6c659fc2
SC
3688/* Return true is T is a class or a union. False otherwise. */
3689
3690int
3691class_or_union_p (const struct type *t)
3692{
78134374 3693 return (t->code () == TYPE_CODE_STRUCT
dda83cd7 3694 || t->code () == TYPE_CODE_UNION);
6c659fc2
SC
3695}
3696
4e8f195d
TT
3697/* A helper function which returns true if types A and B represent the
3698 "same" class type. This is true if the types have the same main
3699 type, or the same name. */
3700
3701int
3702class_types_same_p (const struct type *a, const struct type *b)
3703{
3704 return (TYPE_MAIN_TYPE (a) == TYPE_MAIN_TYPE (b)
7d93a1e0
SM
3705 || (a->name () && b->name ()
3706 && !strcmp (a->name (), b->name ())));
4e8f195d
TT
3707}
3708
a9d5ef47
SW
3709/* If BASE is an ancestor of DCLASS return the distance between them.
3710 otherwise return -1;
3711 eg:
3712
3713 class A {};
3714 class B: public A {};
3715 class C: public B {};
3716 class D: C {};
3717
3718 distance_to_ancestor (A, A, 0) = 0
3719 distance_to_ancestor (A, B, 0) = 1
3720 distance_to_ancestor (A, C, 0) = 2
3721 distance_to_ancestor (A, D, 0) = 3
3722
3723 If PUBLIC is 1 then only public ancestors are considered,
3724 and the function returns the distance only if BASE is a public ancestor
3725 of DCLASS.
3726 Eg:
3727
0963b4bd 3728 distance_to_ancestor (A, D, 1) = -1. */
c906108c 3729
0526b37a 3730static int
fe978cb0 3731distance_to_ancestor (struct type *base, struct type *dclass, int is_public)
c906108c
SS
3732{
3733 int i;
a9d5ef47 3734 int d;
c5aa993b 3735
f168693b
SM
3736 base = check_typedef (base);
3737 dclass = check_typedef (dclass);
c906108c 3738
4e8f195d 3739 if (class_types_same_p (base, dclass))
a9d5ef47 3740 return 0;
c906108c
SS
3741
3742 for (i = 0; i < TYPE_N_BASECLASSES (dclass); i++)
4e8f195d 3743 {
fe978cb0 3744 if (is_public && ! BASETYPE_VIA_PUBLIC (dclass, i))
0526b37a
SW
3745 continue;
3746
fe978cb0 3747 d = distance_to_ancestor (base, TYPE_BASECLASS (dclass, i), is_public);
a9d5ef47
SW
3748 if (d >= 0)
3749 return 1 + d;
4e8f195d 3750 }
c906108c 3751
a9d5ef47 3752 return -1;
c906108c 3753}
4e8f195d 3754
0526b37a
SW
3755/* Check whether BASE is an ancestor or base class or DCLASS
3756 Return 1 if so, and 0 if not.
3757 Note: If BASE and DCLASS are of the same type, this function
3758 will return 1. So for some class A, is_ancestor (A, A) will
3759 return 1. */
3760
3761int
3762is_ancestor (struct type *base, struct type *dclass)
3763{
a9d5ef47 3764 return distance_to_ancestor (base, dclass, 0) >= 0;
0526b37a
SW
3765}
3766
4e8f195d
TT
3767/* Like is_ancestor, but only returns true when BASE is a public
3768 ancestor of DCLASS. */
3769
3770int
3771is_public_ancestor (struct type *base, struct type *dclass)
3772{
a9d5ef47 3773 return distance_to_ancestor (base, dclass, 1) >= 0;
4e8f195d
TT
3774}
3775
3776/* A helper function for is_unique_ancestor. */
3777
3778static int
3779is_unique_ancestor_worker (struct type *base, struct type *dclass,
3780 int *offset,
8af8e3bc
PA
3781 const gdb_byte *valaddr, int embedded_offset,
3782 CORE_ADDR address, struct value *val)
4e8f195d
TT
3783{
3784 int i, count = 0;
3785
f168693b
SM
3786 base = check_typedef (base);
3787 dclass = check_typedef (dclass);
4e8f195d
TT
3788
3789 for (i = 0; i < TYPE_N_BASECLASSES (dclass) && count < 2; ++i)
3790 {
8af8e3bc
PA
3791 struct type *iter;
3792 int this_offset;
4e8f195d 3793
8af8e3bc
PA
3794 iter = check_typedef (TYPE_BASECLASS (dclass, i));
3795
3796 this_offset = baseclass_offset (dclass, i, valaddr, embedded_offset,
3797 address, val);
4e8f195d
TT
3798
3799 if (class_types_same_p (base, iter))
3800 {
3801 /* If this is the first subclass, set *OFFSET and set count
3802 to 1. Otherwise, if this is at the same offset as
3803 previous instances, do nothing. Otherwise, increment
3804 count. */
3805 if (*offset == -1)
3806 {
3807 *offset = this_offset;
3808 count = 1;
3809 }
3810 else if (this_offset == *offset)
3811 {
3812 /* Nothing. */
3813 }
3814 else
3815 ++count;
3816 }
3817 else
3818 count += is_unique_ancestor_worker (base, iter, offset,
8af8e3bc
PA
3819 valaddr,
3820 embedded_offset + this_offset,
3821 address, val);
4e8f195d
TT
3822 }
3823
3824 return count;
3825}
3826
3827/* Like is_ancestor, but only returns true if BASE is a unique base
3828 class of the type of VAL. */
3829
3830int
3831is_unique_ancestor (struct type *base, struct value *val)
3832{
3833 int offset = -1;
3834
3835 return is_unique_ancestor_worker (base, value_type (val), &offset,
8af8e3bc
PA
3836 value_contents_for_printing (val),
3837 value_embedded_offset (val),
3838 value_address (val), val) == 1;
4e8f195d
TT
3839}
3840
7ab4a236
TT
3841/* See gdbtypes.h. */
3842
3843enum bfd_endian
3844type_byte_order (const struct type *type)
3845{
3846 bfd_endian byteorder = gdbarch_byte_order (get_type_arch (type));
04f5bab2 3847 if (type->endianity_is_not_default ())
7ab4a236
TT
3848 {
3849 if (byteorder == BFD_ENDIAN_BIG)
dda83cd7 3850 return BFD_ENDIAN_LITTLE;
7ab4a236
TT
3851 else
3852 {
3853 gdb_assert (byteorder == BFD_ENDIAN_LITTLE);
3854 return BFD_ENDIAN_BIG;
3855 }
3856 }
3857
3858 return byteorder;
3859}
3860
c906108c 3861\f
5212577a 3862/* Overload resolution. */
c906108c 3863
6403aeea
SW
3864/* Return the sum of the rank of A with the rank of B. */
3865
3866struct rank
3867sum_ranks (struct rank a, struct rank b)
3868{
3869 struct rank c;
3870 c.rank = a.rank + b.rank;
a9d5ef47 3871 c.subrank = a.subrank + b.subrank;
6403aeea
SW
3872 return c;
3873}
3874
3875/* Compare rank A and B and return:
3876 0 if a = b
3877 1 if a is better than b
3878 -1 if b is better than a. */
3879
3880int
3881compare_ranks (struct rank a, struct rank b)
3882{
3883 if (a.rank == b.rank)
a9d5ef47
SW
3884 {
3885 if (a.subrank == b.subrank)
3886 return 0;
3887 if (a.subrank < b.subrank)
3888 return 1;
3889 if (a.subrank > b.subrank)
3890 return -1;
3891 }
6403aeea
SW
3892
3893 if (a.rank < b.rank)
3894 return 1;
3895
0963b4bd 3896 /* a.rank > b.rank */
6403aeea
SW
3897 return -1;
3898}
c5aa993b 3899
0963b4bd 3900/* Functions for overload resolution begin here. */
c906108c
SS
3901
3902/* Compare two badness vectors A and B and return the result.
7ba81444
MS
3903 0 => A and B are identical
3904 1 => A and B are incomparable
3905 2 => A is better than B
3906 3 => A is worse than B */
c906108c
SS
3907
3908int
82ceee50 3909compare_badness (const badness_vector &a, const badness_vector &b)
c906108c
SS
3910{
3911 int i;
3912 int tmp;
c5aa993b
JM
3913 short found_pos = 0; /* any positives in c? */
3914 short found_neg = 0; /* any negatives in c? */
3915
82ceee50
PA
3916 /* differing sizes => incomparable */
3917 if (a.size () != b.size ())
c906108c
SS
3918 return 1;
3919
c5aa993b 3920 /* Subtract b from a */
82ceee50 3921 for (i = 0; i < a.size (); i++)
c906108c 3922 {
82ceee50 3923 tmp = compare_ranks (b[i], a[i]);
c906108c 3924 if (tmp > 0)
c5aa993b 3925 found_pos = 1;
c906108c 3926 else if (tmp < 0)
c5aa993b 3927 found_neg = 1;
c906108c
SS
3928 }
3929
3930 if (found_pos)
3931 {
3932 if (found_neg)
c5aa993b 3933 return 1; /* incomparable */
c906108c 3934 else
c5aa993b 3935 return 3; /* A > B */
c906108c 3936 }
c5aa993b
JM
3937 else
3938 /* no positives */
c906108c
SS
3939 {
3940 if (found_neg)
c5aa993b 3941 return 2; /* A < B */
c906108c 3942 else
c5aa993b 3943 return 0; /* A == B */
c906108c
SS
3944 }
3945}
3946
6b1747cd 3947/* Rank a function by comparing its parameter types (PARMS), to the
82ceee50
PA
3948 types of an argument list (ARGS). Return the badness vector. This
3949 has ARGS.size() + 1 entries. */
c906108c 3950
82ceee50 3951badness_vector
6b1747cd
PA
3952rank_function (gdb::array_view<type *> parms,
3953 gdb::array_view<value *> args)
c906108c 3954{
82ceee50
PA
3955 /* add 1 for the length-match rank. */
3956 badness_vector bv;
3957 bv.reserve (1 + args.size ());
c906108c
SS
3958
3959 /* First compare the lengths of the supplied lists.
7ba81444 3960 If there is a mismatch, set it to a high value. */
c5aa993b 3961
c906108c 3962 /* pai/1997-06-03 FIXME: when we have debug info about default
7ba81444
MS
3963 arguments and ellipsis parameter lists, we should consider those
3964 and rank the length-match more finely. */
c906108c 3965
82ceee50
PA
3966 bv.push_back ((args.size () != parms.size ())
3967 ? LENGTH_MISMATCH_BADNESS
3968 : EXACT_MATCH_BADNESS);
c906108c 3969
0963b4bd 3970 /* Now rank all the parameters of the candidate function. */
82ceee50
PA
3971 size_t min_len = std::min (parms.size (), args.size ());
3972
3973 for (size_t i = 0; i < min_len; i++)
3974 bv.push_back (rank_one_type (parms[i], value_type (args[i]),
3975 args[i]));
c906108c 3976
0963b4bd 3977 /* If more arguments than parameters, add dummy entries. */
82ceee50
PA
3978 for (size_t i = min_len; i < args.size (); i++)
3979 bv.push_back (TOO_FEW_PARAMS_BADNESS);
c906108c
SS
3980
3981 return bv;
3982}
3983
973ccf8b
DJ
3984/* Compare the names of two integer types, assuming that any sign
3985 qualifiers have been checked already. We do it this way because
3986 there may be an "int" in the name of one of the types. */
3987
3988static int
3989integer_types_same_name_p (const char *first, const char *second)
3990{
3991 int first_p, second_p;
3992
7ba81444
MS
3993 /* If both are shorts, return 1; if neither is a short, keep
3994 checking. */
973ccf8b
DJ
3995 first_p = (strstr (first, "short") != NULL);
3996 second_p = (strstr (second, "short") != NULL);
3997 if (first_p && second_p)
3998 return 1;
3999 if (first_p || second_p)
4000 return 0;
4001
4002 /* Likewise for long. */
4003 first_p = (strstr (first, "long") != NULL);
4004 second_p = (strstr (second, "long") != NULL);
4005 if (first_p && second_p)
4006 return 1;
4007 if (first_p || second_p)
4008 return 0;
4009
4010 /* Likewise for char. */
4011 first_p = (strstr (first, "char") != NULL);
4012 second_p = (strstr (second, "char") != NULL);
4013 if (first_p && second_p)
4014 return 1;
4015 if (first_p || second_p)
4016 return 0;
4017
4018 /* They must both be ints. */
4019 return 1;
4020}
4021
894882e3
TT
4022/* Compares type A to type B. Returns true if they represent the same
4023 type, false otherwise. */
7062b0a0 4024
894882e3 4025bool
7062b0a0
SW
4026types_equal (struct type *a, struct type *b)
4027{
4028 /* Identical type pointers. */
4029 /* However, this still doesn't catch all cases of same type for b
4030 and a. The reason is that builtin types are different from
4031 the same ones constructed from the object. */
4032 if (a == b)
894882e3 4033 return true;
7062b0a0
SW
4034
4035 /* Resolve typedefs */
78134374 4036 if (a->code () == TYPE_CODE_TYPEDEF)
7062b0a0 4037 a = check_typedef (a);
78134374 4038 if (b->code () == TYPE_CODE_TYPEDEF)
7062b0a0
SW
4039 b = check_typedef (b);
4040
4041 /* If after resolving typedefs a and b are not of the same type
4042 code then they are not equal. */
78134374 4043 if (a->code () != b->code ())
894882e3 4044 return false;
7062b0a0
SW
4045
4046 /* If a and b are both pointers types or both reference types then
4047 they are equal of the same type iff the objects they refer to are
4048 of the same type. */
78134374
SM
4049 if (a->code () == TYPE_CODE_PTR
4050 || a->code () == TYPE_CODE_REF)
7062b0a0 4051 return types_equal (TYPE_TARGET_TYPE (a),
dda83cd7 4052 TYPE_TARGET_TYPE (b));
7062b0a0 4053
0963b4bd 4054 /* Well, damnit, if the names are exactly the same, I'll say they
7062b0a0
SW
4055 are exactly the same. This happens when we generate method
4056 stubs. The types won't point to the same address, but they
0963b4bd 4057 really are the same. */
7062b0a0 4058
7d93a1e0
SM
4059 if (a->name () && b->name ()
4060 && strcmp (a->name (), b->name ()) == 0)
894882e3 4061 return true;
7062b0a0
SW
4062
4063 /* Check if identical after resolving typedefs. */
4064 if (a == b)
894882e3 4065 return true;
7062b0a0 4066
9ce98649
TT
4067 /* Two function types are equal if their argument and return types
4068 are equal. */
78134374 4069 if (a->code () == TYPE_CODE_FUNC)
9ce98649
TT
4070 {
4071 int i;
4072
1f704f76 4073 if (a->num_fields () != b->num_fields ())
894882e3 4074 return false;
9ce98649
TT
4075
4076 if (!types_equal (TYPE_TARGET_TYPE (a), TYPE_TARGET_TYPE (b)))
894882e3 4077 return false;
9ce98649 4078
1f704f76 4079 for (i = 0; i < a->num_fields (); ++i)
940da03e 4080 if (!types_equal (a->field (i).type (), b->field (i).type ()))
894882e3 4081 return false;
9ce98649 4082
894882e3 4083 return true;
9ce98649
TT
4084 }
4085
894882e3 4086 return false;
7062b0a0 4087}
ca092b61
DE
4088\f
4089/* Deep comparison of types. */
4090
4091/* An entry in the type-equality bcache. */
4092
894882e3 4093struct type_equality_entry
ca092b61 4094{
894882e3
TT
4095 type_equality_entry (struct type *t1, struct type *t2)
4096 : type1 (t1),
4097 type2 (t2)
4098 {
4099 }
ca092b61 4100
894882e3
TT
4101 struct type *type1, *type2;
4102};
ca092b61 4103
894882e3
TT
4104/* A helper function to compare two strings. Returns true if they are
4105 the same, false otherwise. Handles NULLs properly. */
ca092b61 4106
894882e3 4107static bool
ca092b61
DE
4108compare_maybe_null_strings (const char *s, const char *t)
4109{
894882e3
TT
4110 if (s == NULL || t == NULL)
4111 return s == t;
ca092b61
DE
4112 return strcmp (s, t) == 0;
4113}
4114
4115/* A helper function for check_types_worklist that checks two types for
894882e3
TT
4116 "deep" equality. Returns true if the types are considered the
4117 same, false otherwise. */
ca092b61 4118
894882e3 4119static bool
ca092b61 4120check_types_equal (struct type *type1, struct type *type2,
894882e3 4121 std::vector<type_equality_entry> *worklist)
ca092b61 4122{
f168693b
SM
4123 type1 = check_typedef (type1);
4124 type2 = check_typedef (type2);
ca092b61
DE
4125
4126 if (type1 == type2)
894882e3 4127 return true;
ca092b61 4128
78134374 4129 if (type1->code () != type2->code ()
ca092b61 4130 || TYPE_LENGTH (type1) != TYPE_LENGTH (type2)
c6d940a9 4131 || type1->is_unsigned () != type2->is_unsigned ()
20ce4123 4132 || type1->has_no_signedness () != type2->has_no_signedness ()
04f5bab2 4133 || type1->endianity_is_not_default () != type2->endianity_is_not_default ()
a409645d 4134 || type1->has_varargs () != type2->has_varargs ()
bd63c870 4135 || type1->is_vector () != type2->is_vector ()
ca092b61 4136 || TYPE_NOTTEXT (type1) != TYPE_NOTTEXT (type2)
10242f36 4137 || type1->instance_flags () != type2->instance_flags ()
1f704f76 4138 || type1->num_fields () != type2->num_fields ())
894882e3 4139 return false;
ca092b61 4140
7d93a1e0 4141 if (!compare_maybe_null_strings (type1->name (), type2->name ()))
894882e3 4142 return false;
7d93a1e0 4143 if (!compare_maybe_null_strings (type1->name (), type2->name ()))
894882e3 4144 return false;
ca092b61 4145
78134374 4146 if (type1->code () == TYPE_CODE_RANGE)
ca092b61 4147 {
599088e3 4148 if (*type1->bounds () != *type2->bounds ())
894882e3 4149 return false;
ca092b61
DE
4150 }
4151 else
4152 {
4153 int i;
4154
1f704f76 4155 for (i = 0; i < type1->num_fields (); ++i)
ca092b61 4156 {
ceacbf6e
SM
4157 const struct field *field1 = &type1->field (i);
4158 const struct field *field2 = &type2->field (i);
ca092b61
DE
4159
4160 if (FIELD_ARTIFICIAL (*field1) != FIELD_ARTIFICIAL (*field2)
4161 || FIELD_BITSIZE (*field1) != FIELD_BITSIZE (*field2)
4162 || FIELD_LOC_KIND (*field1) != FIELD_LOC_KIND (*field2))
894882e3 4163 return false;
ca092b61
DE
4164 if (!compare_maybe_null_strings (FIELD_NAME (*field1),
4165 FIELD_NAME (*field2)))
894882e3 4166 return false;
ca092b61
DE
4167 switch (FIELD_LOC_KIND (*field1))
4168 {
4169 case FIELD_LOC_KIND_BITPOS:
4170 if (FIELD_BITPOS (*field1) != FIELD_BITPOS (*field2))
894882e3 4171 return false;
ca092b61
DE
4172 break;
4173 case FIELD_LOC_KIND_ENUMVAL:
4174 if (FIELD_ENUMVAL (*field1) != FIELD_ENUMVAL (*field2))
894882e3 4175 return false;
ca092b61
DE
4176 break;
4177 case FIELD_LOC_KIND_PHYSADDR:
4178 if (FIELD_STATIC_PHYSADDR (*field1)
4179 != FIELD_STATIC_PHYSADDR (*field2))
894882e3 4180 return false;
ca092b61
DE
4181 break;
4182 case FIELD_LOC_KIND_PHYSNAME:
4183 if (!compare_maybe_null_strings (FIELD_STATIC_PHYSNAME (*field1),
4184 FIELD_STATIC_PHYSNAME (*field2)))
894882e3 4185 return false;
ca092b61
DE
4186 break;
4187 case FIELD_LOC_KIND_DWARF_BLOCK:
4188 {
4189 struct dwarf2_locexpr_baton *block1, *block2;
4190
4191 block1 = FIELD_DWARF_BLOCK (*field1);
4192 block2 = FIELD_DWARF_BLOCK (*field2);
4193 if (block1->per_cu != block2->per_cu
4194 || block1->size != block2->size
4195 || memcmp (block1->data, block2->data, block1->size) != 0)
894882e3 4196 return false;
ca092b61
DE
4197 }
4198 break;
4199 default:
4200 internal_error (__FILE__, __LINE__, _("Unsupported field kind "
4201 "%d by check_types_equal"),
4202 FIELD_LOC_KIND (*field1));
4203 }
4204
b6cdac4b 4205 worklist->emplace_back (field1->type (), field2->type ());
ca092b61
DE
4206 }
4207 }
4208
4209 if (TYPE_TARGET_TYPE (type1) != NULL)
4210 {
ca092b61 4211 if (TYPE_TARGET_TYPE (type2) == NULL)
894882e3 4212 return false;
ca092b61 4213
894882e3
TT
4214 worklist->emplace_back (TYPE_TARGET_TYPE (type1),
4215 TYPE_TARGET_TYPE (type2));
ca092b61
DE
4216 }
4217 else if (TYPE_TARGET_TYPE (type2) != NULL)
894882e3 4218 return false;
ca092b61 4219
894882e3 4220 return true;
ca092b61
DE
4221}
4222
894882e3
TT
4223/* Check types on a worklist for equality. Returns false if any pair
4224 is not equal, true if they are all considered equal. */
ca092b61 4225
894882e3
TT
4226static bool
4227check_types_worklist (std::vector<type_equality_entry> *worklist,
dfb65191 4228 gdb::bcache *cache)
ca092b61 4229{
894882e3 4230 while (!worklist->empty ())
ca092b61 4231 {
ef5e5b0b 4232 bool added;
ca092b61 4233
894882e3
TT
4234 struct type_equality_entry entry = std::move (worklist->back ());
4235 worklist->pop_back ();
ca092b61
DE
4236
4237 /* If the type pair has already been visited, we know it is
4238 ok. */
25629dfd 4239 cache->insert (&entry, sizeof (entry), &added);
ca092b61
DE
4240 if (!added)
4241 continue;
4242
894882e3
TT
4243 if (!check_types_equal (entry.type1, entry.type2, worklist))
4244 return false;
ca092b61 4245 }
7062b0a0 4246
894882e3 4247 return true;
ca092b61
DE
4248}
4249
894882e3
TT
4250/* Return true if types TYPE1 and TYPE2 are equal, as determined by a
4251 "deep comparison". Otherwise return false. */
ca092b61 4252
894882e3 4253bool
ca092b61
DE
4254types_deeply_equal (struct type *type1, struct type *type2)
4255{
894882e3 4256 std::vector<type_equality_entry> worklist;
ca092b61
DE
4257
4258 gdb_assert (type1 != NULL && type2 != NULL);
4259
4260 /* Early exit for the simple case. */
4261 if (type1 == type2)
894882e3 4262 return true;
ca092b61 4263
89806626 4264 gdb::bcache cache;
894882e3 4265 worklist.emplace_back (type1, type2);
25629dfd 4266 return check_types_worklist (&worklist, &cache);
ca092b61 4267}
3f2f83dd
KB
4268
4269/* Allocated status of type TYPE. Return zero if type TYPE is allocated.
4270 Otherwise return one. */
4271
4272int
4273type_not_allocated (const struct type *type)
4274{
4275 struct dynamic_prop *prop = TYPE_ALLOCATED_PROP (type);
4276
8a6d5e35 4277 return (prop != nullptr && prop->kind () == PROP_CONST
5555c86d 4278 && prop->const_val () == 0);
3f2f83dd
KB
4279}
4280
4281/* Associated status of type TYPE. Return zero if type TYPE is associated.
4282 Otherwise return one. */
4283
4284int
4285type_not_associated (const struct type *type)
4286{
4287 struct dynamic_prop *prop = TYPE_ASSOCIATED_PROP (type);
4288
8a6d5e35 4289 return (prop != nullptr && prop->kind () == PROP_CONST
5555c86d 4290 && prop->const_val () == 0);
3f2f83dd 4291}
9293fc63
SM
4292
4293/* rank_one_type helper for when PARM's type code is TYPE_CODE_PTR. */
4294
4295static struct rank
4296rank_one_type_parm_ptr (struct type *parm, struct type *arg, struct value *value)
4297{
4298 struct rank rank = {0,0};
4299
78134374 4300 switch (arg->code ())
9293fc63
SM
4301 {
4302 case TYPE_CODE_PTR:
4303
4304 /* Allowed pointer conversions are:
4305 (a) pointer to void-pointer conversion. */
78134374 4306 if (TYPE_TARGET_TYPE (parm)->code () == TYPE_CODE_VOID)
9293fc63
SM
4307 return VOID_PTR_CONVERSION_BADNESS;
4308
4309 /* (b) pointer to ancestor-pointer conversion. */
4310 rank.subrank = distance_to_ancestor (TYPE_TARGET_TYPE (parm),
4311 TYPE_TARGET_TYPE (arg),
4312 0);
4313 if (rank.subrank >= 0)
4314 return sum_ranks (BASE_PTR_CONVERSION_BADNESS, rank);
4315
4316 return INCOMPATIBLE_TYPE_BADNESS;
4317 case TYPE_CODE_ARRAY:
4318 {
4319 struct type *t1 = TYPE_TARGET_TYPE (parm);
4320 struct type *t2 = TYPE_TARGET_TYPE (arg);
4321
4322 if (types_equal (t1, t2))
4323 {
4324 /* Make sure they are CV equal. */
4325 if (TYPE_CONST (t1) != TYPE_CONST (t2))
4326 rank.subrank |= CV_CONVERSION_CONST;
4327 if (TYPE_VOLATILE (t1) != TYPE_VOLATILE (t2))
4328 rank.subrank |= CV_CONVERSION_VOLATILE;
4329 if (rank.subrank != 0)
4330 return sum_ranks (CV_CONVERSION_BADNESS, rank);
4331 return EXACT_MATCH_BADNESS;
4332 }
4333 return INCOMPATIBLE_TYPE_BADNESS;
4334 }
4335 case TYPE_CODE_FUNC:
4336 return rank_one_type (TYPE_TARGET_TYPE (parm), arg, NULL);
4337 case TYPE_CODE_INT:
78134374 4338 if (value != NULL && value_type (value)->code () == TYPE_CODE_INT)
9293fc63
SM
4339 {
4340 if (value_as_long (value) == 0)
4341 {
4342 /* Null pointer conversion: allow it to be cast to a pointer.
4343 [4.10.1 of C++ standard draft n3290] */
4344 return NULL_POINTER_CONVERSION_BADNESS;
4345 }
4346 else
4347 {
4348 /* If type checking is disabled, allow the conversion. */
4349 if (!strict_type_checking)
4350 return NS_INTEGER_POINTER_CONVERSION_BADNESS;
4351 }
4352 }
4353 /* fall through */
4354 case TYPE_CODE_ENUM:
4355 case TYPE_CODE_FLAGS:
4356 case TYPE_CODE_CHAR:
4357 case TYPE_CODE_RANGE:
4358 case TYPE_CODE_BOOL:
4359 default:
4360 return INCOMPATIBLE_TYPE_BADNESS;
4361 }
4362}
4363
b9f4512f
SM
4364/* rank_one_type helper for when PARM's type code is TYPE_CODE_ARRAY. */
4365
4366static struct rank
4367rank_one_type_parm_array (struct type *parm, struct type *arg, struct value *value)
4368{
78134374 4369 switch (arg->code ())
b9f4512f
SM
4370 {
4371 case TYPE_CODE_PTR:
4372 case TYPE_CODE_ARRAY:
4373 return rank_one_type (TYPE_TARGET_TYPE (parm),
4374 TYPE_TARGET_TYPE (arg), NULL);
4375 default:
4376 return INCOMPATIBLE_TYPE_BADNESS;
4377 }
4378}
4379
f1f832d6
SM
4380/* rank_one_type helper for when PARM's type code is TYPE_CODE_FUNC. */
4381
4382static struct rank
4383rank_one_type_parm_func (struct type *parm, struct type *arg, struct value *value)
4384{
78134374 4385 switch (arg->code ())
f1f832d6
SM
4386 {
4387 case TYPE_CODE_PTR: /* funcptr -> func */
4388 return rank_one_type (parm, TYPE_TARGET_TYPE (arg), NULL);
4389 default:
4390 return INCOMPATIBLE_TYPE_BADNESS;
4391 }
4392}
4393
34910087
SM
4394/* rank_one_type helper for when PARM's type code is TYPE_CODE_INT. */
4395
4396static struct rank
4397rank_one_type_parm_int (struct type *parm, struct type *arg, struct value *value)
4398{
78134374 4399 switch (arg->code ())
34910087
SM
4400 {
4401 case TYPE_CODE_INT:
4402 if (TYPE_LENGTH (arg) == TYPE_LENGTH (parm))
4403 {
4404 /* Deal with signed, unsigned, and plain chars and
4405 signed and unsigned ints. */
20ce4123 4406 if (parm->has_no_signedness ())
34910087
SM
4407 {
4408 /* This case only for character types. */
20ce4123 4409 if (arg->has_no_signedness ())
34910087
SM
4410 return EXACT_MATCH_BADNESS; /* plain char -> plain char */
4411 else /* signed/unsigned char -> plain char */
4412 return INTEGER_CONVERSION_BADNESS;
4413 }
c6d940a9 4414 else if (parm->is_unsigned ())
34910087 4415 {
c6d940a9 4416 if (arg->is_unsigned ())
34910087
SM
4417 {
4418 /* unsigned int -> unsigned int, or
4419 unsigned long -> unsigned long */
7d93a1e0
SM
4420 if (integer_types_same_name_p (parm->name (),
4421 arg->name ()))
34910087 4422 return EXACT_MATCH_BADNESS;
7d93a1e0 4423 else if (integer_types_same_name_p (arg->name (),
34910087 4424 "int")
7d93a1e0 4425 && integer_types_same_name_p (parm->name (),
34910087
SM
4426 "long"))
4427 /* unsigned int -> unsigned long */
4428 return INTEGER_PROMOTION_BADNESS;
4429 else
4430 /* unsigned long -> unsigned int */
4431 return INTEGER_CONVERSION_BADNESS;
4432 }
4433 else
4434 {
7d93a1e0 4435 if (integer_types_same_name_p (arg->name (),
34910087 4436 "long")
7d93a1e0 4437 && integer_types_same_name_p (parm->name (),
34910087
SM
4438 "int"))
4439 /* signed long -> unsigned int */
4440 return INTEGER_CONVERSION_BADNESS;
4441 else
4442 /* signed int/long -> unsigned int/long */
4443 return INTEGER_CONVERSION_BADNESS;
4444 }
4445 }
20ce4123 4446 else if (!arg->has_no_signedness () && !arg->is_unsigned ())
34910087 4447 {
7d93a1e0
SM
4448 if (integer_types_same_name_p (parm->name (),
4449 arg->name ()))
34910087 4450 return EXACT_MATCH_BADNESS;
7d93a1e0 4451 else if (integer_types_same_name_p (arg->name (),
34910087 4452 "int")
7d93a1e0 4453 && integer_types_same_name_p (parm->name (),
34910087
SM
4454 "long"))
4455 return INTEGER_PROMOTION_BADNESS;
4456 else
4457 return INTEGER_CONVERSION_BADNESS;
4458 }
4459 else
4460 return INTEGER_CONVERSION_BADNESS;
4461 }
4462 else if (TYPE_LENGTH (arg) < TYPE_LENGTH (parm))
4463 return INTEGER_PROMOTION_BADNESS;
4464 else
4465 return INTEGER_CONVERSION_BADNESS;
4466 case TYPE_CODE_ENUM:
4467 case TYPE_CODE_FLAGS:
4468 case TYPE_CODE_CHAR:
4469 case TYPE_CODE_RANGE:
4470 case TYPE_CODE_BOOL:
4471 if (TYPE_DECLARED_CLASS (arg))
4472 return INCOMPATIBLE_TYPE_BADNESS;
4473 return INTEGER_PROMOTION_BADNESS;
4474 case TYPE_CODE_FLT:
4475 return INT_FLOAT_CONVERSION_BADNESS;
4476 case TYPE_CODE_PTR:
4477 return NS_POINTER_CONVERSION_BADNESS;
4478 default:
4479 return INCOMPATIBLE_TYPE_BADNESS;
4480 }
4481}
4482
793cd1d2
SM
4483/* rank_one_type helper for when PARM's type code is TYPE_CODE_ENUM. */
4484
4485static struct rank
4486rank_one_type_parm_enum (struct type *parm, struct type *arg, struct value *value)
4487{
78134374 4488 switch (arg->code ())
793cd1d2
SM
4489 {
4490 case TYPE_CODE_INT:
4491 case TYPE_CODE_CHAR:
4492 case TYPE_CODE_RANGE:
4493 case TYPE_CODE_BOOL:
4494 case TYPE_CODE_ENUM:
4495 if (TYPE_DECLARED_CLASS (parm) || TYPE_DECLARED_CLASS (arg))
4496 return INCOMPATIBLE_TYPE_BADNESS;
4497 return INTEGER_CONVERSION_BADNESS;
4498 case TYPE_CODE_FLT:
4499 return INT_FLOAT_CONVERSION_BADNESS;
4500 default:
4501 return INCOMPATIBLE_TYPE_BADNESS;
4502 }
4503}
4504
41ea4728
SM
4505/* rank_one_type helper for when PARM's type code is TYPE_CODE_CHAR. */
4506
4507static struct rank
4508rank_one_type_parm_char (struct type *parm, struct type *arg, struct value *value)
4509{
78134374 4510 switch (arg->code ())
41ea4728
SM
4511 {
4512 case TYPE_CODE_RANGE:
4513 case TYPE_CODE_BOOL:
4514 case TYPE_CODE_ENUM:
4515 if (TYPE_DECLARED_CLASS (arg))
4516 return INCOMPATIBLE_TYPE_BADNESS;
4517 return INTEGER_CONVERSION_BADNESS;
4518 case TYPE_CODE_FLT:
4519 return INT_FLOAT_CONVERSION_BADNESS;
4520 case TYPE_CODE_INT:
4521 if (TYPE_LENGTH (arg) > TYPE_LENGTH (parm))
4522 return INTEGER_CONVERSION_BADNESS;
4523 else if (TYPE_LENGTH (arg) < TYPE_LENGTH (parm))
4524 return INTEGER_PROMOTION_BADNESS;
4525 /* fall through */
4526 case TYPE_CODE_CHAR:
4527 /* Deal with signed, unsigned, and plain chars for C++ and
4528 with int cases falling through from previous case. */
20ce4123 4529 if (parm->has_no_signedness ())
41ea4728 4530 {
20ce4123 4531 if (arg->has_no_signedness ())
41ea4728
SM
4532 return EXACT_MATCH_BADNESS;
4533 else
4534 return INTEGER_CONVERSION_BADNESS;
4535 }
c6d940a9 4536 else if (parm->is_unsigned ())
41ea4728 4537 {
c6d940a9 4538 if (arg->is_unsigned ())
41ea4728
SM
4539 return EXACT_MATCH_BADNESS;
4540 else
4541 return INTEGER_PROMOTION_BADNESS;
4542 }
20ce4123 4543 else if (!arg->has_no_signedness () && !arg->is_unsigned ())
41ea4728
SM
4544 return EXACT_MATCH_BADNESS;
4545 else
4546 return INTEGER_CONVERSION_BADNESS;
4547 default:
4548 return INCOMPATIBLE_TYPE_BADNESS;
4549 }
4550}
4551
0dd322dc
SM
4552/* rank_one_type helper for when PARM's type code is TYPE_CODE_RANGE. */
4553
4554static struct rank
4555rank_one_type_parm_range (struct type *parm, struct type *arg, struct value *value)
4556{
78134374 4557 switch (arg->code ())
0dd322dc
SM
4558 {
4559 case TYPE_CODE_INT:
4560 case TYPE_CODE_CHAR:
4561 case TYPE_CODE_RANGE:
4562 case TYPE_CODE_BOOL:
4563 case TYPE_CODE_ENUM:
4564 return INTEGER_CONVERSION_BADNESS;
4565 case TYPE_CODE_FLT:
4566 return INT_FLOAT_CONVERSION_BADNESS;
4567 default:
4568 return INCOMPATIBLE_TYPE_BADNESS;
4569 }
4570}
4571
2c509035
SM
4572/* rank_one_type helper for when PARM's type code is TYPE_CODE_BOOL. */
4573
4574static struct rank
4575rank_one_type_parm_bool (struct type *parm, struct type *arg, struct value *value)
4576{
78134374 4577 switch (arg->code ())
2c509035
SM
4578 {
4579 /* n3290 draft, section 4.12.1 (conv.bool):
4580
4581 "A prvalue of arithmetic, unscoped enumeration, pointer, or
4582 pointer to member type can be converted to a prvalue of type
4583 bool. A zero value, null pointer value, or null member pointer
4584 value is converted to false; any other value is converted to
4585 true. A prvalue of type std::nullptr_t can be converted to a
4586 prvalue of type bool; the resulting value is false." */
4587 case TYPE_CODE_INT:
4588 case TYPE_CODE_CHAR:
4589 case TYPE_CODE_ENUM:
4590 case TYPE_CODE_FLT:
4591 case TYPE_CODE_MEMBERPTR:
4592 case TYPE_CODE_PTR:
4593 return BOOL_CONVERSION_BADNESS;
4594 case TYPE_CODE_RANGE:
4595 return INCOMPATIBLE_TYPE_BADNESS;
4596 case TYPE_CODE_BOOL:
4597 return EXACT_MATCH_BADNESS;
4598 default:
4599 return INCOMPATIBLE_TYPE_BADNESS;
4600 }
4601}
4602
7f17b20d
SM
4603/* rank_one_type helper for when PARM's type code is TYPE_CODE_FLOAT. */
4604
4605static struct rank
4606rank_one_type_parm_float (struct type *parm, struct type *arg, struct value *value)
4607{
78134374 4608 switch (arg->code ())
7f17b20d
SM
4609 {
4610 case TYPE_CODE_FLT:
4611 if (TYPE_LENGTH (arg) < TYPE_LENGTH (parm))
4612 return FLOAT_PROMOTION_BADNESS;
4613 else if (TYPE_LENGTH (arg) == TYPE_LENGTH (parm))
4614 return EXACT_MATCH_BADNESS;
4615 else
4616 return FLOAT_CONVERSION_BADNESS;
4617 case TYPE_CODE_INT:
4618 case TYPE_CODE_BOOL:
4619 case TYPE_CODE_ENUM:
4620 case TYPE_CODE_RANGE:
4621 case TYPE_CODE_CHAR:
4622 return INT_FLOAT_CONVERSION_BADNESS;
4623 default:
4624 return INCOMPATIBLE_TYPE_BADNESS;
4625 }
4626}
4627
2598a94b
SM
4628/* rank_one_type helper for when PARM's type code is TYPE_CODE_COMPLEX. */
4629
4630static struct rank
4631rank_one_type_parm_complex (struct type *parm, struct type *arg, struct value *value)
4632{
78134374 4633 switch (arg->code ())
2598a94b
SM
4634 { /* Strictly not needed for C++, but... */
4635 case TYPE_CODE_FLT:
4636 return FLOAT_PROMOTION_BADNESS;
4637 case TYPE_CODE_COMPLEX:
4638 return EXACT_MATCH_BADNESS;
4639 default:
4640 return INCOMPATIBLE_TYPE_BADNESS;
4641 }
4642}
4643
595f96a9
SM
4644/* rank_one_type helper for when PARM's type code is TYPE_CODE_STRUCT. */
4645
4646static struct rank
4647rank_one_type_parm_struct (struct type *parm, struct type *arg, struct value *value)
4648{
4649 struct rank rank = {0, 0};
4650
78134374 4651 switch (arg->code ())
595f96a9
SM
4652 {
4653 case TYPE_CODE_STRUCT:
4654 /* Check for derivation */
4655 rank.subrank = distance_to_ancestor (parm, arg, 0);
4656 if (rank.subrank >= 0)
4657 return sum_ranks (BASE_CONVERSION_BADNESS, rank);
4658 /* fall through */
4659 default:
4660 return INCOMPATIBLE_TYPE_BADNESS;
4661 }
4662}
4663
f09ce22d
SM
4664/* rank_one_type helper for when PARM's type code is TYPE_CODE_SET. */
4665
4666static struct rank
4667rank_one_type_parm_set (struct type *parm, struct type *arg, struct value *value)
4668{
78134374 4669 switch (arg->code ())
f09ce22d
SM
4670 {
4671 /* Not in C++ */
4672 case TYPE_CODE_SET:
940da03e
SM
4673 return rank_one_type (parm->field (0).type (),
4674 arg->field (0).type (), NULL);
f09ce22d
SM
4675 default:
4676 return INCOMPATIBLE_TYPE_BADNESS;
4677 }
4678}
4679
c906108c
SS
4680/* Compare one type (PARM) for compatibility with another (ARG).
4681 * PARM is intended to be the parameter type of a function; and
4682 * ARG is the supplied argument's type. This function tests if
4683 * the latter can be converted to the former.
da096638 4684 * VALUE is the argument's value or NULL if none (or called recursively)
c906108c
SS
4685 *
4686 * Return 0 if they are identical types;
4687 * Otherwise, return an integer which corresponds to how compatible
7ba81444
MS
4688 * PARM is to ARG. The higher the return value, the worse the match.
4689 * Generally the "bad" conversions are all uniformly assigned a 100. */
c906108c 4690
6403aeea 4691struct rank
da096638 4692rank_one_type (struct type *parm, struct type *arg, struct value *value)
c906108c 4693{
a9d5ef47 4694 struct rank rank = {0,0};
7062b0a0 4695
c906108c 4696 /* Resolve typedefs */
78134374 4697 if (parm->code () == TYPE_CODE_TYPEDEF)
c906108c 4698 parm = check_typedef (parm);
78134374 4699 if (arg->code () == TYPE_CODE_TYPEDEF)
c906108c
SS
4700 arg = check_typedef (arg);
4701
e15c3eb4 4702 if (TYPE_IS_REFERENCE (parm) && value != NULL)
15c0a2a9 4703 {
e15c3eb4
KS
4704 if (VALUE_LVAL (value) == not_lval)
4705 {
4706 /* Rvalues should preferably bind to rvalue references or const
4707 lvalue references. */
78134374 4708 if (parm->code () == TYPE_CODE_RVALUE_REF)
e15c3eb4
KS
4709 rank.subrank = REFERENCE_CONVERSION_RVALUE;
4710 else if (TYPE_CONST (TYPE_TARGET_TYPE (parm)))
4711 rank.subrank = REFERENCE_CONVERSION_CONST_LVALUE;
4712 else
4713 return INCOMPATIBLE_TYPE_BADNESS;
4714 return sum_ranks (rank, REFERENCE_CONVERSION_BADNESS);
4715 }
4716 else
4717 {
330f1d38 4718 /* It's illegal to pass an lvalue as an rvalue. */
78134374 4719 if (parm->code () == TYPE_CODE_RVALUE_REF)
330f1d38 4720 return INCOMPATIBLE_TYPE_BADNESS;
e15c3eb4 4721 }
15c0a2a9
AV
4722 }
4723
4724 if (types_equal (parm, arg))
15c0a2a9 4725 {
e15c3eb4
KS
4726 struct type *t1 = parm;
4727 struct type *t2 = arg;
15c0a2a9 4728
e15c3eb4 4729 /* For pointers and references, compare target type. */
78134374 4730 if (parm->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (parm))
e15c3eb4
KS
4731 {
4732 t1 = TYPE_TARGET_TYPE (parm);
4733 t2 = TYPE_TARGET_TYPE (arg);
4734 }
15c0a2a9 4735
e15c3eb4
KS
4736 /* Make sure they are CV equal, too. */
4737 if (TYPE_CONST (t1) != TYPE_CONST (t2))
4738 rank.subrank |= CV_CONVERSION_CONST;
4739 if (TYPE_VOLATILE (t1) != TYPE_VOLATILE (t2))
4740 rank.subrank |= CV_CONVERSION_VOLATILE;
4741 if (rank.subrank != 0)
4742 return sum_ranks (CV_CONVERSION_BADNESS, rank);
4743 return EXACT_MATCH_BADNESS;
15c0a2a9
AV
4744 }
4745
db577aea 4746 /* See through references, since we can almost make non-references
7ba81444 4747 references. */
aa006118
AV
4748
4749 if (TYPE_IS_REFERENCE (arg))
da096638 4750 return (sum_ranks (rank_one_type (parm, TYPE_TARGET_TYPE (arg), NULL),
dda83cd7 4751 REFERENCE_SEE_THROUGH_BADNESS));
aa006118 4752 if (TYPE_IS_REFERENCE (parm))
da096638 4753 return (sum_ranks (rank_one_type (TYPE_TARGET_TYPE (parm), arg, NULL),
dda83cd7 4754 REFERENCE_SEE_THROUGH_BADNESS));
5d161b24 4755 if (overload_debug)
7ba81444 4756 /* Debugging only. */
78134374 4757 fprintf_filtered (gdb_stderr,
7ba81444 4758 "------ Arg is %s [%d], parm is %s [%d]\n",
7d93a1e0
SM
4759 arg->name (), arg->code (),
4760 parm->name (), parm->code ());
c906108c 4761
0963b4bd 4762 /* x -> y means arg of type x being supplied for parameter of type y. */
c906108c 4763
78134374 4764 switch (parm->code ())
c906108c 4765 {
c5aa993b 4766 case TYPE_CODE_PTR:
9293fc63 4767 return rank_one_type_parm_ptr (parm, arg, value);
c5aa993b 4768 case TYPE_CODE_ARRAY:
b9f4512f 4769 return rank_one_type_parm_array (parm, arg, value);
c5aa993b 4770 case TYPE_CODE_FUNC:
f1f832d6 4771 return rank_one_type_parm_func (parm, arg, value);
c5aa993b 4772 case TYPE_CODE_INT:
34910087 4773 return rank_one_type_parm_int (parm, arg, value);
c5aa993b 4774 case TYPE_CODE_ENUM:
793cd1d2 4775 return rank_one_type_parm_enum (parm, arg, value);
c5aa993b 4776 case TYPE_CODE_CHAR:
41ea4728 4777 return rank_one_type_parm_char (parm, arg, value);
c5aa993b 4778 case TYPE_CODE_RANGE:
0dd322dc 4779 return rank_one_type_parm_range (parm, arg, value);
c5aa993b 4780 case TYPE_CODE_BOOL:
2c509035 4781 return rank_one_type_parm_bool (parm, arg, value);
c5aa993b 4782 case TYPE_CODE_FLT:
7f17b20d 4783 return rank_one_type_parm_float (parm, arg, value);
c5aa993b 4784 case TYPE_CODE_COMPLEX:
2598a94b 4785 return rank_one_type_parm_complex (parm, arg, value);
c5aa993b 4786 case TYPE_CODE_STRUCT:
595f96a9 4787 return rank_one_type_parm_struct (parm, arg, value);
c5aa993b 4788 case TYPE_CODE_SET:
f09ce22d 4789 return rank_one_type_parm_set (parm, arg, value);
c5aa993b
JM
4790 default:
4791 return INCOMPATIBLE_TYPE_BADNESS;
78134374 4792 } /* switch (arg->code ()) */
c906108c
SS
4793}
4794
0963b4bd 4795/* End of functions for overload resolution. */
5212577a
DE
4796\f
4797/* Routines to pretty-print types. */
c906108c 4798
c906108c 4799static void
fba45db2 4800print_bit_vector (B_TYPE *bits, int nbits)
c906108c
SS
4801{
4802 int bitno;
4803
4804 for (bitno = 0; bitno < nbits; bitno++)
4805 {
4806 if ((bitno % 8) == 0)
4807 {
4808 puts_filtered (" ");
4809 }
4810 if (B_TST (bits, bitno))
a3f17187 4811 printf_filtered (("1"));
c906108c 4812 else
a3f17187 4813 printf_filtered (("0"));
c906108c
SS
4814 }
4815}
4816
ad2f7632 4817/* Note the first arg should be the "this" pointer, we may not want to
7ba81444
MS
4818 include it since we may get into a infinitely recursive
4819 situation. */
c906108c
SS
4820
4821static void
4c9e8482 4822print_args (struct field *args, int nargs, int spaces)
c906108c
SS
4823{
4824 if (args != NULL)
4825 {
ad2f7632
DJ
4826 int i;
4827
4828 for (i = 0; i < nargs; i++)
4c9e8482
DE
4829 {
4830 printfi_filtered (spaces, "[%d] name '%s'\n", i,
4831 args[i].name != NULL ? args[i].name : "<NULL>");
5d14b6e5 4832 recursive_dump_type (args[i].type (), spaces + 2);
4c9e8482 4833 }
c906108c
SS
4834 }
4835}
4836
d6a843b5
JK
4837int
4838field_is_static (struct field *f)
4839{
4840 /* "static" fields are the fields whose location is not relative
4841 to the address of the enclosing struct. It would be nice to
4842 have a dedicated flag that would be set for static fields when
4843 the type is being created. But in practice, checking the field
254e6b9e 4844 loc_kind should give us an accurate answer. */
d6a843b5
JK
4845 return (FIELD_LOC_KIND (*f) == FIELD_LOC_KIND_PHYSNAME
4846 || FIELD_LOC_KIND (*f) == FIELD_LOC_KIND_PHYSADDR);
4847}
4848
c906108c 4849static void
fba45db2 4850dump_fn_fieldlists (struct type *type, int spaces)
c906108c
SS
4851{
4852 int method_idx;
4853 int overload_idx;
4854 struct fn_field *f;
4855
4856 printfi_filtered (spaces, "fn_fieldlists ");
d4f3574e 4857 gdb_print_host_address (TYPE_FN_FIELDLISTS (type), gdb_stdout);
c906108c
SS
4858 printf_filtered ("\n");
4859 for (method_idx = 0; method_idx < TYPE_NFN_FIELDS (type); method_idx++)
4860 {
4861 f = TYPE_FN_FIELDLIST1 (type, method_idx);
4862 printfi_filtered (spaces + 2, "[%d] name '%s' (",
4863 method_idx,
4864 TYPE_FN_FIELDLIST_NAME (type, method_idx));
d4f3574e
SS
4865 gdb_print_host_address (TYPE_FN_FIELDLIST_NAME (type, method_idx),
4866 gdb_stdout);
a3f17187 4867 printf_filtered (_(") length %d\n"),
c906108c
SS
4868 TYPE_FN_FIELDLIST_LENGTH (type, method_idx));
4869 for (overload_idx = 0;
4870 overload_idx < TYPE_FN_FIELDLIST_LENGTH (type, method_idx);
4871 overload_idx++)
4872 {
4873 printfi_filtered (spaces + 4, "[%d] physname '%s' (",
4874 overload_idx,
4875 TYPE_FN_FIELD_PHYSNAME (f, overload_idx));
d4f3574e
SS
4876 gdb_print_host_address (TYPE_FN_FIELD_PHYSNAME (f, overload_idx),
4877 gdb_stdout);
c906108c
SS
4878 printf_filtered (")\n");
4879 printfi_filtered (spaces + 8, "type ");
7ba81444
MS
4880 gdb_print_host_address (TYPE_FN_FIELD_TYPE (f, overload_idx),
4881 gdb_stdout);
c906108c
SS
4882 printf_filtered ("\n");
4883
4884 recursive_dump_type (TYPE_FN_FIELD_TYPE (f, overload_idx),
4885 spaces + 8 + 2);
4886
4887 printfi_filtered (spaces + 8, "args ");
7ba81444
MS
4888 gdb_print_host_address (TYPE_FN_FIELD_ARGS (f, overload_idx),
4889 gdb_stdout);
c906108c 4890 printf_filtered ("\n");
4c9e8482 4891 print_args (TYPE_FN_FIELD_ARGS (f, overload_idx),
1f704f76 4892 TYPE_FN_FIELD_TYPE (f, overload_idx)->num_fields (),
4c9e8482 4893 spaces + 8 + 2);
c906108c 4894 printfi_filtered (spaces + 8, "fcontext ");
d4f3574e
SS
4895 gdb_print_host_address (TYPE_FN_FIELD_FCONTEXT (f, overload_idx),
4896 gdb_stdout);
c906108c
SS
4897 printf_filtered ("\n");
4898
4899 printfi_filtered (spaces + 8, "is_const %d\n",
4900 TYPE_FN_FIELD_CONST (f, overload_idx));
4901 printfi_filtered (spaces + 8, "is_volatile %d\n",
4902 TYPE_FN_FIELD_VOLATILE (f, overload_idx));
4903 printfi_filtered (spaces + 8, "is_private %d\n",
4904 TYPE_FN_FIELD_PRIVATE (f, overload_idx));
4905 printfi_filtered (spaces + 8, "is_protected %d\n",
4906 TYPE_FN_FIELD_PROTECTED (f, overload_idx));
4907 printfi_filtered (spaces + 8, "is_stub %d\n",
4908 TYPE_FN_FIELD_STUB (f, overload_idx));
e35000a7
TBA
4909 printfi_filtered (spaces + 8, "defaulted %d\n",
4910 TYPE_FN_FIELD_DEFAULTED (f, overload_idx));
4911 printfi_filtered (spaces + 8, "is_deleted %d\n",
4912 TYPE_FN_FIELD_DELETED (f, overload_idx));
c906108c
SS
4913 printfi_filtered (spaces + 8, "voffset %u\n",
4914 TYPE_FN_FIELD_VOFFSET (f, overload_idx));
4915 }
4916 }
4917}
4918
4919static void
fba45db2 4920print_cplus_stuff (struct type *type, int spaces)
c906108c 4921{
ae6ae975
DE
4922 printfi_filtered (spaces, "vptr_fieldno %d\n", TYPE_VPTR_FIELDNO (type));
4923 printfi_filtered (spaces, "vptr_basetype ");
4924 gdb_print_host_address (TYPE_VPTR_BASETYPE (type), gdb_stdout);
4925 puts_filtered ("\n");
4926 if (TYPE_VPTR_BASETYPE (type) != NULL)
4927 recursive_dump_type (TYPE_VPTR_BASETYPE (type), spaces + 2);
4928
c906108c
SS
4929 printfi_filtered (spaces, "n_baseclasses %d\n",
4930 TYPE_N_BASECLASSES (type));
4931 printfi_filtered (spaces, "nfn_fields %d\n",
4932 TYPE_NFN_FIELDS (type));
c906108c
SS
4933 if (TYPE_N_BASECLASSES (type) > 0)
4934 {
4935 printfi_filtered (spaces, "virtual_field_bits (%d bits at *",
4936 TYPE_N_BASECLASSES (type));
7ba81444
MS
4937 gdb_print_host_address (TYPE_FIELD_VIRTUAL_BITS (type),
4938 gdb_stdout);
c906108c
SS
4939 printf_filtered (")");
4940
4941 print_bit_vector (TYPE_FIELD_VIRTUAL_BITS (type),
4942 TYPE_N_BASECLASSES (type));
4943 puts_filtered ("\n");
4944 }
1f704f76 4945 if (type->num_fields () > 0)
c906108c
SS
4946 {
4947 if (TYPE_FIELD_PRIVATE_BITS (type) != NULL)
4948 {
7ba81444
MS
4949 printfi_filtered (spaces,
4950 "private_field_bits (%d bits at *",
1f704f76 4951 type->num_fields ());
7ba81444
MS
4952 gdb_print_host_address (TYPE_FIELD_PRIVATE_BITS (type),
4953 gdb_stdout);
c906108c
SS
4954 printf_filtered (")");
4955 print_bit_vector (TYPE_FIELD_PRIVATE_BITS (type),
1f704f76 4956 type->num_fields ());
c906108c
SS
4957 puts_filtered ("\n");
4958 }
4959 if (TYPE_FIELD_PROTECTED_BITS (type) != NULL)
4960 {
7ba81444
MS
4961 printfi_filtered (spaces,
4962 "protected_field_bits (%d bits at *",
1f704f76 4963 type->num_fields ());
7ba81444
MS
4964 gdb_print_host_address (TYPE_FIELD_PROTECTED_BITS (type),
4965 gdb_stdout);
c906108c
SS
4966 printf_filtered (")");
4967 print_bit_vector (TYPE_FIELD_PROTECTED_BITS (type),
1f704f76 4968 type->num_fields ());
c906108c
SS
4969 puts_filtered ("\n");
4970 }
4971 }
4972 if (TYPE_NFN_FIELDS (type) > 0)
4973 {
4974 dump_fn_fieldlists (type, spaces);
4975 }
e35000a7
TBA
4976
4977 printfi_filtered (spaces, "calling_convention %d\n",
4978 TYPE_CPLUS_CALLING_CONVENTION (type));
c906108c
SS
4979}
4980
b4ba55a1
JB
4981/* Print the contents of the TYPE's type_specific union, assuming that
4982 its type-specific kind is TYPE_SPECIFIC_GNAT_STUFF. */
4983
4984static void
4985print_gnat_stuff (struct type *type, int spaces)
4986{
4987 struct type *descriptive_type = TYPE_DESCRIPTIVE_TYPE (type);
4988
8cd00c59
PMR
4989 if (descriptive_type == NULL)
4990 printfi_filtered (spaces + 2, "no descriptive type\n");
4991 else
4992 {
4993 printfi_filtered (spaces + 2, "descriptive type\n");
4994 recursive_dump_type (descriptive_type, spaces + 4);
4995 }
b4ba55a1
JB
4996}
4997
09584414
JB
4998/* Print the contents of the TYPE's type_specific union, assuming that
4999 its type-specific kind is TYPE_SPECIFIC_FIXED_POINT. */
5000
5001static void
5002print_fixed_point_type_info (struct type *type, int spaces)
5003{
5004 printfi_filtered (spaces + 2, "scaling factor: %s\n",
e6fcee3a 5005 type->fixed_point_scaling_factor ().str ().c_str ());
09584414
JB
5006}
5007
c906108c
SS
5008static struct obstack dont_print_type_obstack;
5009
53d5a2a5
TV
5010/* Print the dynamic_prop PROP. */
5011
5012static void
5013dump_dynamic_prop (dynamic_prop const& prop)
5014{
5015 switch (prop.kind ())
5016 {
5017 case PROP_CONST:
5018 printf_filtered ("%s", plongest (prop.const_val ()));
5019 break;
5020 case PROP_UNDEFINED:
5021 printf_filtered ("(undefined)");
5022 break;
5023 case PROP_LOCEXPR:
5024 case PROP_LOCLIST:
5025 printf_filtered ("(dynamic)");
5026 break;
5027 default:
5028 gdb_assert_not_reached ("unhandled prop kind");
5029 break;
5030 }
5031}
5032
c906108c 5033void
fba45db2 5034recursive_dump_type (struct type *type, int spaces)
c906108c
SS
5035{
5036 int idx;
5037
5038 if (spaces == 0)
5039 obstack_begin (&dont_print_type_obstack, 0);
5040
1f704f76 5041 if (type->num_fields () > 0
b4ba55a1 5042 || (HAVE_CPLUS_STRUCT (type) && TYPE_NFN_FIELDS (type) > 0))
c906108c
SS
5043 {
5044 struct type **first_dont_print
7ba81444 5045 = (struct type **) obstack_base (&dont_print_type_obstack);
c906108c 5046
7ba81444
MS
5047 int i = (struct type **)
5048 obstack_next_free (&dont_print_type_obstack) - first_dont_print;
c906108c
SS
5049
5050 while (--i >= 0)
5051 {
5052 if (type == first_dont_print[i])
5053 {
5054 printfi_filtered (spaces, "type node ");
d4f3574e 5055 gdb_print_host_address (type, gdb_stdout);
a3f17187 5056 printf_filtered (_(" <same as already seen type>\n"));
c906108c
SS
5057 return;
5058 }
5059 }
5060
5061 obstack_ptr_grow (&dont_print_type_obstack, type);
5062 }
5063
5064 printfi_filtered (spaces, "type node ");
d4f3574e 5065 gdb_print_host_address (type, gdb_stdout);
c906108c
SS
5066 printf_filtered ("\n");
5067 printfi_filtered (spaces, "name '%s' (",
7d93a1e0
SM
5068 type->name () ? type->name () : "<NULL>");
5069 gdb_print_host_address (type->name (), gdb_stdout);
c906108c 5070 printf_filtered (")\n");
78134374
SM
5071 printfi_filtered (spaces, "code 0x%x ", type->code ());
5072 switch (type->code ())
c906108c 5073 {
c5aa993b
JM
5074 case TYPE_CODE_UNDEF:
5075 printf_filtered ("(TYPE_CODE_UNDEF)");
5076 break;
5077 case TYPE_CODE_PTR:
5078 printf_filtered ("(TYPE_CODE_PTR)");
5079 break;
5080 case TYPE_CODE_ARRAY:
5081 printf_filtered ("(TYPE_CODE_ARRAY)");
5082 break;
5083 case TYPE_CODE_STRUCT:
5084 printf_filtered ("(TYPE_CODE_STRUCT)");
5085 break;
5086 case TYPE_CODE_UNION:
5087 printf_filtered ("(TYPE_CODE_UNION)");
5088 break;
5089 case TYPE_CODE_ENUM:
5090 printf_filtered ("(TYPE_CODE_ENUM)");
5091 break;
4f2aea11
MK
5092 case TYPE_CODE_FLAGS:
5093 printf_filtered ("(TYPE_CODE_FLAGS)");
5094 break;
c5aa993b
JM
5095 case TYPE_CODE_FUNC:
5096 printf_filtered ("(TYPE_CODE_FUNC)");
5097 break;
5098 case TYPE_CODE_INT:
5099 printf_filtered ("(TYPE_CODE_INT)");
5100 break;
5101 case TYPE_CODE_FLT:
5102 printf_filtered ("(TYPE_CODE_FLT)");
5103 break;
5104 case TYPE_CODE_VOID:
5105 printf_filtered ("(TYPE_CODE_VOID)");
5106 break;
5107 case TYPE_CODE_SET:
5108 printf_filtered ("(TYPE_CODE_SET)");
5109 break;
5110 case TYPE_CODE_RANGE:
5111 printf_filtered ("(TYPE_CODE_RANGE)");
5112 break;
5113 case TYPE_CODE_STRING:
5114 printf_filtered ("(TYPE_CODE_STRING)");
5115 break;
5116 case TYPE_CODE_ERROR:
5117 printf_filtered ("(TYPE_CODE_ERROR)");
5118 break;
0d5de010
DJ
5119 case TYPE_CODE_MEMBERPTR:
5120 printf_filtered ("(TYPE_CODE_MEMBERPTR)");
5121 break;
5122 case TYPE_CODE_METHODPTR:
5123 printf_filtered ("(TYPE_CODE_METHODPTR)");
c5aa993b
JM
5124 break;
5125 case TYPE_CODE_METHOD:
5126 printf_filtered ("(TYPE_CODE_METHOD)");
5127 break;
5128 case TYPE_CODE_REF:
5129 printf_filtered ("(TYPE_CODE_REF)");
5130 break;
5131 case TYPE_CODE_CHAR:
5132 printf_filtered ("(TYPE_CODE_CHAR)");
5133 break;
5134 case TYPE_CODE_BOOL:
5135 printf_filtered ("(TYPE_CODE_BOOL)");
5136 break;
e9e79dd9
FF
5137 case TYPE_CODE_COMPLEX:
5138 printf_filtered ("(TYPE_CODE_COMPLEX)");
5139 break;
c5aa993b
JM
5140 case TYPE_CODE_TYPEDEF:
5141 printf_filtered ("(TYPE_CODE_TYPEDEF)");
5142 break;
5c4e30ca
DC
5143 case TYPE_CODE_NAMESPACE:
5144 printf_filtered ("(TYPE_CODE_NAMESPACE)");
5145 break;
09584414
JB
5146 case TYPE_CODE_FIXED_POINT:
5147 printf_filtered ("(TYPE_CODE_FIXED_POINT)");
5148 break;
c5aa993b
JM
5149 default:
5150 printf_filtered ("(UNKNOWN TYPE CODE)");
5151 break;
c906108c
SS
5152 }
5153 puts_filtered ("\n");
cc1defb1 5154 printfi_filtered (spaces, "length %s\n", pulongest (TYPE_LENGTH (type)));
e9bb382b
UW
5155 if (TYPE_OBJFILE_OWNED (type))
5156 {
5157 printfi_filtered (spaces, "objfile ");
5158 gdb_print_host_address (TYPE_OWNER (type).objfile, gdb_stdout);
5159 }
5160 else
5161 {
5162 printfi_filtered (spaces, "gdbarch ");
5163 gdb_print_host_address (TYPE_OWNER (type).gdbarch, gdb_stdout);
5164 }
c906108c
SS
5165 printf_filtered ("\n");
5166 printfi_filtered (spaces, "target_type ");
d4f3574e 5167 gdb_print_host_address (TYPE_TARGET_TYPE (type), gdb_stdout);
c906108c
SS
5168 printf_filtered ("\n");
5169 if (TYPE_TARGET_TYPE (type) != NULL)
5170 {
5171 recursive_dump_type (TYPE_TARGET_TYPE (type), spaces + 2);
5172 }
5173 printfi_filtered (spaces, "pointer_type ");
d4f3574e 5174 gdb_print_host_address (TYPE_POINTER_TYPE (type), gdb_stdout);
c906108c
SS
5175 printf_filtered ("\n");
5176 printfi_filtered (spaces, "reference_type ");
d4f3574e 5177 gdb_print_host_address (TYPE_REFERENCE_TYPE (type), gdb_stdout);
c906108c 5178 printf_filtered ("\n");
2fdde8f8
DJ
5179 printfi_filtered (spaces, "type_chain ");
5180 gdb_print_host_address (TYPE_CHAIN (type), gdb_stdout);
e9e79dd9 5181 printf_filtered ("\n");
7ba81444 5182 printfi_filtered (spaces, "instance_flags 0x%x",
314ad88d 5183 (unsigned) type->instance_flags ());
2fdde8f8
DJ
5184 if (TYPE_CONST (type))
5185 {
a9ff5f12 5186 puts_filtered (" TYPE_CONST");
2fdde8f8
DJ
5187 }
5188 if (TYPE_VOLATILE (type))
5189 {
a9ff5f12 5190 puts_filtered (" TYPE_VOLATILE");
2fdde8f8
DJ
5191 }
5192 if (TYPE_CODE_SPACE (type))
5193 {
a9ff5f12 5194 puts_filtered (" TYPE_CODE_SPACE");
2fdde8f8
DJ
5195 }
5196 if (TYPE_DATA_SPACE (type))
5197 {
a9ff5f12 5198 puts_filtered (" TYPE_DATA_SPACE");
2fdde8f8 5199 }
8b2dbe47
KB
5200 if (TYPE_ADDRESS_CLASS_1 (type))
5201 {
a9ff5f12 5202 puts_filtered (" TYPE_ADDRESS_CLASS_1");
8b2dbe47
KB
5203 }
5204 if (TYPE_ADDRESS_CLASS_2 (type))
5205 {
a9ff5f12 5206 puts_filtered (" TYPE_ADDRESS_CLASS_2");
8b2dbe47 5207 }
06d66ee9
TT
5208 if (TYPE_RESTRICT (type))
5209 {
a9ff5f12 5210 puts_filtered (" TYPE_RESTRICT");
06d66ee9 5211 }
a2c2acaf
MW
5212 if (TYPE_ATOMIC (type))
5213 {
a9ff5f12 5214 puts_filtered (" TYPE_ATOMIC");
a2c2acaf 5215 }
2fdde8f8 5216 puts_filtered ("\n");
876cecd0
TT
5217
5218 printfi_filtered (spaces, "flags");
c6d940a9 5219 if (type->is_unsigned ())
c906108c 5220 {
a9ff5f12 5221 puts_filtered (" TYPE_UNSIGNED");
c906108c 5222 }
20ce4123 5223 if (type->has_no_signedness ())
762a036f 5224 {
a9ff5f12 5225 puts_filtered (" TYPE_NOSIGN");
762a036f 5226 }
04f5bab2 5227 if (type->endianity_is_not_default ())
34877895
PJ
5228 {
5229 puts_filtered (" TYPE_ENDIANITY_NOT_DEFAULT");
5230 }
e46d3488 5231 if (type->is_stub ())
c906108c 5232 {
a9ff5f12 5233 puts_filtered (" TYPE_STUB");
c906108c 5234 }
d2183968 5235 if (type->target_is_stub ())
762a036f 5236 {
a9ff5f12 5237 puts_filtered (" TYPE_TARGET_STUB");
762a036f 5238 }
7f9f399b 5239 if (type->is_prototyped ())
762a036f 5240 {
a9ff5f12 5241 puts_filtered (" TYPE_PROTOTYPED");
762a036f 5242 }
a409645d 5243 if (type->has_varargs ())
762a036f 5244 {
a9ff5f12 5245 puts_filtered (" TYPE_VARARGS");
762a036f 5246 }
f5f8a009
EZ
5247 /* This is used for things like AltiVec registers on ppc. Gcc emits
5248 an attribute for the array type, which tells whether or not we
5249 have a vector, instead of a regular array. */
bd63c870 5250 if (type->is_vector ())
f5f8a009 5251 {
a9ff5f12 5252 puts_filtered (" TYPE_VECTOR");
f5f8a009 5253 }
22c4c60c 5254 if (type->is_fixed_instance ())
876cecd0
TT
5255 {
5256 puts_filtered (" TYPE_FIXED_INSTANCE");
5257 }
3f46044c 5258 if (type->stub_is_supported ())
876cecd0
TT
5259 {
5260 puts_filtered (" TYPE_STUB_SUPPORTED");
5261 }
5262 if (TYPE_NOTTEXT (type))
5263 {
5264 puts_filtered (" TYPE_NOTTEXT");
5265 }
c906108c 5266 puts_filtered ("\n");
1f704f76 5267 printfi_filtered (spaces, "nfields %d ", type->num_fields ());
80fc5e77 5268 gdb_print_host_address (type->fields (), gdb_stdout);
c906108c 5269 puts_filtered ("\n");
1f704f76 5270 for (idx = 0; idx < type->num_fields (); idx++)
c906108c 5271 {
78134374 5272 if (type->code () == TYPE_CODE_ENUM)
14e75d8e
JK
5273 printfi_filtered (spaces + 2,
5274 "[%d] enumval %s type ",
5275 idx, plongest (TYPE_FIELD_ENUMVAL (type, idx)));
5276 else
5277 printfi_filtered (spaces + 2,
6b850546
DT
5278 "[%d] bitpos %s bitsize %d type ",
5279 idx, plongest (TYPE_FIELD_BITPOS (type, idx)),
14e75d8e 5280 TYPE_FIELD_BITSIZE (type, idx));
940da03e 5281 gdb_print_host_address (type->field (idx).type (), gdb_stdout);
c906108c
SS
5282 printf_filtered (" name '%s' (",
5283 TYPE_FIELD_NAME (type, idx) != NULL
5284 ? TYPE_FIELD_NAME (type, idx)
5285 : "<NULL>");
d4f3574e 5286 gdb_print_host_address (TYPE_FIELD_NAME (type, idx), gdb_stdout);
c906108c 5287 printf_filtered (")\n");
940da03e 5288 if (type->field (idx).type () != NULL)
c906108c 5289 {
940da03e 5290 recursive_dump_type (type->field (idx).type (), spaces + 4);
c906108c
SS
5291 }
5292 }
78134374 5293 if (type->code () == TYPE_CODE_RANGE)
43bbcdc2 5294 {
53d5a2a5
TV
5295 printfi_filtered (spaces, "low ");
5296 dump_dynamic_prop (type->bounds ()->low);
5297 printf_filtered (" high ");
5298 dump_dynamic_prop (type->bounds ()->high);
5299 printf_filtered ("\n");
43bbcdc2 5300 }
c906108c 5301
b4ba55a1
JB
5302 switch (TYPE_SPECIFIC_FIELD (type))
5303 {
5304 case TYPE_SPECIFIC_CPLUS_STUFF:
5305 printfi_filtered (spaces, "cplus_stuff ");
5306 gdb_print_host_address (TYPE_CPLUS_SPECIFIC (type),
5307 gdb_stdout);
5308 puts_filtered ("\n");
5309 print_cplus_stuff (type, spaces);
5310 break;
8da61cc4 5311
b4ba55a1
JB
5312 case TYPE_SPECIFIC_GNAT_STUFF:
5313 printfi_filtered (spaces, "gnat_stuff ");
5314 gdb_print_host_address (TYPE_GNAT_SPECIFIC (type), gdb_stdout);
5315 puts_filtered ("\n");
5316 print_gnat_stuff (type, spaces);
5317 break;
701c159d 5318
b4ba55a1
JB
5319 case TYPE_SPECIFIC_FLOATFORMAT:
5320 printfi_filtered (spaces, "floatformat ");
0db7851f
UW
5321 if (TYPE_FLOATFORMAT (type) == NULL
5322 || TYPE_FLOATFORMAT (type)->name == NULL)
b4ba55a1
JB
5323 puts_filtered ("(null)");
5324 else
0db7851f 5325 puts_filtered (TYPE_FLOATFORMAT (type)->name);
b4ba55a1
JB
5326 puts_filtered ("\n");
5327 break;
c906108c 5328
b6cdc2c1 5329 case TYPE_SPECIFIC_FUNC:
b4ba55a1 5330 printfi_filtered (spaces, "calling_convention %d\n",
dda83cd7 5331 TYPE_CALLING_CONVENTION (type));
b6cdc2c1 5332 /* tail_call_list is not printed. */
b4ba55a1 5333 break;
09e2d7c7
DE
5334
5335 case TYPE_SPECIFIC_SELF_TYPE:
5336 printfi_filtered (spaces, "self_type ");
5337 gdb_print_host_address (TYPE_SELF_TYPE (type), gdb_stdout);
5338 puts_filtered ("\n");
5339 break;
20a5fcbd 5340
09584414
JB
5341 case TYPE_SPECIFIC_FIXED_POINT:
5342 printfi_filtered (spaces, "fixed_point_info ");
5343 print_fixed_point_type_info (type, spaces);
5344 puts_filtered ("\n");
5345 break;
5346
20a5fcbd
TT
5347 case TYPE_SPECIFIC_INT:
5348 if (type->bit_size_differs_p ())
5349 {
5350 unsigned bit_size = type->bit_size ();
5351 unsigned bit_off = type->bit_offset ();
5352 printfi_filtered (spaces, " bit size = %u, bit offset = %u\n",
5353 bit_size, bit_off);
5354 }
5355 break;
c906108c 5356 }
b4ba55a1 5357
c906108c
SS
5358 if (spaces == 0)
5359 obstack_free (&dont_print_type_obstack, NULL);
5360}
5212577a 5361\f
ae5a43e0
DJ
5362/* Trivial helpers for the libiberty hash table, for mapping one
5363 type to another. */
5364
fd90ace4 5365struct type_pair : public allocate_on_obstack
ae5a43e0 5366{
fd90ace4
YQ
5367 type_pair (struct type *old_, struct type *newobj_)
5368 : old (old_), newobj (newobj_)
5369 {}
5370
5371 struct type * const old, * const newobj;
ae5a43e0
DJ
5372};
5373
5374static hashval_t
5375type_pair_hash (const void *item)
5376{
9a3c8263 5377 const struct type_pair *pair = (const struct type_pair *) item;
d8734c88 5378
ae5a43e0
DJ
5379 return htab_hash_pointer (pair->old);
5380}
5381
5382static int
5383type_pair_eq (const void *item_lhs, const void *item_rhs)
5384{
9a3c8263
SM
5385 const struct type_pair *lhs = (const struct type_pair *) item_lhs;
5386 const struct type_pair *rhs = (const struct type_pair *) item_rhs;
d8734c88 5387
ae5a43e0
DJ
5388 return lhs->old == rhs->old;
5389}
5390
5391/* Allocate the hash table used by copy_type_recursive to walk
5392 types without duplicates. We use OBJFILE's obstack, because
5393 OBJFILE is about to be deleted. */
5394
6108fd18 5395htab_up
ae5a43e0
DJ
5396create_copied_types_hash (struct objfile *objfile)
5397{
6108fd18
TT
5398 return htab_up (htab_create_alloc_ex (1, type_pair_hash, type_pair_eq,
5399 NULL, &objfile->objfile_obstack,
5400 hashtab_obstack_allocate,
5401 dummy_obstack_deallocate));
ae5a43e0
DJ
5402}
5403
d9823cbb
KB
5404/* Recursively copy (deep copy) a dynamic attribute list of a type. */
5405
5406static struct dynamic_prop_list *
5407copy_dynamic_prop_list (struct obstack *objfile_obstack,
5408 struct dynamic_prop_list *list)
5409{
5410 struct dynamic_prop_list *copy = list;
5411 struct dynamic_prop_list **node_ptr = &copy;
5412
5413 while (*node_ptr != NULL)
5414 {
5415 struct dynamic_prop_list *node_copy;
5416
224c3ddb
SM
5417 node_copy = ((struct dynamic_prop_list *)
5418 obstack_copy (objfile_obstack, *node_ptr,
5419 sizeof (struct dynamic_prop_list)));
283a9958 5420 node_copy->prop = (*node_ptr)->prop;
d9823cbb
KB
5421 *node_ptr = node_copy;
5422
5423 node_ptr = &node_copy->next;
5424 }
5425
5426 return copy;
5427}
5428
7ba81444 5429/* Recursively copy (deep copy) TYPE, if it is associated with
eed8b28a
PP
5430 OBJFILE. Return a new type owned by the gdbarch associated with the type, a
5431 saved type if we have already visited TYPE (using COPIED_TYPES), or TYPE if
5432 it is not associated with OBJFILE. */
ae5a43e0
DJ
5433
5434struct type *
7ba81444
MS
5435copy_type_recursive (struct objfile *objfile,
5436 struct type *type,
ae5a43e0
DJ
5437 htab_t copied_types)
5438{
ae5a43e0
DJ
5439 void **slot;
5440 struct type *new_type;
5441
e9bb382b 5442 if (! TYPE_OBJFILE_OWNED (type))
ae5a43e0
DJ
5443 return type;
5444
7ba81444
MS
5445 /* This type shouldn't be pointing to any types in other objfiles;
5446 if it did, the type might disappear unexpectedly. */
ae5a43e0
DJ
5447 gdb_assert (TYPE_OBJFILE (type) == objfile);
5448
fd90ace4
YQ
5449 struct type_pair pair (type, nullptr);
5450
ae5a43e0
DJ
5451 slot = htab_find_slot (copied_types, &pair, INSERT);
5452 if (*slot != NULL)
fe978cb0 5453 return ((struct type_pair *) *slot)->newobj;
ae5a43e0 5454
e9bb382b 5455 new_type = alloc_type_arch (get_type_arch (type));
ae5a43e0
DJ
5456
5457 /* We must add the new type to the hash table immediately, in case
5458 we encounter this type again during a recursive call below. */
fd90ace4
YQ
5459 struct type_pair *stored
5460 = new (&objfile->objfile_obstack) struct type_pair (type, new_type);
5461
ae5a43e0
DJ
5462 *slot = stored;
5463
876cecd0
TT
5464 /* Copy the common fields of types. For the main type, we simply
5465 copy the entire thing and then update specific fields as needed. */
5466 *TYPE_MAIN_TYPE (new_type) = *TYPE_MAIN_TYPE (type);
e9bb382b
UW
5467 TYPE_OBJFILE_OWNED (new_type) = 0;
5468 TYPE_OWNER (new_type).gdbarch = get_type_arch (type);
876cecd0 5469
7d93a1e0
SM
5470 if (type->name ())
5471 new_type->set_name (xstrdup (type->name ()));
ae5a43e0 5472
314ad88d 5473 new_type->set_instance_flags (type->instance_flags ());
ae5a43e0
DJ
5474 TYPE_LENGTH (new_type) = TYPE_LENGTH (type);
5475
5476 /* Copy the fields. */
1f704f76 5477 if (type->num_fields ())
ae5a43e0
DJ
5478 {
5479 int i, nfields;
5480
1f704f76 5481 nfields = type->num_fields ();
3cabb6b0
SM
5482 new_type->set_fields
5483 ((struct field *)
5484 TYPE_ZALLOC (new_type, nfields * sizeof (struct field)));
5485
ae5a43e0
DJ
5486 for (i = 0; i < nfields; i++)
5487 {
7ba81444
MS
5488 TYPE_FIELD_ARTIFICIAL (new_type, i) =
5489 TYPE_FIELD_ARTIFICIAL (type, i);
ae5a43e0 5490 TYPE_FIELD_BITSIZE (new_type, i) = TYPE_FIELD_BITSIZE (type, i);
940da03e 5491 if (type->field (i).type ())
5d14b6e5 5492 new_type->field (i).set_type
940da03e 5493 (copy_type_recursive (objfile, type->field (i).type (),
5d14b6e5 5494 copied_types));
ae5a43e0 5495 if (TYPE_FIELD_NAME (type, i))
7ba81444
MS
5496 TYPE_FIELD_NAME (new_type, i) =
5497 xstrdup (TYPE_FIELD_NAME (type, i));
d6a843b5 5498 switch (TYPE_FIELD_LOC_KIND (type, i))
ae5a43e0 5499 {
d6a843b5 5500 case FIELD_LOC_KIND_BITPOS:
ceacbf6e 5501 SET_FIELD_BITPOS (new_type->field (i),
d6a843b5
JK
5502 TYPE_FIELD_BITPOS (type, i));
5503 break;
14e75d8e 5504 case FIELD_LOC_KIND_ENUMVAL:
ceacbf6e 5505 SET_FIELD_ENUMVAL (new_type->field (i),
14e75d8e
JK
5506 TYPE_FIELD_ENUMVAL (type, i));
5507 break;
d6a843b5 5508 case FIELD_LOC_KIND_PHYSADDR:
ceacbf6e 5509 SET_FIELD_PHYSADDR (new_type->field (i),
d6a843b5
JK
5510 TYPE_FIELD_STATIC_PHYSADDR (type, i));
5511 break;
5512 case FIELD_LOC_KIND_PHYSNAME:
ceacbf6e 5513 SET_FIELD_PHYSNAME (new_type->field (i),
d6a843b5
JK
5514 xstrdup (TYPE_FIELD_STATIC_PHYSNAME (type,
5515 i)));
5516 break;
5517 default:
5518 internal_error (__FILE__, __LINE__,
5519 _("Unexpected type field location kind: %d"),
5520 TYPE_FIELD_LOC_KIND (type, i));
ae5a43e0
DJ
5521 }
5522 }
5523 }
5524
0963b4bd 5525 /* For range types, copy the bounds information. */
78134374 5526 if (type->code () == TYPE_CODE_RANGE)
43bbcdc2 5527 {
c4dfcb36 5528 range_bounds *bounds
dda83cd7 5529 = ((struct range_bounds *) TYPE_ALLOC
c4dfcb36
SM
5530 (new_type, sizeof (struct range_bounds)));
5531
5532 *bounds = *type->bounds ();
5533 new_type->set_bounds (bounds);
43bbcdc2
PH
5534 }
5535
98d48915
SM
5536 if (type->main_type->dyn_prop_list != NULL)
5537 new_type->main_type->dyn_prop_list
d9823cbb 5538 = copy_dynamic_prop_list (&objfile->objfile_obstack,
98d48915 5539 type->main_type->dyn_prop_list);
d9823cbb 5540
3cdcd0ce 5541
ae5a43e0
DJ
5542 /* Copy pointers to other types. */
5543 if (TYPE_TARGET_TYPE (type))
7ba81444
MS
5544 TYPE_TARGET_TYPE (new_type) =
5545 copy_type_recursive (objfile,
5546 TYPE_TARGET_TYPE (type),
5547 copied_types);
f6b3afbf 5548
ae5a43e0
DJ
5549 /* Maybe copy the type_specific bits.
5550
5551 NOTE drow/2005-12-09: We do not copy the C++-specific bits like
5552 base classes and methods. There's no fundamental reason why we
5553 can't, but at the moment it is not needed. */
5554
f6b3afbf
DE
5555 switch (TYPE_SPECIFIC_FIELD (type))
5556 {
5557 case TYPE_SPECIFIC_NONE:
5558 break;
5559 case TYPE_SPECIFIC_FUNC:
5560 INIT_FUNC_SPECIFIC (new_type);
5561 TYPE_CALLING_CONVENTION (new_type) = TYPE_CALLING_CONVENTION (type);
5562 TYPE_NO_RETURN (new_type) = TYPE_NO_RETURN (type);
5563 TYPE_TAIL_CALL_LIST (new_type) = NULL;
5564 break;
5565 case TYPE_SPECIFIC_FLOATFORMAT:
5566 TYPE_FLOATFORMAT (new_type) = TYPE_FLOATFORMAT (type);
5567 break;
5568 case TYPE_SPECIFIC_CPLUS_STUFF:
5569 INIT_CPLUS_SPECIFIC (new_type);
5570 break;
5571 case TYPE_SPECIFIC_GNAT_STUFF:
5572 INIT_GNAT_SPECIFIC (new_type);
5573 break;
09e2d7c7
DE
5574 case TYPE_SPECIFIC_SELF_TYPE:
5575 set_type_self_type (new_type,
5576 copy_type_recursive (objfile, TYPE_SELF_TYPE (type),
5577 copied_types));
5578 break;
09584414
JB
5579 case TYPE_SPECIFIC_FIXED_POINT:
5580 INIT_FIXED_POINT_SPECIFIC (new_type);
2a12c336
JB
5581 new_type->fixed_point_info ().scaling_factor
5582 = type->fixed_point_info ().scaling_factor;
09584414 5583 break;
20a5fcbd
TT
5584 case TYPE_SPECIFIC_INT:
5585 TYPE_SPECIFIC_FIELD (new_type) = TYPE_SPECIFIC_INT;
5586 TYPE_MAIN_TYPE (new_type)->type_specific.int_stuff
5587 = TYPE_MAIN_TYPE (type)->type_specific.int_stuff;
5588 break;
5589
f6b3afbf
DE
5590 default:
5591 gdb_assert_not_reached ("bad type_specific_kind");
5592 }
ae5a43e0
DJ
5593
5594 return new_type;
5595}
5596
4af88198
JB
5597/* Make a copy of the given TYPE, except that the pointer & reference
5598 types are not preserved.
5599
5600 This function assumes that the given type has an associated objfile.
5601 This objfile is used to allocate the new type. */
5602
5603struct type *
5604copy_type (const struct type *type)
5605{
5606 struct type *new_type;
5607
e9bb382b 5608 gdb_assert (TYPE_OBJFILE_OWNED (type));
4af88198 5609
e9bb382b 5610 new_type = alloc_type_copy (type);
314ad88d 5611 new_type->set_instance_flags (type->instance_flags ());
4af88198
JB
5612 TYPE_LENGTH (new_type) = TYPE_LENGTH (type);
5613 memcpy (TYPE_MAIN_TYPE (new_type), TYPE_MAIN_TYPE (type),
5614 sizeof (struct main_type));
98d48915
SM
5615 if (type->main_type->dyn_prop_list != NULL)
5616 new_type->main_type->dyn_prop_list
d9823cbb 5617 = copy_dynamic_prop_list (&TYPE_OBJFILE (type) -> objfile_obstack,
98d48915 5618 type->main_type->dyn_prop_list);
4af88198
JB
5619
5620 return new_type;
5621}
5212577a 5622\f
e9bb382b
UW
5623/* Helper functions to initialize architecture-specific types. */
5624
5625/* Allocate a type structure associated with GDBARCH and set its
5626 CODE, LENGTH, and NAME fields. */
5212577a 5627
e9bb382b
UW
5628struct type *
5629arch_type (struct gdbarch *gdbarch,
77b7c781 5630 enum type_code code, int bit, const char *name)
e9bb382b
UW
5631{
5632 struct type *type;
5633
5634 type = alloc_type_arch (gdbarch);
ae438bc5 5635 set_type_code (type, code);
77b7c781
UW
5636 gdb_assert ((bit % TARGET_CHAR_BIT) == 0);
5637 TYPE_LENGTH (type) = bit / TARGET_CHAR_BIT;
e9bb382b
UW
5638
5639 if (name)
d0e39ea2 5640 type->set_name (gdbarch_obstack_strdup (gdbarch, name));
e9bb382b
UW
5641
5642 return type;
5643}
5644
5645/* Allocate a TYPE_CODE_INT type structure associated with GDBARCH.
5646 BIT is the type size in bits. If UNSIGNED_P is non-zero, set
5647 the type's TYPE_UNSIGNED flag. NAME is the type name. */
5212577a 5648
e9bb382b
UW
5649struct type *
5650arch_integer_type (struct gdbarch *gdbarch,
695bfa52 5651 int bit, int unsigned_p, const char *name)
e9bb382b
UW
5652{
5653 struct type *t;
5654
77b7c781 5655 t = arch_type (gdbarch, TYPE_CODE_INT, bit, name);
e9bb382b 5656 if (unsigned_p)
653223d3 5657 t->set_is_unsigned (true);
e9bb382b
UW
5658
5659 return t;
5660}
5661
5662/* Allocate a TYPE_CODE_CHAR type structure associated with GDBARCH.
5663 BIT is the type size in bits. If UNSIGNED_P is non-zero, set
5664 the type's TYPE_UNSIGNED flag. NAME is the type name. */
5212577a 5665
e9bb382b
UW
5666struct type *
5667arch_character_type (struct gdbarch *gdbarch,
695bfa52 5668 int bit, int unsigned_p, const char *name)
e9bb382b
UW
5669{
5670 struct type *t;
5671
77b7c781 5672 t = arch_type (gdbarch, TYPE_CODE_CHAR, bit, name);
e9bb382b 5673 if (unsigned_p)
653223d3 5674 t->set_is_unsigned (true);
e9bb382b
UW
5675
5676 return t;
5677}
5678
5679/* Allocate a TYPE_CODE_BOOL type structure associated with GDBARCH.
5680 BIT is the type size in bits. If UNSIGNED_P is non-zero, set
5681 the type's TYPE_UNSIGNED flag. NAME is the type name. */
5212577a 5682
e9bb382b
UW
5683struct type *
5684arch_boolean_type (struct gdbarch *gdbarch,
695bfa52 5685 int bit, int unsigned_p, const char *name)
e9bb382b
UW
5686{
5687 struct type *t;
5688
77b7c781 5689 t = arch_type (gdbarch, TYPE_CODE_BOOL, bit, name);
e9bb382b 5690 if (unsigned_p)
653223d3 5691 t->set_is_unsigned (true);
e9bb382b
UW
5692
5693 return t;
5694}
5695
5696/* Allocate a TYPE_CODE_FLT type structure associated with GDBARCH.
5697 BIT is the type size in bits; if BIT equals -1, the size is
5698 determined by the floatformat. NAME is the type name. Set the
5699 TYPE_FLOATFORMAT from FLOATFORMATS. */
5212577a 5700
27067745 5701struct type *
e9bb382b 5702arch_float_type (struct gdbarch *gdbarch,
695bfa52
TT
5703 int bit, const char *name,
5704 const struct floatformat **floatformats)
8da61cc4 5705{
0db7851f 5706 const struct floatformat *fmt = floatformats[gdbarch_byte_order (gdbarch)];
8da61cc4
DJ
5707 struct type *t;
5708
0db7851f 5709 bit = verify_floatformat (bit, fmt);
77b7c781 5710 t = arch_type (gdbarch, TYPE_CODE_FLT, bit, name);
0db7851f 5711 TYPE_FLOATFORMAT (t) = fmt;
b79497cb 5712
8da61cc4
DJ
5713 return t;
5714}
5715
88dfca6c
UW
5716/* Allocate a TYPE_CODE_DECFLOAT type structure associated with GDBARCH.
5717 BIT is the type size in bits. NAME is the type name. */
5718
5719struct type *
5720arch_decfloat_type (struct gdbarch *gdbarch, int bit, const char *name)
5721{
5722 struct type *t;
5723
77b7c781 5724 t = arch_type (gdbarch, TYPE_CODE_DECFLOAT, bit, name);
88dfca6c
UW
5725 return t;
5726}
5727
88dfca6c
UW
5728/* Allocate a TYPE_CODE_PTR type structure associated with GDBARCH.
5729 BIT is the pointer type size in bits. NAME is the type name.
5730 TARGET_TYPE is the pointer target type. Always sets the pointer type's
5731 TYPE_UNSIGNED flag. */
5732
5733struct type *
5734arch_pointer_type (struct gdbarch *gdbarch,
5735 int bit, const char *name, struct type *target_type)
5736{
5737 struct type *t;
5738
77b7c781 5739 t = arch_type (gdbarch, TYPE_CODE_PTR, bit, name);
88dfca6c 5740 TYPE_TARGET_TYPE (t) = target_type;
653223d3 5741 t->set_is_unsigned (true);
88dfca6c
UW
5742 return t;
5743}
5744
e9bb382b 5745/* Allocate a TYPE_CODE_FLAGS type structure associated with GDBARCH.
77b7c781 5746 NAME is the type name. BIT is the size of the flag word in bits. */
5212577a 5747
e9bb382b 5748struct type *
77b7c781 5749arch_flags_type (struct gdbarch *gdbarch, const char *name, int bit)
e9bb382b 5750{
e9bb382b
UW
5751 struct type *type;
5752
77b7c781 5753 type = arch_type (gdbarch, TYPE_CODE_FLAGS, bit, name);
653223d3 5754 type->set_is_unsigned (true);
5e33d5f4 5755 type->set_num_fields (0);
81516450 5756 /* Pre-allocate enough space assuming every field is one bit. */
3cabb6b0
SM
5757 type->set_fields
5758 ((struct field *) TYPE_ZALLOC (type, bit * sizeof (struct field)));
e9bb382b
UW
5759
5760 return type;
5761}
5762
5763/* Add field to TYPE_CODE_FLAGS type TYPE to indicate the bit at
81516450
DE
5764 position BITPOS is called NAME. Pass NAME as "" for fields that
5765 should not be printed. */
5766
5767void
5768append_flags_type_field (struct type *type, int start_bitpos, int nr_bits,
695bfa52 5769 struct type *field_type, const char *name)
81516450
DE
5770{
5771 int type_bitsize = TYPE_LENGTH (type) * TARGET_CHAR_BIT;
1f704f76 5772 int field_nr = type->num_fields ();
81516450 5773
78134374 5774 gdb_assert (type->code () == TYPE_CODE_FLAGS);
1f704f76 5775 gdb_assert (type->num_fields () + 1 <= type_bitsize);
81516450
DE
5776 gdb_assert (start_bitpos >= 0 && start_bitpos < type_bitsize);
5777 gdb_assert (nr_bits >= 1 && nr_bits <= type_bitsize);
5778 gdb_assert (name != NULL);
5779
5780 TYPE_FIELD_NAME (type, field_nr) = xstrdup (name);
5d14b6e5 5781 type->field (field_nr).set_type (field_type);
ceacbf6e 5782 SET_FIELD_BITPOS (type->field (field_nr), start_bitpos);
81516450 5783 TYPE_FIELD_BITSIZE (type, field_nr) = nr_bits;
5e33d5f4 5784 type->set_num_fields (type->num_fields () + 1);
81516450
DE
5785}
5786
5787/* Special version of append_flags_type_field to add a flag field.
5788 Add field to TYPE_CODE_FLAGS type TYPE to indicate the bit at
e9bb382b 5789 position BITPOS is called NAME. */
5212577a 5790
e9bb382b 5791void
695bfa52 5792append_flags_type_flag (struct type *type, int bitpos, const char *name)
e9bb382b 5793{
81516450 5794 struct gdbarch *gdbarch = get_type_arch (type);
e9bb382b 5795
81516450
DE
5796 append_flags_type_field (type, bitpos, 1,
5797 builtin_type (gdbarch)->builtin_bool,
5798 name);
e9bb382b
UW
5799}
5800
5801/* Allocate a TYPE_CODE_STRUCT or TYPE_CODE_UNION type structure (as
5802 specified by CODE) associated with GDBARCH. NAME is the type name. */
5212577a 5803
e9bb382b 5804struct type *
695bfa52
TT
5805arch_composite_type (struct gdbarch *gdbarch, const char *name,
5806 enum type_code code)
e9bb382b
UW
5807{
5808 struct type *t;
d8734c88 5809
e9bb382b
UW
5810 gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION);
5811 t = arch_type (gdbarch, code, 0, NULL);
d0e39ea2 5812 t->set_name (name);
e9bb382b
UW
5813 INIT_CPLUS_SPECIFIC (t);
5814 return t;
5815}
5816
5817/* Add new field with name NAME and type FIELD to composite type T.
f5dff777
DJ
5818 Do not set the field's position or adjust the type's length;
5819 the caller should do so. Return the new field. */
5212577a 5820
f5dff777 5821struct field *
695bfa52 5822append_composite_type_field_raw (struct type *t, const char *name,
f5dff777 5823 struct type *field)
e9bb382b
UW
5824{
5825 struct field *f;
d8734c88 5826
1f704f76 5827 t->set_num_fields (t->num_fields () + 1);
80fc5e77 5828 t->set_fields (XRESIZEVEC (struct field, t->fields (),
3cabb6b0 5829 t->num_fields ()));
80fc5e77 5830 f = &t->field (t->num_fields () - 1);
e9bb382b 5831 memset (f, 0, sizeof f[0]);
5d14b6e5 5832 f[0].set_type (field);
e9bb382b 5833 FIELD_NAME (f[0]) = name;
f5dff777
DJ
5834 return f;
5835}
5836
5837/* Add new field with name NAME and type FIELD to composite type T.
5838 ALIGNMENT (if non-zero) specifies the minimum field alignment. */
5212577a 5839
f5dff777 5840void
695bfa52 5841append_composite_type_field_aligned (struct type *t, const char *name,
f5dff777
DJ
5842 struct type *field, int alignment)
5843{
5844 struct field *f = append_composite_type_field_raw (t, name, field);
d8734c88 5845
78134374 5846 if (t->code () == TYPE_CODE_UNION)
e9bb382b
UW
5847 {
5848 if (TYPE_LENGTH (t) < TYPE_LENGTH (field))
5849 TYPE_LENGTH (t) = TYPE_LENGTH (field);
5850 }
78134374 5851 else if (t->code () == TYPE_CODE_STRUCT)
e9bb382b
UW
5852 {
5853 TYPE_LENGTH (t) = TYPE_LENGTH (t) + TYPE_LENGTH (field);
1f704f76 5854 if (t->num_fields () > 1)
e9bb382b 5855 {
f41f5e61
PA
5856 SET_FIELD_BITPOS (f[0],
5857 (FIELD_BITPOS (f[-1])
b6cdac4b 5858 + (TYPE_LENGTH (f[-1].type ())
f41f5e61 5859 * TARGET_CHAR_BIT)));
e9bb382b
UW
5860
5861 if (alignment)
5862 {
86c3c1fc
AB
5863 int left;
5864
5865 alignment *= TARGET_CHAR_BIT;
5866 left = FIELD_BITPOS (f[0]) % alignment;
d8734c88 5867
e9bb382b
UW
5868 if (left)
5869 {
f41f5e61 5870 SET_FIELD_BITPOS (f[0], FIELD_BITPOS (f[0]) + (alignment - left));
86c3c1fc 5871 TYPE_LENGTH (t) += (alignment - left) / TARGET_CHAR_BIT;
e9bb382b
UW
5872 }
5873 }
5874 }
5875 }
5876}
5877
5878/* Add new field with name NAME and type FIELD to composite type T. */
5212577a 5879
e9bb382b 5880void
695bfa52 5881append_composite_type_field (struct type *t, const char *name,
e9bb382b
UW
5882 struct type *field)
5883{
5884 append_composite_type_field_aligned (t, name, field, 0);
5885}
5886
09584414
JB
5887\f
5888
5889/* We manage the lifetimes of fixed_point_type_info objects by
5890 attaching them to the objfile. Currently, these objects are
5891 modified during construction, and GMP does not provide a way to
5892 hash the contents of an mpq_t; so it's a bit of a pain to hash-cons
5893 them. If we did do this, they could be moved to the per-BFD and
5894 shared across objfiles. */
5895typedef std::vector<std::unique_ptr<fixed_point_type_info>>
5896 fixed_point_type_storage;
5897
5898/* Key used for managing the storage of fixed-point type info. */
5899static const struct objfile_key<fixed_point_type_storage>
5900 fixed_point_objfile_key;
5901
5902/* See gdbtypes.h. */
5903
2a12c336 5904void
09584414
JB
5905allocate_fixed_point_type_info (struct type *type)
5906{
5907 std::unique_ptr<fixed_point_type_info> up (new fixed_point_type_info);
2a12c336 5908 fixed_point_type_info *info;
09584414
JB
5909
5910 if (TYPE_OBJFILE_OWNED (type))
5911 {
5912 fixed_point_type_storage *storage
5913 = fixed_point_objfile_key.get (TYPE_OBJFILE (type));
5914 if (storage == nullptr)
5915 storage = fixed_point_objfile_key.emplace (TYPE_OBJFILE (type));
2a12c336 5916 info = up.get ();
09584414
JB
5917 storage->push_back (std::move (up));
5918 }
5919 else
5920 {
5921 /* We just leak the memory, because that's what we do generally
5922 for non-objfile-attached types. */
2a12c336 5923 info = up.release ();
09584414
JB
5924 }
5925
2a12c336 5926 type->set_fixed_point_info (info);
09584414
JB
5927}
5928
5929/* See gdbtypes.h. */
5930
5931bool
5932is_fixed_point_type (struct type *type)
5933{
5934 while (check_typedef (type)->code () == TYPE_CODE_RANGE)
5935 type = TYPE_TARGET_TYPE (check_typedef (type));
5936 type = check_typedef (type);
5937
5938 return type->code () == TYPE_CODE_FIXED_POINT;
5939}
5940
5941/* See gdbtypes.h. */
5942
5943struct type *
d19937a7 5944type::fixed_point_type_base_type ()
09584414 5945{
d19937a7
JB
5946 struct type *type = this;
5947
09584414
JB
5948 while (check_typedef (type)->code () == TYPE_CODE_RANGE)
5949 type = TYPE_TARGET_TYPE (check_typedef (type));
5950 type = check_typedef (type);
5951
5952 gdb_assert (type->code () == TYPE_CODE_FIXED_POINT);
5953 return type;
5954}
5955
5956/* See gdbtypes.h. */
5957
5958const gdb_mpq &
e6fcee3a 5959type::fixed_point_scaling_factor ()
09584414 5960{
e6fcee3a 5961 struct type *type = this->fixed_point_type_base_type ();
09584414 5962
2a12c336 5963 return type->fixed_point_info ().scaling_factor;
09584414
JB
5964}
5965
5966\f
5967
000177f0
AC
5968static struct gdbarch_data *gdbtypes_data;
5969
5970const struct builtin_type *
5971builtin_type (struct gdbarch *gdbarch)
5972{
9a3c8263 5973 return (const struct builtin_type *) gdbarch_data (gdbarch, gdbtypes_data);
000177f0
AC
5974}
5975
5976static void *
5977gdbtypes_post_init (struct gdbarch *gdbarch)
5978{
5979 struct builtin_type *builtin_type
5980 = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_type);
5981
46bf5051 5982 /* Basic types. */
e9bb382b 5983 builtin_type->builtin_void
77b7c781 5984 = arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT, "void");
e9bb382b
UW
5985 builtin_type->builtin_char
5986 = arch_integer_type (gdbarch, TARGET_CHAR_BIT,
5987 !gdbarch_char_signed (gdbarch), "char");
15152a54 5988 builtin_type->builtin_char->set_has_no_signedness (true);
e9bb382b
UW
5989 builtin_type->builtin_signed_char
5990 = arch_integer_type (gdbarch, TARGET_CHAR_BIT,
5991 0, "signed char");
5992 builtin_type->builtin_unsigned_char
5993 = arch_integer_type (gdbarch, TARGET_CHAR_BIT,
5994 1, "unsigned char");
5995 builtin_type->builtin_short
5996 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
5997 0, "short");
5998 builtin_type->builtin_unsigned_short
5999 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
6000 1, "unsigned short");
6001 builtin_type->builtin_int
6002 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
6003 0, "int");
6004 builtin_type->builtin_unsigned_int
6005 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
6006 1, "unsigned int");
6007 builtin_type->builtin_long
6008 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
6009 0, "long");
6010 builtin_type->builtin_unsigned_long
6011 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
6012 1, "unsigned long");
6013 builtin_type->builtin_long_long
6014 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
6015 0, "long long");
6016 builtin_type->builtin_unsigned_long_long
6017 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
6018 1, "unsigned long long");
a6d0f249
AH
6019 builtin_type->builtin_half
6020 = arch_float_type (gdbarch, gdbarch_half_bit (gdbarch),
6021 "half", gdbarch_half_format (gdbarch));
70bd8e24 6022 builtin_type->builtin_float
e9bb382b 6023 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
27067745 6024 "float", gdbarch_float_format (gdbarch));
2a67f09d
FW
6025 builtin_type->builtin_bfloat16
6026 = arch_float_type (gdbarch, gdbarch_bfloat16_bit (gdbarch),
6027 "bfloat16", gdbarch_bfloat16_format (gdbarch));
70bd8e24 6028 builtin_type->builtin_double
e9bb382b 6029 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
27067745 6030 "double", gdbarch_double_format (gdbarch));
70bd8e24 6031 builtin_type->builtin_long_double
e9bb382b 6032 = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
27067745 6033 "long double", gdbarch_long_double_format (gdbarch));
70bd8e24 6034 builtin_type->builtin_complex
5b930b45 6035 = init_complex_type ("complex", builtin_type->builtin_float);
70bd8e24 6036 builtin_type->builtin_double_complex
5b930b45 6037 = init_complex_type ("double complex", builtin_type->builtin_double);
e9bb382b 6038 builtin_type->builtin_string
77b7c781 6039 = arch_type (gdbarch, TYPE_CODE_STRING, TARGET_CHAR_BIT, "string");
e9bb382b 6040 builtin_type->builtin_bool
77b7c781 6041 = arch_type (gdbarch, TYPE_CODE_BOOL, TARGET_CHAR_BIT, "bool");
000177f0 6042
7678ef8f
TJB
6043 /* The following three are about decimal floating point types, which
6044 are 32-bits, 64-bits and 128-bits respectively. */
6045 builtin_type->builtin_decfloat
88dfca6c 6046 = arch_decfloat_type (gdbarch, 32, "_Decimal32");
7678ef8f 6047 builtin_type->builtin_decdouble
88dfca6c 6048 = arch_decfloat_type (gdbarch, 64, "_Decimal64");
7678ef8f 6049 builtin_type->builtin_declong
88dfca6c 6050 = arch_decfloat_type (gdbarch, 128, "_Decimal128");
7678ef8f 6051
69feb676 6052 /* "True" character types. */
e9bb382b
UW
6053 builtin_type->builtin_true_char
6054 = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "true character");
6055 builtin_type->builtin_true_unsigned_char
6056 = arch_character_type (gdbarch, TARGET_CHAR_BIT, 1, "true character");
69feb676 6057
df4df182 6058 /* Fixed-size integer types. */
e9bb382b
UW
6059 builtin_type->builtin_int0
6060 = arch_integer_type (gdbarch, 0, 0, "int0_t");
6061 builtin_type->builtin_int8
6062 = arch_integer_type (gdbarch, 8, 0, "int8_t");
6063 builtin_type->builtin_uint8
6064 = arch_integer_type (gdbarch, 8, 1, "uint8_t");
6065 builtin_type->builtin_int16
6066 = arch_integer_type (gdbarch, 16, 0, "int16_t");
6067 builtin_type->builtin_uint16
6068 = arch_integer_type (gdbarch, 16, 1, "uint16_t");
d1908f2d
JD
6069 builtin_type->builtin_int24
6070 = arch_integer_type (gdbarch, 24, 0, "int24_t");
6071 builtin_type->builtin_uint24
6072 = arch_integer_type (gdbarch, 24, 1, "uint24_t");
e9bb382b
UW
6073 builtin_type->builtin_int32
6074 = arch_integer_type (gdbarch, 32, 0, "int32_t");
6075 builtin_type->builtin_uint32
6076 = arch_integer_type (gdbarch, 32, 1, "uint32_t");
6077 builtin_type->builtin_int64
6078 = arch_integer_type (gdbarch, 64, 0, "int64_t");
6079 builtin_type->builtin_uint64
6080 = arch_integer_type (gdbarch, 64, 1, "uint64_t");
6081 builtin_type->builtin_int128
6082 = arch_integer_type (gdbarch, 128, 0, "int128_t");
6083 builtin_type->builtin_uint128
6084 = arch_integer_type (gdbarch, 128, 1, "uint128_t");
314ad88d
PA
6085
6086 builtin_type->builtin_int8->set_instance_flags
6087 (builtin_type->builtin_int8->instance_flags ()
6088 | TYPE_INSTANCE_FLAG_NOTTEXT);
6089
6090 builtin_type->builtin_uint8->set_instance_flags
6091 (builtin_type->builtin_uint8->instance_flags ()
6092 | TYPE_INSTANCE_FLAG_NOTTEXT);
df4df182 6093
9a22f0d0
PM
6094 /* Wide character types. */
6095 builtin_type->builtin_char16
53e710ac 6096 = arch_integer_type (gdbarch, 16, 1, "char16_t");
9a22f0d0 6097 builtin_type->builtin_char32
53e710ac 6098 = arch_integer_type (gdbarch, 32, 1, "char32_t");
53375380
PA
6099 builtin_type->builtin_wchar
6100 = arch_integer_type (gdbarch, gdbarch_wchar_bit (gdbarch),
6101 !gdbarch_wchar_signed (gdbarch), "wchar_t");
9a22f0d0 6102
46bf5051 6103 /* Default data/code pointer types. */
e9bb382b
UW
6104 builtin_type->builtin_data_ptr
6105 = lookup_pointer_type (builtin_type->builtin_void);
6106 builtin_type->builtin_func_ptr
6107 = lookup_pointer_type (lookup_function_type (builtin_type->builtin_void));
0875794a
JK
6108 builtin_type->builtin_func_func
6109 = lookup_function_type (builtin_type->builtin_func_ptr);
46bf5051 6110
78267919 6111 /* This type represents a GDB internal function. */
e9bb382b
UW
6112 builtin_type->internal_fn
6113 = arch_type (gdbarch, TYPE_CODE_INTERNAL_FUNCTION, 0,
6114 "<internal function>");
78267919 6115
e81e7f5e
SC
6116 /* This type represents an xmethod. */
6117 builtin_type->xmethod
6118 = arch_type (gdbarch, TYPE_CODE_XMETHOD, 0, "<xmethod>");
6119
46bf5051
UW
6120 return builtin_type;
6121}
6122
46bf5051
UW
6123/* This set of objfile-based types is intended to be used by symbol
6124 readers as basic types. */
6125
7a102139
TT
6126static const struct objfile_key<struct objfile_type,
6127 gdb::noop_deleter<struct objfile_type>>
6128 objfile_type_data;
46bf5051
UW
6129
6130const struct objfile_type *
6131objfile_type (struct objfile *objfile)
6132{
6133 struct gdbarch *gdbarch;
7a102139 6134 struct objfile_type *objfile_type = objfile_type_data.get (objfile);
46bf5051
UW
6135
6136 if (objfile_type)
6137 return objfile_type;
6138
6139 objfile_type = OBSTACK_CALLOC (&objfile->objfile_obstack,
6140 1, struct objfile_type);
6141
6142 /* Use the objfile architecture to determine basic type properties. */
08feed99 6143 gdbarch = objfile->arch ();
46bf5051
UW
6144
6145 /* Basic types. */
6146 objfile_type->builtin_void
77b7c781 6147 = init_type (objfile, TYPE_CODE_VOID, TARGET_CHAR_BIT, "void");
46bf5051 6148 objfile_type->builtin_char
19f392bc
UW
6149 = init_integer_type (objfile, TARGET_CHAR_BIT,
6150 !gdbarch_char_signed (gdbarch), "char");
15152a54 6151 objfile_type->builtin_char->set_has_no_signedness (true);
46bf5051 6152 objfile_type->builtin_signed_char
19f392bc
UW
6153 = init_integer_type (objfile, TARGET_CHAR_BIT,
6154 0, "signed char");
46bf5051 6155 objfile_type->builtin_unsigned_char
19f392bc
UW
6156 = init_integer_type (objfile, TARGET_CHAR_BIT,
6157 1, "unsigned char");
46bf5051 6158 objfile_type->builtin_short
19f392bc
UW
6159 = init_integer_type (objfile, gdbarch_short_bit (gdbarch),
6160 0, "short");
46bf5051 6161 objfile_type->builtin_unsigned_short
19f392bc
UW
6162 = init_integer_type (objfile, gdbarch_short_bit (gdbarch),
6163 1, "unsigned short");
46bf5051 6164 objfile_type->builtin_int
19f392bc
UW
6165 = init_integer_type (objfile, gdbarch_int_bit (gdbarch),
6166 0, "int");
46bf5051 6167 objfile_type->builtin_unsigned_int
19f392bc
UW
6168 = init_integer_type (objfile, gdbarch_int_bit (gdbarch),
6169 1, "unsigned int");
46bf5051 6170 objfile_type->builtin_long
19f392bc
UW
6171 = init_integer_type (objfile, gdbarch_long_bit (gdbarch),
6172 0, "long");
46bf5051 6173 objfile_type->builtin_unsigned_long
19f392bc
UW
6174 = init_integer_type (objfile, gdbarch_long_bit (gdbarch),
6175 1, "unsigned long");
46bf5051 6176 objfile_type->builtin_long_long
19f392bc
UW
6177 = init_integer_type (objfile, gdbarch_long_long_bit (gdbarch),
6178 0, "long long");
46bf5051 6179 objfile_type->builtin_unsigned_long_long
19f392bc
UW
6180 = init_integer_type (objfile, gdbarch_long_long_bit (gdbarch),
6181 1, "unsigned long long");
46bf5051 6182 objfile_type->builtin_float
19f392bc
UW
6183 = init_float_type (objfile, gdbarch_float_bit (gdbarch),
6184 "float", gdbarch_float_format (gdbarch));
46bf5051 6185 objfile_type->builtin_double
19f392bc
UW
6186 = init_float_type (objfile, gdbarch_double_bit (gdbarch),
6187 "double", gdbarch_double_format (gdbarch));
46bf5051 6188 objfile_type->builtin_long_double
19f392bc
UW
6189 = init_float_type (objfile, gdbarch_long_double_bit (gdbarch),
6190 "long double", gdbarch_long_double_format (gdbarch));
46bf5051
UW
6191
6192 /* This type represents a type that was unrecognized in symbol read-in. */
6193 objfile_type->builtin_error
19f392bc 6194 = init_type (objfile, TYPE_CODE_ERROR, 0, "<unknown type>");
46bf5051
UW
6195
6196 /* The following set of types is used for symbols with no
6197 debug information. */
6198 objfile_type->nodebug_text_symbol
77b7c781 6199 = init_type (objfile, TYPE_CODE_FUNC, TARGET_CHAR_BIT,
19f392bc 6200 "<text variable, no debug info>");
03cc7249 6201
0875794a 6202 objfile_type->nodebug_text_gnu_ifunc_symbol
77b7c781 6203 = init_type (objfile, TYPE_CODE_FUNC, TARGET_CHAR_BIT,
19f392bc 6204 "<text gnu-indirect-function variable, no debug info>");
03cc7249
SM
6205 objfile_type->nodebug_text_gnu_ifunc_symbol->set_is_gnu_ifunc (true);
6206
0875794a 6207 objfile_type->nodebug_got_plt_symbol
19f392bc
UW
6208 = init_pointer_type (objfile, gdbarch_addr_bit (gdbarch),
6209 "<text from jump slot in .got.plt, no debug info>",
6210 objfile_type->nodebug_text_symbol);
46bf5051 6211 objfile_type->nodebug_data_symbol
46a4882b 6212 = init_nodebug_var_type (objfile, "<data variable, no debug info>");
46bf5051 6213 objfile_type->nodebug_unknown_symbol
46a4882b 6214 = init_nodebug_var_type (objfile, "<variable (not text or data), no debug info>");
46bf5051 6215 objfile_type->nodebug_tls_symbol
46a4882b 6216 = init_nodebug_var_type (objfile, "<thread local variable, no debug info>");
000177f0
AC
6217
6218 /* NOTE: on some targets, addresses and pointers are not necessarily
0a7cfe2c 6219 the same.
000177f0
AC
6220
6221 The upshot is:
6222 - gdb's `struct type' always describes the target's
6223 representation.
6224 - gdb's `struct value' objects should always hold values in
6225 target form.
6226 - gdb's CORE_ADDR values are addresses in the unified virtual
6227 address space that the assembler and linker work with. Thus,
6228 since target_read_memory takes a CORE_ADDR as an argument, it
6229 can access any memory on the target, even if the processor has
6230 separate code and data address spaces.
6231
46bf5051
UW
6232 In this context, objfile_type->builtin_core_addr is a bit odd:
6233 it's a target type for a value the target will never see. It's
6234 only used to hold the values of (typeless) linker symbols, which
6235 are indeed in the unified virtual address space. */
000177f0 6236
46bf5051 6237 objfile_type->builtin_core_addr
19f392bc
UW
6238 = init_integer_type (objfile, gdbarch_addr_bit (gdbarch), 1,
6239 "__CORE_ADDR");
64c50499 6240
7a102139 6241 objfile_type_data.set (objfile, objfile_type);
46bf5051 6242 return objfile_type;
000177f0
AC
6243}
6244
6c265988 6245void _initialize_gdbtypes ();
c906108c 6246void
6c265988 6247_initialize_gdbtypes ()
c906108c 6248{
5674de60
UW
6249 gdbtypes_data = gdbarch_data_register_post_init (gdbtypes_post_init);
6250
ccce17b0
YQ
6251 add_setshow_zuinteger_cmd ("overload", no_class, &overload_debug,
6252 _("Set debugging of C++ overloading."),
6253 _("Show debugging of C++ overloading."),
6254 _("When enabled, ranking of the "
6255 "functions is displayed."),
6256 NULL,
6257 show_overload_debug,
6258 &setdebuglist, &showdebuglist);
5674de60 6259
7ba81444 6260 /* Add user knob for controlling resolution of opaque types. */
5674de60 6261 add_setshow_boolean_cmd ("opaque-type-resolution", class_support,
3e43a32a
MS
6262 &opaque_type_resolution,
6263 _("Set resolution of opaque struct/class/union"
6264 " types (if set before loading symbols)."),
6265 _("Show resolution of opaque struct/class/union"
6266 " types (if set before loading symbols)."),
6267 NULL, NULL,
5674de60
UW
6268 show_opaque_type_resolution,
6269 &setlist, &showlist);
a451cb65
KS
6270
6271 /* Add an option to permit non-strict type checking. */
6272 add_setshow_boolean_cmd ("type", class_support,
6273 &strict_type_checking,
6274 _("Set strict type checking."),
6275 _("Show strict type checking."),
6276 NULL, NULL,
6277 show_strict_type_checking,
6278 &setchecklist, &showchecklist);
c906108c 6279}
This page took 2.199793 seconds and 4 git commands to generate.