From: jakub Date: Fri, 16 Apr 2010 21:44:48 +0000 (+0000) Subject: * trans-decl.c (gfc_build_qualified_array): Ensure X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=7130ec9df4fcfe8a0c1f6d3a10cfb46770cc622d * trans-decl.c (gfc_build_qualified_array): Ensure ubound.N and lbound.N artificial variable names don't appear in debug info. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158451 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b82810413a5..b53aff9b83b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2010-04-16 Jakub Jelinek + + * trans-decl.c (gfc_build_qualified_array): Ensure + ubound.N and lbound.N artificial variable names don't appear + in debug info. + 2010-04-15 Steven G. Kargl PR fortran/30073 diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 9e79a9adfab..2545ad2a320 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -771,19 +771,34 @@ gfc_build_qualified_array (tree decl, gfc_symbol * sym) for (dim = sym->as->rank - 1; dim >= 0; dim--) { - rtype = build_range_type (gfc_array_index_type, - GFC_TYPE_ARRAY_LBOUND (type, dim), - GFC_TYPE_ARRAY_UBOUND (type, dim)); + tree lbound, ubound; + lbound = GFC_TYPE_ARRAY_LBOUND (type, dim); + ubound = GFC_TYPE_ARRAY_UBOUND (type, dim); + rtype = build_range_type (gfc_array_index_type, lbound, ubound); gtype = build_array_type (gtype, rtype); /* Ensure the bound variables aren't optimized out at -O0. For -O1 and above they often will be optimized out, but - can be tracked by VTA. */ - if (GFC_TYPE_ARRAY_LBOUND (type, dim) - && TREE_CODE (GFC_TYPE_ARRAY_LBOUND (type, dim)) == VAR_DECL) - DECL_IGNORED_P (GFC_TYPE_ARRAY_LBOUND (type, dim)) = 0; - if (GFC_TYPE_ARRAY_UBOUND (type, dim) - && TREE_CODE (GFC_TYPE_ARRAY_UBOUND (type, dim)) == VAR_DECL) - DECL_IGNORED_P (GFC_TYPE_ARRAY_UBOUND (type, dim)) = 0; + can be tracked by VTA. Also clear the artificial + lbound.N or ubound.N DECL_NAME, so that it doesn't end up + in debug info. */ + if (lbound && TREE_CODE (lbound) == VAR_DECL + && DECL_ARTIFICIAL (lbound) && DECL_IGNORED_P (lbound)) + { + if (DECL_NAME (lbound) + && strstr (IDENTIFIER_POINTER (DECL_NAME (lbound)), + "lbound") != 0) + DECL_NAME (lbound) = NULL_TREE; + DECL_IGNORED_P (lbound) = 0; + } + if (ubound && TREE_CODE (ubound) == VAR_DECL + && DECL_ARTIFICIAL (ubound) && DECL_IGNORED_P (ubound)) + { + if (DECL_NAME (ubound) + && strstr (IDENTIFIER_POINTER (DECL_NAME (ubound)), + "ubound") != 0) + DECL_NAME (ubound) = NULL_TREE; + DECL_IGNORED_P (ubound) = 0; + } } TYPE_NAME (type) = type_decl = build_decl (input_location, TYPE_DECL, NULL, gtype);