This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[Ada] Preserve unconstrained array types in debug info
- From: Eric Botcazou <ebotcazou at adacore dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sat, 2 Apr 2011 10:49:54 +0200
- Subject: [Ada] Preserve unconstrained array types in debug info
This makes it so that the Ada compiler preserves unconstrained array types in
the debug info when they are declared in the sources and a constrained subtype
is referenced in the same unit.
Tested on i586-suse-linux, applied on the mainline.
2011-04-02 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Do not make
fat pointer types artificial unconditionally.
<E_Array_Subtype>: Attach the base array type as a parallel type if it
isn't artificial.
--
Eric Botcazou
Index: gcc-interface/decl.c
===================================================================
--- gcc-interface/decl.c (revision 171882)
+++ gcc-interface/decl.c (working copy)
@@ -2175,7 +2175,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entit
else
gnat_name = gnat_entity;
create_type_decl (create_concat_name (gnat_name, "XUP"),
- gnu_fat_type, NULL, true,
+ gnu_fat_type, NULL, !Comes_From_Source (gnat_entity),
debug_info_p, gnat_entity);
/* Create the type to be used as what a thin pointer designates:
@@ -2537,14 +2537,25 @@ gnat_to_gnu_entity (Entity_Id gnat_entit
add_parallel_type (TYPE_STUB_DECL (gnu_type), gnu_bound_rec);
}
- /* Otherwise, for a packed array, make the original array type a
- parallel type. */
- else if (debug_info_p
- && Is_Packed_Array_Type (gnat_entity)
- && present_gnu_tree (Original_Array_Type (gnat_entity)))
- add_parallel_type (TYPE_STUB_DECL (gnu_type),
- gnat_to_gnu_type
- (Original_Array_Type (gnat_entity)));
+ /* If this is a packed array type, make the original array type a
+ parallel type. Otherwise, do it for the base array type if it
+ isn't artificial to make sure it is kept in the debug info. */
+ if (debug_info_p)
+ {
+ if (Is_Packed_Array_Type (gnat_entity)
+ && present_gnu_tree (Original_Array_Type (gnat_entity)))
+ add_parallel_type (TYPE_STUB_DECL (gnu_type),
+ gnat_to_gnu_type
+ (Original_Array_Type (gnat_entity)));
+ else
+ {
+ tree gnu_base_decl
+ = gnat_to_gnu_entity (Etype (gnat_entity), NULL_TREE, 0);
+ if (!DECL_ARTIFICIAL (gnu_base_decl))
+ add_parallel_type (TYPE_STUB_DECL (gnu_type),
+ TREE_TYPE (TREE_TYPE (gnu_base_decl)));
+ }
+ }
TYPE_CONVENTION_FORTRAN_P (gnu_type) = convention_fortran_p;
TYPE_PACKED_ARRAY_TYPE_P (gnu_type)