* infrun.c (init_wait_for_inferior): Reset target_last_wait_ptid.
[deliverable/binutils-gdb.git] / gdb / c-valprint.c
CommitLineData
c906108c 1/* Support for printing C values for GDB, the GNU debugger.
1bac305b 2
6aba47ca
DJ
3 Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4 1998, 1999, 2000, 2001, 2003, 2005, 2006, 2007
4f2aea11 5 Free Software Foundation, Inc.
c906108c 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"
309367d4 23#include "gdb_string.h"
c906108c
SS
24#include "symtab.h"
25#include "gdbtypes.h"
26#include "expression.h"
27#include "value.h"
c906108c
SS
28#include "valprint.h"
29#include "language.h"
30#include "c-lang.h"
015a42b4 31#include "cp-abi.h"
e2d0e7eb 32#include "target.h"
c906108c 33\f
c5aa993b 34
6e778545
PS
35/* Print function pointer with inferior address ADDRESS onto stdio
36 stream STREAM. */
37
38static void
39print_function_pointer_address (CORE_ADDR address, struct ui_file *stream)
40{
e2d0e7eb
AC
41 CORE_ADDR func_addr = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
42 address,
43 &current_target);
6e778545
PS
44
45 /* If the function pointer is represented by a description, print the
46 address of the description. */
47 if (addressprint && func_addr != address)
48 {
49 fputs_filtered ("@", stream);
66bf4b3a 50 deprecated_print_address_numeric (address, 1, stream);
6e778545
PS
51 fputs_filtered (": ", stream);
52 }
53 print_address_demangle (func_addr, stream, demangle);
54}
55
56
ea37ba09
DJ
57/* Apply a heuristic to decide whether an array of TYPE or a pointer
58 to TYPE should be printed as a textual string. Return non-zero if
59 it should, or zero if it should be treated as an array of integers
60 or pointer to integers. FORMAT is the current format letter,
61 or 0 if none.
62
63 We guess that "char" is a character. Explicitly signed and
64 unsigned character types are also characters. Integer data from
65 vector types is not. The user can override this by using the /s
66 format letter. */
67
68static int
69textual_element_type (struct type *type, char format)
70{
71 struct type *true_type = check_typedef (type);
72
73 if (format != 0 && format != 's')
74 return 0;
75
76 /* TYPE_CODE_CHAR is always textual. */
77 if (TYPE_CODE (true_type) == TYPE_CODE_CHAR)
78 return 1;
79
80 if (format == 's')
81 {
82 /* Print this as a string if we can manage it. For now, no
83 wide character support. */
84 if (TYPE_CODE (true_type) == TYPE_CODE_INT
85 && TYPE_LENGTH (true_type) == 1)
86 return 1;
87 }
88 else
89 {
90 /* If a one-byte TYPE_CODE_INT is missing the not-a-character
91 flag, then we treat it as text; otherwise, we assume it's
92 being used as data. */
93 if (TYPE_CODE (true_type) == TYPE_CODE_INT
94 && TYPE_LENGTH (true_type) == 1
95 && !TYPE_NOTTEXT (true_type))
96 return 1;
97 }
98
99 return 0;
100}
101
102
c906108c
SS
103/* Print data of type TYPE located at VALADDR (within GDB), which came from
104 the inferior at address ADDRESS, onto stdio stream STREAM according to
105 FORMAT (a letter or 0 for natural format). The data at VALADDR is in
106 target byte order.
107
108 If the data are a string pointer, returns the number of string characters
109 printed.
110
111 If DEREF_REF is nonzero, then dereference references, otherwise just print
112 them like pointers.
113
114 The PRETTY parameter controls prettyprinting. */
115
116int
fc1a4b47 117c_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
fba45db2
KB
118 CORE_ADDR address, struct ui_file *stream, int format,
119 int deref_ref, int recurse, enum val_prettyprint pretty)
c906108c 120{
52f0bd74 121 unsigned int i = 0; /* Number of characters printed */
c906108c
SS
122 unsigned len;
123 struct type *elttype;
124 unsigned eltlen;
125 LONGEST val;
126 CORE_ADDR addr;
127
128 CHECK_TYPEDEF (type);
129 switch (TYPE_CODE (type))
130 {
131 case TYPE_CODE_ARRAY:
132 elttype = check_typedef (TYPE_TARGET_TYPE (type));
133 if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0)
134 {
135 eltlen = TYPE_LENGTH (elttype);
136 len = TYPE_LENGTH (type) / eltlen;
137 if (prettyprint_arrays)
138 {
139 print_spaces_filtered (2 + 2 * recurse, stream);
140 }
ea37ba09
DJ
141
142 /* Print arrays of textual chars with a string syntax. */
143 if (textual_element_type (elttype, format))
c906108c
SS
144 {
145 /* If requested, look for the first null char and only print
c5aa993b 146 elements up to it. */
c906108c
SS
147 if (stop_print_at_null)
148 {
745b8ca0 149 unsigned int temp_len;
c5aa993b 150
c906108c
SS
151 /* Look for a NULL char. */
152 for (temp_len = 0;
153 (valaddr + embedded_offset)[temp_len]
154 && temp_len < len && temp_len < print_max;
155 temp_len++);
156 len = temp_len;
157 }
c5aa993b 158
c906108c
SS
159 LA_PRINT_STRING (stream, valaddr + embedded_offset, len, eltlen, 0);
160 i = len;
161 }
162 else
163 {
164 fprintf_filtered (stream, "{");
165 /* If this is a virtual function table, print the 0th
c5aa993b 166 entry specially, and the rest of the members normally. */
c906108c
SS
167 if (cp_is_vtbl_ptr_type (elttype))
168 {
169 i = 1;
3d263c1d 170 fprintf_filtered (stream, _("%d vtable entries"), len - 1);
c906108c
SS
171 }
172 else
173 {
174 i = 0;
175 }
176 val_print_array_elements (type, valaddr + embedded_offset, address, stream,
c5aa993b 177 format, deref_ref, recurse, pretty, i);
c906108c
SS
178 fprintf_filtered (stream, "}");
179 }
180 break;
181 }
182 /* Array of unspecified length: treat like pointer to first elt. */
183 addr = address;
184 goto print_unpacked_pointer;
185
0d5de010
DJ
186 case TYPE_CODE_MEMBERPTR:
187 if (format)
188 {
189 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
190 break;
191 }
192 cp_print_class_member (valaddr + embedded_offset,
193 TYPE_DOMAIN_TYPE (type),
194 stream, "&");
195 break;
196
197 case TYPE_CODE_METHODPTR:
198 cplus_print_method_ptr (valaddr + embedded_offset, type, stream);
199 break;
200
c906108c
SS
201 case TYPE_CODE_PTR:
202 if (format && format != 's')
203 {
204 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
205 break;
206 }
c5aa993b 207 if (vtblprint && cp_is_vtbl_ptr_type (type))
c906108c 208 {
c5aa993b 209 /* Print the unmangled name if desired. */
c906108c
SS
210 /* Print vtable entry - we only get here if we ARE using
211 -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */
4478b372
JB
212 CORE_ADDR addr
213 = extract_typed_address (valaddr + embedded_offset, type);
6e778545 214 print_function_pointer_address (addr, stream);
c906108c
SS
215 break;
216 }
217 elttype = check_typedef (TYPE_TARGET_TYPE (type));
c906108c
SS
218 {
219 addr = unpack_pointer (type, valaddr + embedded_offset);
220 print_unpacked_pointer:
c906108c
SS
221
222 if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
223 {
224 /* Try to print what function it points to. */
6e778545 225 print_function_pointer_address (addr, stream);
c906108c
SS
226 /* Return value is irrelevant except for string pointers. */
227 return (0);
228 }
229
ea37ba09 230 if (addressprint)
c906108c 231 {
66bf4b3a 232 deprecated_print_address_numeric (addr, 1, stream);
c906108c
SS
233 }
234
ea37ba09 235 /* For a pointer to a textual type, also print the string
c906108c
SS
236 pointed to, unless pointer is null. */
237 /* FIXME: need to handle wchar_t here... */
238
ea37ba09 239 if (textual_element_type (elttype, format) && addr != 0)
c906108c
SS
240 {
241 i = val_print_string (addr, -1, TYPE_LENGTH (elttype), stream);
242 }
c5aa993b
JM
243 else if (cp_is_vtbl_member (type))
244 {
c906108c
SS
245 /* print vtbl's nicely */
246 CORE_ADDR vt_address = unpack_pointer (type, valaddr + embedded_offset);
247
248 struct minimal_symbol *msymbol =
c5aa993b 249 lookup_minimal_symbol_by_pc (vt_address);
c906108c
SS
250 if ((msymbol != NULL) &&
251 (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
252 {
253 fputs_filtered (" <", stream);
de5ad195 254 fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream);
c906108c
SS
255 fputs_filtered (">", stream);
256 }
257 if (vt_address && vtblprint)
c5aa993b 258 {
6943961c 259 struct value *vt_val;
c5aa993b
JM
260 struct symbol *wsym = (struct symbol *) NULL;
261 struct type *wtype;
c5aa993b 262 struct block *block = (struct block *) NULL;
c906108c
SS
263 int is_this_fld;
264
265 if (msymbol != NULL)
22abf04a 266 wsym = lookup_symbol (DEPRECATED_SYMBOL_NAME (msymbol), block,
cdef89d0 267 VAR_DOMAIN, &is_this_fld, NULL);
c5aa993b 268
c906108c
SS
269 if (wsym)
270 {
c5aa993b 271 wtype = SYMBOL_TYPE (wsym);
c906108c
SS
272 }
273 else
274 {
c5aa993b 275 wtype = TYPE_TARGET_TYPE (type);
c906108c 276 }
00a4c844 277 vt_val = value_at (wtype, vt_address);
806048c6
DJ
278 common_val_print (vt_val, stream, format,
279 deref_ref, recurse + 1, pretty);
c906108c
SS
280 if (pretty)
281 {
282 fprintf_filtered (stream, "\n");
283 print_spaces_filtered (2 + 2 * recurse, stream);
284 }
c5aa993b
JM
285 }
286 }
c906108c
SS
287
288 /* Return number of characters printed, including the terminating
289 '\0' if we reached the end. val_print_string takes care including
290 the terminating '\0' if necessary. */
291 return i;
292 }
293 break;
294
c906108c
SS
295 case TYPE_CODE_REF:
296 elttype = check_typedef (TYPE_TARGET_TYPE (type));
c906108c 297 if (addressprint)
c5aa993b 298 {
4478b372
JB
299 CORE_ADDR addr
300 = extract_typed_address (valaddr + embedded_offset, type);
c906108c 301 fprintf_filtered (stream, "@");
66bf4b3a 302 deprecated_print_address_numeric (addr, 1, stream);
c906108c
SS
303 if (deref_ref)
304 fputs_filtered (": ", stream);
c5aa993b 305 }
c906108c
SS
306 /* De-reference the reference. */
307 if (deref_ref)
308 {
309 if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
310 {
6943961c 311 struct value *deref_val =
c5aa993b
JM
312 value_at
313 (TYPE_TARGET_TYPE (type),
314 unpack_pointer (lookup_pointer_type (builtin_type_void),
00a4c844 315 valaddr + embedded_offset));
806048c6
DJ
316 common_val_print (deref_val, stream, format, deref_ref,
317 recurse, pretty);
c906108c
SS
318 }
319 else
320 fputs_filtered ("???", stream);
321 }
322 break;
323
324 case TYPE_CODE_UNION:
325 if (recurse && !unionprint)
326 {
327 fprintf_filtered (stream, "{...}");
328 break;
329 }
330 /* Fall through. */
331 case TYPE_CODE_STRUCT:
015a42b4 332 /*FIXME: Abstract this away */
c5aa993b 333 if (vtblprint && cp_is_vtbl_ptr_type (type))
c906108c 334 {
c5aa993b 335 /* Print the unmangled name if desired. */
c906108c
SS
336 /* Print vtable entry - we only get here if NOT using
337 -fvtable_thunks. (Otherwise, look under TYPE_CODE_PTR.) */
4478b372
JB
338 int offset = (embedded_offset +
339 TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8);
340 struct type *field_type = TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET);
341 CORE_ADDR addr
342 = extract_typed_address (valaddr + offset, field_type);
343
6e778545 344 print_function_pointer_address (addr, stream);
c906108c
SS
345 }
346 else
347 cp_print_value_fields (type, type, valaddr, embedded_offset, address, stream, format,
348 recurse, pretty, NULL, 0);
349 break;
350
351 case TYPE_CODE_ENUM:
352 if (format)
353 {
354 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
355 break;
356 }
357 len = TYPE_NFIELDS (type);
358 val = unpack_long (type, valaddr + embedded_offset);
359 for (i = 0; i < len; i++)
360 {
361 QUIT;
362 if (val == TYPE_FIELD_BITPOS (type, i))
363 {
364 break;
365 }
366 }
367 if (i < len)
368 {
369 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
370 }
371 else
372 {
373 print_longest (stream, 'd', 0, val);
374 }
375 break;
376
4f2aea11
MK
377 case TYPE_CODE_FLAGS:
378 if (format)
379 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
380 else
381 val_print_type_code_flags (type, valaddr + embedded_offset, stream);
382 break;
383
c906108c 384 case TYPE_CODE_FUNC:
0d5de010 385 case TYPE_CODE_METHOD:
c906108c
SS
386 if (format)
387 {
388 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
389 break;
390 }
391 /* FIXME, we should consider, at least for ANSI C language, eliminating
c5aa993b 392 the distinction made between FUNCs and POINTERs to FUNCs. */
c906108c
SS
393 fprintf_filtered (stream, "{");
394 type_print (type, "", stream, -1);
395 fprintf_filtered (stream, "} ");
396 /* Try to print what function it points to, and its address. */
397 print_address_demangle (address, stream, demangle);
398 break;
399
400 case TYPE_CODE_BOOL:
401 format = format ? format : output_format;
402 if (format)
403 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
404 else
405 {
406 val = unpack_long (type, valaddr + embedded_offset);
407 if (val == 0)
408 fputs_filtered ("false", stream);
409 else if (val == 1)
410 fputs_filtered ("true", stream);
411 else
412 print_longest (stream, 'd', 0, val);
413 }
414 break;
415
416 case TYPE_CODE_RANGE:
417 /* FIXME: create_range_type does not set the unsigned bit in a
c5aa993b
JM
418 range type (I think it probably should copy it from the target
419 type), so we won't print values which are too large to
420 fit in a signed integer correctly. */
c906108c 421 /* FIXME: Doesn't handle ranges of enums correctly. (Can't just
c5aa993b
JM
422 print with the target type, though, because the size of our type
423 and the target type might differ). */
c906108c
SS
424 /* FALLTHROUGH */
425
426 case TYPE_CODE_INT:
427 format = format ? format : output_format;
428 if (format)
429 {
430 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
431 }
432 else
433 {
434 val_print_type_code_int (type, valaddr + embedded_offset, stream);
435 /* C and C++ has no single byte int type, char is used instead.
436 Since we don't know whether the value is really intended to
437 be used as an integer or a character, print the character
ea37ba09
DJ
438 equivalent as well. */
439 if (textual_element_type (type, format))
c906108c
SS
440 {
441 fputs_filtered (" ", stream);
442 LA_PRINT_CHAR ((unsigned char) unpack_long (type, valaddr + embedded_offset),
443 stream);
444 }
445 }
446 break;
447
448 case TYPE_CODE_CHAR:
449 format = format ? format : output_format;
450 if (format)
451 {
452 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
453 }
454 else
455 {
96baa820
JM
456 val = unpack_long (type, valaddr + embedded_offset);
457 if (TYPE_UNSIGNED (type))
458 fprintf_filtered (stream, "%u", (unsigned int) val);
459 else
460 fprintf_filtered (stream, "%d", (int) val);
c906108c 461 fputs_filtered (" ", stream);
96baa820 462 LA_PRINT_CHAR ((unsigned char) val, stream);
c906108c
SS
463 }
464 break;
465
466 case TYPE_CODE_FLT:
467 if (format)
468 {
469 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
470 }
471 else
472 {
473 print_floating (valaddr + embedded_offset, type, stream);
474 }
475 break;
476
7678ef8f
TJB
477 case TYPE_CODE_DECFLOAT:
478 if (format)
479 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
480 else
481 print_decimal_floating (valaddr + embedded_offset, type, stream);
482 break;
483
c906108c
SS
484 case TYPE_CODE_VOID:
485 fprintf_filtered (stream, "void");
486 break;
487
488 case TYPE_CODE_ERROR:
3d263c1d 489 fprintf_filtered (stream, _("<error type>"));
c906108c
SS
490 break;
491
492 case TYPE_CODE_UNDEF:
493 /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
c5aa993b
JM
494 dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
495 and no complete type for struct foo in that file. */
3d263c1d 496 fprintf_filtered (stream, _("<incomplete type>"));
c906108c
SS
497 break;
498
fca9e603
DJ
499 case TYPE_CODE_COMPLEX:
500 if (format)
501 print_scalar_formatted (valaddr + embedded_offset,
502 TYPE_TARGET_TYPE (type),
503 format, 0, stream);
504 else
505 print_floating (valaddr + embedded_offset, TYPE_TARGET_TYPE (type),
506 stream);
507 fprintf_filtered (stream, " + ");
508 if (format)
509 print_scalar_formatted (valaddr + embedded_offset
510 + TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
511 TYPE_TARGET_TYPE (type),
512 format, 0, stream);
513 else
514 print_floating (valaddr + embedded_offset
515 + TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
516 TYPE_TARGET_TYPE (type),
517 stream);
518 fprintf_filtered (stream, " * I");
519 break;
520
c906108c 521 default:
3d263c1d 522 error (_("Invalid C/C++ type code %d in symbol table."), TYPE_CODE (type));
c906108c
SS
523 }
524 gdb_flush (stream);
525 return (0);
526}
527\f
528int
6943961c 529c_value_print (struct value *val, struct ui_file *stream, int format,
fba45db2 530 enum val_prettyprint pretty)
c906108c 531{
88750304 532 struct type *type, *real_type;
c906108c 533 int full, top, using_enc;
c5aa993b 534
c906108c
SS
535 /* If it is a pointer, indicate what it points to.
536
537 Print type also if it is a reference.
538
539 C++: if it is a member pointer, we will take care
540 of that when we print it. */
88750304
DJ
541
542 type = check_typedef (value_type (val));
543
544 if (TYPE_CODE (type) == TYPE_CODE_PTR
545 || TYPE_CODE (type) == TYPE_CODE_REF)
c906108c
SS
546 {
547 /* Hack: remove (char *) for char strings. Their
ea37ba09
DJ
548 type is indicated by the quoted string anyway.
549 (Don't use textual_element_type here; quoted strings
550 are always exactly (char *). */
88750304
DJ
551 if (TYPE_CODE (type) == TYPE_CODE_PTR
552 && TYPE_NAME (type) == NULL
553 && TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL
554 && strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
c906108c
SS
555 {
556 /* Print nothing */
557 }
558 else if (objectprint && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
c5aa993b 559 {
070ad9f0
DB
560
561 if (TYPE_CODE(type) == TYPE_CODE_REF)
562 {
563 /* Copy value, change to pointer, so we don't get an
564 * error about a non-pointer type in value_rtti_target_type
565 */
6943961c 566 struct value *temparg;
070ad9f0 567 temparg=value_copy(val);
04624583 568 deprecated_set_value_type (temparg, lookup_pointer_type (TYPE_TARGET_TYPE(type)));
070ad9f0
DB
569 val=temparg;
570 }
c5aa993b 571 /* Pointer to class, check real type of object */
c906108c 572 fprintf_filtered (stream, "(");
c4093a6a
JM
573 real_type = value_rtti_target_type (val, &full, &top, &using_enc);
574 if (real_type)
c5aa993b
JM
575 {
576 /* RTTI entry found */
c4093a6a
JM
577 if (TYPE_CODE (type) == TYPE_CODE_PTR)
578 {
579 /* create a pointer type pointing to the real type */
580 type = lookup_pointer_type (real_type);
581 }
582 else
583 {
584 /* create a reference type referencing the real type */
585 type = lookup_reference_type (real_type);
586 }
070ad9f0 587 /* JYG: Need to adjust pointer value. */
5086187c
AC
588 /* NOTE: cagney/2005-01-02: THIS IS BOGUS. */
589 value_contents_writeable (val)[0] -= top;
070ad9f0 590
c4093a6a
JM
591 /* Note: When we look up RTTI entries, we don't get any
592 information on const or volatile attributes */
593 }
594 type_print (type, "", stream, -1);
c906108c 595 fprintf_filtered (stream, ") ");
c5aa993b 596 }
c906108c
SS
597 else
598 {
c5aa993b 599 /* normal case */
c906108c 600 fprintf_filtered (stream, "(");
88750304 601 type_print (value_type (val), "", stream, -1);
c906108c
SS
602 fprintf_filtered (stream, ") ");
603 }
604 }
88750304 605
42be36b3
CT
606 if (!value_initialized (val))
607 fprintf_filtered (stream, " [uninitialized] ");
608
88750304 609 if (objectprint && (TYPE_CODE (type) == TYPE_CODE_CLASS))
c906108c
SS
610 {
611 /* Attempt to determine real type of object */
612 real_type = value_rtti_type (val, &full, &top, &using_enc);
c5aa993b
JM
613 if (real_type)
614 {
615 /* We have RTTI information, so use it */
616 val = value_full_object (val, real_type, full, top, using_enc);
617 fprintf_filtered (stream, "(%s%s) ",
618 TYPE_NAME (real_type),
3d263c1d 619 full ? "" : _(" [incomplete object]"));
c5aa993b 620 /* Print out object: enclosing type is same as real_type if full */
46615f07
AC
621 return val_print (value_enclosing_type (val),
622 value_contents_all (val), 0,
623 VALUE_ADDRESS (val), stream, format, 1, 0, pretty);
c4093a6a
JM
624 /* Note: When we look up RTTI entries, we don't get any information on
625 const or volatile attributes */
c5aa993b 626 }
88750304 627 else if (type != check_typedef (value_enclosing_type (val)))
c5aa993b
JM
628 {
629 /* No RTTI information, so let's do our best */
630 fprintf_filtered (stream, "(%s ?) ",
4754a64e 631 TYPE_NAME (value_enclosing_type (val)));
46615f07
AC
632 return val_print (value_enclosing_type (val),
633 value_contents_all (val), 0,
634 VALUE_ADDRESS (val), stream, format, 1, 0, pretty);
c5aa993b 635 }
c906108c
SS
636 /* Otherwise, we end up at the return outside this "if" */
637 }
c5aa993b 638
46615f07 639 return val_print (type, value_contents_all (val),
13c3b5f5 640 value_embedded_offset (val),
df407dfe 641 VALUE_ADDRESS (val) + value_offset (val),
c906108c
SS
642 stream, format, 1, 0, pretty);
643}
This page took 0.48369 seconds and 4 git commands to generate.