mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-05 12:53:16 +08:00
Handle __XVL fields in Ada type printing
Sometimes the Ada compiler will emit an "__XVL" name for a field. The Ada compiler describes: -- Second, the variable-length fields themselves are represented by -- replacing the type by a special access type. The designated type of -- this access type is the original variable-length type, and the fact -- that this field has been transformed in this way is signalled by -- encoding the field name as: -- field___XVL Currently gdb describes such fields as having "access" type, but this is inaccurate. This patch changes gdb to avoid printing "access" in this case. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * ada-typeprint.c (ada_print_type): Handle __XVL fields. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/funcall_ref.exp: Update. * gdb.ada/var_rec_arr.exp: Update.
This commit is contained in:
parent
8d9fd3a107
commit
9c91c72591
@ -1,3 +1,7 @@
|
||||
2020-11-04 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* ada-typeprint.c (ada_print_type): Handle __XVL fields.
|
||||
|
||||
2020-11-04 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* ada-typeprint.c (ada_print_type): Handle __T types.
|
||||
|
@ -1006,7 +1006,11 @@ ada_print_type (struct type *type0, const char *varstring,
|
||||
break;
|
||||
case TYPE_CODE_PTR:
|
||||
case TYPE_CODE_TYPEDEF:
|
||||
fprintf_filtered (stream, "access ");
|
||||
/* An __XVL field is not truly a pointer, so don't print
|
||||
"access" in this case. */
|
||||
if (type->code () != TYPE_CODE_PTR
|
||||
|| strstr (varstring, "___XVL") == nullptr)
|
||||
fprintf_filtered (stream, "access ");
|
||||
ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level,
|
||||
flags);
|
||||
break;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2020-11-04 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* gdb.ada/funcall_ref.exp: Update.
|
||||
* gdb.ada/var_rec_arr.exp: Update.
|
||||
|
||||
2020-11-04 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* gdb.ada/rec_ptype.exp: New file.
|
||||
|
@ -41,7 +41,7 @@ foreach_with_prefix scenario {all minimal} {
|
||||
# references).
|
||||
set pass_re [multi_line "type = <ref> record" \
|
||||
" n: natural;" \
|
||||
" s: access array \\(1 \\.\\. n\\) of character;" \
|
||||
" s: array \\(1 \\.\\. n\\) of character;" \
|
||||
"end record"]
|
||||
# With DWARF we get debuginfo that could in theory show "1..n" for
|
||||
# the range:
|
||||
|
@ -58,21 +58,9 @@ foreach_with_prefix scenario {all minimal} {
|
||||
gdb_test "print a2(3)" \
|
||||
" = \\(i => 0, s => \"\"\\)"
|
||||
|
||||
# Note that the "access" is only printed when the gnat encodings
|
||||
# are used. This is due to how the encodings work -- the type
|
||||
# doesn't actually have the "access", and so here the DWARF
|
||||
# encoding is more correct.
|
||||
if {$scenario == "all"} {
|
||||
set ex [multi_line "type = record" \
|
||||
" i: pck\\.small_type;" \
|
||||
" s: access array \\((<>|1 \\.\\. i)\\) of character;" \
|
||||
"end record"]
|
||||
} else {
|
||||
set ex [multi_line "type = record" \
|
||||
" i: pck\\.small_type;" \
|
||||
" s: array \\((<>|1 \\.\\. i)\\) of character;" \
|
||||
"end record"]
|
||||
}
|
||||
|
||||
gdb_test "ptype a1(1)" $ex
|
||||
gdb_test "ptype a1(1)" \
|
||||
[multi_line "type = record" \
|
||||
" i: pck\\.small_type;" \
|
||||
" s: array \\((<>|1 \\.\\. i)\\) of character;" \
|
||||
"end record"]
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user