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