+2020-11-04 Tom Tromey <tromey@adacore.com>
+
+ * ada-typeprint.c (ada_print_type): Handle __T types.
+
2020-11-04 Tom Tromey <tromey@adacore.com>
* dwarf2/read.c (add_partial_symbol, process_die):
const struct type_print_options *flags)
{
struct type *type = ada_check_typedef (ada_get_base_type (type0));
- char *type_name = decoded_type_name (type0);
+ /* If we can decode the original type name, use it. However, there
+ are cases where the original type is an internally-generated type
+ with a name that can't be decoded (and whose encoded name might
+ not actually bear any relation to the type actually declared in
+ the sources). In that case, try using the name of the base type
+ in its place.
+
+ Note that we looked at the possibility of always using the name
+ of the base type. This does not always work, unfortunately, as
+ there are situations where it's the base type which has an
+ internally-generated name. */
+ const char *type_name = decoded_type_name (type0);
+ if (type_name == nullptr)
+ type_name = decoded_type_name (type);
int is_var_decl = (varstring != NULL && varstring[0] != '\0');
if (type == NULL)
+2020-11-04 Tom Tromey <tromey@adacore.com>
+
+ * gdb.ada/rec_ptype.exp: New file.
+ * gdb.ada/rec_ptype/main.adb: New file.
+ * gdb.ada/rec_ptype/p.ads: New file.
+
2020-11-04 Tom Tromey <tromey@adacore.com>
* gdb.ada/tick_length_array_enum_idx.exp: Add ptype test.
--- /dev/null
+# Copyright 2020 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+standard_ada_testfile main
+
+# Note we don't test the "none" (no -fgnat-encodings option) scenario
+# here, because "all" and "minimal" cover the cases, and this way we
+# don't have to update the test when gnat changes its default.
+foreach_with_prefix scenario {all minimal} {
+ set flags [list debug additional_flags=-fgnat-encodings=$scenario]
+
+ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} {
+ return -1
+ }
+
+ clean_restart ${testfile}
+
+ set bp_location [gdb_get_line_number "STOP" ${testdir}/main.adb]
+ runto "main.adb:$bp_location"
+
+ gdb_test "ptype Test.top_level_record_complex_record" \
+ [multi_line "type = record" \
+ " kind: p.kind_type;" \
+ " complex_variable_record_variable_record: p.variable_record_type;" \
+ "end record"]
+}
--- /dev/null
+-- Copyright 2020 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+with P; use P;
+
+procedure Main is
+ Test : Top_Level_Record_Type := Top_Level_Record_Type'
+ (Top_Level_Record_Complex_Record => (Kind => A_Kind, others => <>));
+begin
+ null; -- STOP
+end Main;
--- /dev/null
+-- Copyright 2020 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package P is
+
+ type Kind_Type is (No_Kind, A_Kind, B_Kind);
+
+ type PID_Type is new Integer;
+ Default_Value : constant PID_Type := 0;
+
+ type Name_Type is array (1 ..3) of Character;
+ Name_Default_Value : constant Name_Type := "AAA";
+
+ type Variable_Record_Type(Kind : Kind_Type := No_Kind) is record
+ case Kind is
+ when A_Kind =>
+ Variable_Record_A : PID_Type := Default_Value;
+
+ when B_Kind =>
+ Variable_Record_B : Name_Type := Name_Default_Value;
+
+ when No_Kind =>
+ null;
+
+ end case;
+ end record;
+
+ type Complex_Variable_Record_Type (Kind : Kind_Type := No_Kind) is record
+ Complex_Variable_Record_Variable_Record : Variable_Record_Type(Kind);
+ end record;
+
+ type Top_Level_Record_Type is record
+ Top_Level_Record_Complex_Record : Complex_Variable_Record_Type;
+ end record;
+
+end P;