Patchwork [Ada] Emit named pointer types in debug info

login
register
mail settings
Submitter Eric Botcazou
Date April 2, 2011, 8:59 a.m.
Message ID <201104021059.07027.ebotcazou@adacore.com>
Download mbox | patch
Permalink /patch/89441/
State New
Headers show

Comments

Eric Botcazou - April 2, 2011, 8:59 a.m.
This makes it so that the Ada compiler emits named pointer types in the debug 
info (DW_TAG_typedef in DWARF) for pointer types declared in the sources.

Tested on i586-suse-linux, applied on the mainline.


2011-04-02  Eric Botcazou  <ebotcazou@adacore.com>

	* gcc-interface/utils.c (gnat_pushdecl): If this is a non-artificial
	declaration of a pointer type, then set DECL_ORIGINAL_TYPE to a
	distinct copy.

Patch

Index: gcc-interface/utils.c
===================================================================
--- gcc-interface/utils.c	(revision 171882)
+++ gcc-interface/utils.c	(working copy)
@@ -560,12 +560,16 @@  gnat_pushdecl (tree decl, Node_Id gnat_n
 
       if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
 	{
-	  /* Array types aren't tagged types in the C sense so we force the
+	  /* Array and pointer types aren't "tagged" types so we force the
 	     type to be associated with its typedef in the DWARF back-end,
 	     in order to make sure that the latter is always preserved.  */
-	  if (!DECL_ARTIFICIAL (decl) && TREE_CODE (t) == ARRAY_TYPE)
+	  if (!DECL_ARTIFICIAL (decl)
+	      && (TREE_CODE (t) == ARRAY_TYPE
+		  || TREE_CODE (t) == POINTER_TYPE))
 	    {
 	      tree tt = build_distinct_type_copy (t);
+	      if (TREE_CODE (t) == POINTER_TYPE)
+		TYPE_NEXT_PTR_TO (t) = tt;
 	      TYPE_NAME (tt) = DECL_NAME (decl);
 	      TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
 	      DECL_ORIGINAL_TYPE (decl) = tt;