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