This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]