[PATCH] Avoid unnecessary DECL_UID -g/-g0 differences in Fortran FE (PR fortran/63331)

Jakub Jelinek jakub@redhat.com
Tue Sep 23 14:28:00 GMT 2014


Hi!

This patch changes get_array_descr_info langhook in Fortran FE not to create
VAR_DECLs, because the langhook is only called with -g and not with -g0
and thus DECL_UIDs go out of sync too early.
For VTA, we allow DECL_UID changes, but lhd_set_assembler_name sometimes
emits DECL_UID into symbol names, so if we can avoid those early, we can
avoid those for symbols where set assembler name langhook cares.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2014-09-23  Jakub Jelinek  <jakub@redhat.com>

	PR fortran/63331
	* trans-types.c (gfc_get_array_descr_info): Build DEBUG_EXPR_DECL
	instead of VAR_DECL for base_decl.

	* gfortran.dg/pr63331.f90: New test.

--- gcc/fortran/trans-types.c.jj	2014-09-22 10:08:55.000000000 +0200
+++ gcc/fortran/trans-types.c	2014-09-22 16:40:47.286829928 +0200
@@ -3041,8 +3041,10 @@ gfc_get_array_descr_info (const_tree typ
   base_decl = GFC_TYPE_ARRAY_BASE_DECL (type, indirect);
   if (!base_decl)
     {
-      base_decl = build_decl (input_location, VAR_DECL, NULL_TREE,
-			      indirect ? build_pointer_type (ptype) : ptype);
+      base_decl = make_node (DEBUG_EXPR_DECL);
+      DECL_ARTIFICIAL (base_decl) = 1;
+      TREE_TYPE (base_decl) = indirect ? build_pointer_type (ptype) : ptype;
+      DECL_MODE (base_decl) = TYPE_MODE (TREE_TYPE (base_decl));
       GFC_TYPE_ARRAY_BASE_DECL (type, indirect) = base_decl;
     }
   info->base_decl = base_decl;
--- gcc/testsuite/gfortran.dg/pr63331.f90.jj	2014-09-22 17:15:31.959283267 +0200
+++ gcc/testsuite/gfortran.dg/pr63331.f90	2014-09-22 17:15:23.934324217 +0200
@@ -0,0 +1,5 @@
+! PR fortran/63331
+! { dg-do compile }
+! { dg-options "-fcoarray=single -fcompare-debug" }
+
+include 'intent_out_7.f90'

	Jakub



More information about the Gcc-patches mailing list