OSDN Git Service

* trans-decl.c (gfc_build_qualified_array): Ensure
[pf3gnuchains/gcc-fork.git] / gcc / fortran / trans-decl.c
index 7393f49..e24390b 100644 (file)
@@ -778,13 +778,27 @@ gfc_build_qualified_array (tree decl, gfc_symbol * sym)
          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);