Make "ptype INTERNAL_FUNCTION" in Ada print like other languages

Currently, printing the type of an internal function in Ada shows
double <>s, like:

 (gdb) with language ada -- ptype $_isvoid
 type = <<internal function>>

while all other languages print it with a single <>, like:

 (gdb) with language c -- ptype $_isvoid
 type = <internal function>

I don't think there's a reason that Ada needs to be different.  We
currently print the double <>s because we take this path in
ada_print_type:

    switch (type->code ())
      {
      default:
	gdb_printf (stream, "<");
	c_print_type (type, "", stream, show, level, language_ada, flags);
	gdb_printf (stream, ">");
	break;

... and the type's name already has the <>s.

Fix this by simply adding an early check for
TYPE_CODE_INTERNAL_FUNCTION.

Approved-By: Andrew Burgess <aburgess@redhat.com>
Approved-By: Tom Tromey <tom@tromey.com>
Change-Id: Ic2b6527b9240a367471431023f6e27e6daed5501
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30105
This commit is contained in:
Pedro Alves
2023-02-10 11:55:00 +00:00
parent a975d4e6bc
commit 751495be92
2 changed files with 7 additions and 2 deletions

View File

@@ -941,6 +941,13 @@ ada_print_type (struct type *type0, const char *varstring,
struct ui_file *stream, int show, int level,
const struct type_print_options *flags)
{
if (type0->code () == TYPE_CODE_INTERNAL_FUNCTION)
{
c_print_type (type0, "", stream, show, level,
language_ada, flags);
return;
}
struct type *type = ada_check_typedef (ada_get_base_type (type0));
/* If we can decode the original type name, use it. However, there
are cases where the original type is an internally-generated type

View File

@@ -29,8 +29,6 @@ proc test_ptype_internal_function {} {
if {$lang == "unknown"} {
gdb_test "ptype \$_isvoid" \
"expression parsing not implemented for language \"Unknown\""
} elseif {$lang == "ada"} {
gdb_test "ptype \$_isvoid" "<<internal function>>"
} else {
gdb_test "ptype \$_isvoid" "<internal function>"
}