Make "ptype INTERNAL_FUNCTION" in Ada print like other languages
authorPedro Alves <pedro@palves.net>
Fri, 10 Feb 2023 11:55:00 +0000 (11:55 +0000)
committerPedro Alves <pedro@palves.net>
Wed, 15 Feb 2023 20:56:57 +0000 (20:56 +0000)
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

gdb/ada-typeprint.c
gdb/testsuite/gdb.base/internal-functions-ptype.exp

index e95034c9285774960f8d75ed6b81ce33deda35ac..3866b2d35eba27066c745da866af0afff09659a9 100644 (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
index 42caae05aad577799e5045d6cf4fae1ae1b20343..748f33a87cde8d27fde54ab2a2491482f341509b 100644 (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>"
        }