Patchwork [Ada] Adjust to change in handling of local types with -g

login
register
mail settings
Submitter Eric Botcazou
Date July 3, 2012, 7:52 a.m.
Message ID <201207030952.05932.ebotcazou@adacore.com>
Download mbox | patch
Permalink /patch/168726/
State New
Headers show

Comments

Eric Botcazou - July 3, 2012, 7:52 a.m.
The fix for PR c++/52637 slightly broke the handling of local types in Ada.
The attached patch restores correct generation of debug info for them.

Tested on i586-suse-linux, applied on mainline and 4.7 branch.


2012-07-03  Eric Botcazou  <ebotcazou@adacore.com>

	* gcc-interface/utils.c (gnat_pushdecl): Set TYPE_CONTEXT for types
	attached to a TYPE_DECL.

Patch

Index: gcc-interface/utils.c
===================================================================
--- gcc-interface/utils.c	(revision 189034)
+++ gcc-interface/utils.c	(working copy)
@@ -612,6 +612,7 @@  gnat_pushdecl (tree decl, Node_Id gnat_n
 	      if (TREE_CODE (t) == POINTER_TYPE)
 		TYPE_NEXT_PTR_TO (t) = tt;
 	      TYPE_NAME (tt) = DECL_NAME (decl);
+	      TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
 	      TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
 	      DECL_ORIGINAL_TYPE (decl) = tt;
 	    }
@@ -621,6 +622,7 @@  gnat_pushdecl (tree decl, Node_Id gnat_n
 	  /* We need a variant for the placeholder machinery to work.  */
 	  tree tt = build_variant_type_copy (t);
 	  TYPE_NAME (tt) = decl;
+	  TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
 	  TREE_USED (tt) = TREE_USED (t);
 	  TREE_TYPE (decl) = tt;
 	  if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
@@ -640,7 +642,10 @@  gnat_pushdecl (tree decl, Node_Id gnat_n
       if (t)
 	for (t = TYPE_MAIN_VARIANT (t); t; t = TYPE_NEXT_VARIANT (t))
 	  if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
-	    TYPE_NAME (t) = decl;
+	    {
+	      TYPE_NAME (t) = decl;
+	      TYPE_CONTEXT (t) = DECL_CONTEXT (decl);
+	    }
     }
 }