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.
This commit is contained in:
Eric Botcazou 2020-06-23 17:37:17 +02:00
parent d94d571bf0
commit fa0588dbec

View File

@ -3507,18 +3507,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
gnu_type = make_node (RECORD_TYPE); gnu_type = make_node (RECORD_TYPE);
TYPE_NAME (gnu_type) = gnu_entity_name; 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_PACKED (gnu_type) = TYPE_PACKED (gnu_base_type);
TYPE_REVERSE_STORAGE_ORDER (gnu_type) TYPE_REVERSE_STORAGE_ORDER (gnu_type)
= Reverse_Storage_Order (gnat_entity); = 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, true, debug_info_p,
NULL, gnat_entity); 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 /* Otherwise, go down all the components in the new type and make