From patchwork Sat Apr 2 08:59:06 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Ada] Emit named pointer types in debug info Date: Fri, 01 Apr 2011 22:59:06 -0000 From: Eric Botcazou X-Patchwork-Id: 89441 Message-Id: <201104021059.07027.ebotcazou@adacore.com> To: gcc-patches@gcc.gnu.org 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 * 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. 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;