diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 2cb19583aca..18b7753f4bb 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2004-01-27 Steven Bosscher + + * 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 Steven G. Kargl diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 65ba867948a..6567695ad29 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -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); diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c index 67fc796f86f..b5ef13f5e16 100644 --- a/gcc/fortran/trans-io.c +++ b/gcc/fortran/trans-io.c @@ -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); diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index 2d2fe8bf8b7..7a55cbc48c9 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -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. */