aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@gcc.gnu.org>2020-06-23 17:37:17 +0200
committerGiuliano Belinassi <giuliano.belinassi@usp.br>2020-08-17 13:14:35 -0300
commitceaca3433b9868de5448d685f775dd3ec3dd7f85 (patch)
tree238080b76cd1ecb9d902eb47b6b1d7c105c4a412
parentd2509034cd3d4c64b482daa332171001132bf693 (diff)
downloadgcc-ceaca3433b9868de5448d685f775dd3ec3dd7f85.zip
gcc-ceaca3433b9868de5448d685f775dd3ec3dd7f85.tar.gz
gcc-ceaca3433b9868de5448d685f775dd3ec3dd7f85.tar.bz2
Emit user subtypes with -fgnat-encodings=minimal
This changes the compiler to emit debug info for user-defined subtypes with -fgnat-encodings=minimal, as they might be needed by the debugger. gcc/ada/ChangeLog: * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Subtype>: Set debug type to the base type and only if the subtype is artificial.
-rw-r--r--gcc/ada/gcc-interface/decl.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index 33d59d5..589154b 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -3507,18 +3507,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
gnu_type = make_node (RECORD_TYPE);
TYPE_NAME (gnu_type) = gnu_entity_name;
- if (gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
- {
- /* Use the ultimate base record type as the debug type.
- Subtypes and derived types bring no useful
- information. */
- Entity_Id gnat_debug_type = gnat_entity;
- while (Etype (gnat_debug_type) != gnat_debug_type)
- gnat_debug_type = Etype (gnat_debug_type);
- tree gnu_debug_type
- = TYPE_MAIN_VARIANT (gnat_to_gnu_type (gnat_debug_type));
- SET_TYPE_DEBUG_TYPE (gnu_type, gnu_debug_type);
- }
TYPE_PACKED (gnu_type) = TYPE_PACKED (gnu_base_type);
TYPE_REVERSE_STORAGE_ORDER (gnu_type)
= Reverse_Storage_Order (gnat_entity);
@@ -3580,6 +3568,13 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
true, debug_info_p,
NULL, gnat_entity);
}
+
+ /* Or else, if the subtype is artificial and encodings are not
+ used, use the base record type as the debug type. */
+ else if (debug_info_p
+ && artificial_p
+ && gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
+ SET_TYPE_DEBUG_TYPE (gnu_type, gnu_unpad_base_type);
}
/* Otherwise, go down all the components in the new type and make