OSDN Git Service

* trans-decl.c (gfc_build_qualified_array): Ensure
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Apr 2010 21:44:48 +0000 (21:44 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Apr 2010 21:44:48 +0000 (21:44 +0000)
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

gcc/fortran/ChangeLog
gcc/fortran/trans-decl.c

index b828104..b53aff9 100644 (file)
@@ -1,3 +1,9 @@
+2010-04-16  Jakub Jelinek  <jakub@redhat.com>
+
+       * 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  <kargl@gcc.gnu.org>
 
        PR fortran/30073
index 9e79a9a..2545ad2 100644 (file)
@@ -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);