OSDN Git Service

* trans-decl.c (gfc_build_label_decl): Set DECL_ARTIFICAL and
authorsteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Jan 2005 00:58:11 +0000 (00:58 +0000)
committersteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Jan 2005 00:58:11 +0000 (00:58 +0000)
TREE_USED for all labels.
(gfc_trans_entry_master_switch): Use it instead of building a
label by hand.
* trans-io.c (add_case): Likewise.
* trans-stmt.c (gfc_trans_integer_select): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@94299 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 2cb1958..18b7753 100644 (file)
@@ -1,3 +1,12 @@
+2004-01-27  Steven Bosscher  <stevenb@suse.de>
+
+       * trans-decl.c (gfc_build_label_decl): Set DECL_ARTIFICAL and
+       TREE_USED for all labels.
+       (gfc_trans_entry_master_switch): Use it instead of building a
+       label by hand.
+       * trans-io.c (add_case): Likewise.
+       * trans-stmt.c (gfc_trans_integer_select): Likewise.
+
 2004-01-23  Paul Brook  <paul@codesourcery.com>
        Steven G. Kargl  <kargls@comcast.net>
 
index 65ba867..6567695 100644 (file)
@@ -148,9 +148,9 @@ gfc_add_decl_to_function (tree decl)
 }
 
 
-/* Build a  backend label declaration.
-   Set TREE_USED for named lables.  For artificial labels it's up to the
-   caller to mark the label as used.  */
+/* Build a  backend label declaration.  Set TREE_USED for named labels.
+   The context of the label is always the current_function_decl.  All
+   labels are marked artificial.  */
 
 tree
 gfc_build_label_decl (tree label_id)
@@ -174,19 +174,13 @@ gfc_build_label_decl (tree label_id)
   DECL_CONTEXT (label_decl) = current_function_decl;
   DECL_MODE (label_decl) = VOIDmode;
 
-  if (label_name)
-    {
-      DECL_ARTIFICIAL (label_decl) = 1;
-    }
-  else
-    {
-      /* We always define the label as used, even if the original source
-         file never references the label.  We don't want all kinds of
-         spurious warnings for old-style Fortran code with too many
-         labels.  */
-      TREE_USED (label_decl) = 1;
-    }
+  /* We always define the label as used, even if the original source
+     file never references the label.  We don't want all kinds of
+     spurious warnings for old-style Fortran code with too many
+     labels.  */
+  TREE_USED (label_decl) = 1;
 
+  DECL_ARTIFICIAL (label_decl) = 1;
   return label_decl;
 }
 
@@ -2122,16 +2116,13 @@ gfc_trans_entry_master_switch (gfc_entry_list * el)
   for (; el; el = el->next)
     {
       /* Add the case label.  */
-      label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-      DECL_CONTEXT (label) = current_function_decl;
+      label = gfc_build_label_decl (NULL_TREE);
       val = build_int_cst (gfc_array_index_type, el->id);
       tmp = build3_v (CASE_LABEL_EXPR, val, NULL_TREE, label);
       gfc_add_expr_to_block (&block, tmp);
       
       /* And jump to the actual entry point.  */
       label = gfc_build_label_decl (NULL_TREE);
-      TREE_USED (label) = 1;
-      DECL_CONTEXT (label) = current_function_decl;
       tmp = build1_v (GOTO_EXPR, label);
       gfc_add_expr_to_block (&block, tmp);
 
index 67fc796..b5ef13f 100644 (file)
@@ -452,8 +452,7 @@ add_case (int label_value, gfc_st_label * label, stmtblock_t * body)
   value = build_int_cst (NULL_TREE, label_value);
 
   /* Make a backend label for this case.  */
-  tmp = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-  DECL_CONTEXT (tmp) = current_function_decl;
+  tmp = gfc_build_label_decl (NULL_TREE);
 
   /* And the case itself.  */
   tmp = build3_v (CASE_LABEL_EXPR, value, NULL_TREE, tmp);
index 2d2fe8b..7a55cbc 100644 (file)
@@ -945,8 +945,7 @@ gfc_trans_integer_select (gfc_code * code)
            }
 
           /* Build a label.  */
-          label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-          DECL_CONTEXT (label) = current_function_decl;
+          label = gfc_build_label_decl (NULL_TREE);
 
          /* Add this case label.
              Add parameter 'label', make it match GCC backend.  */