aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorMikael Morin <mikael.morin@sfr.fr>2011-08-19 00:42:38 +0200
committerMikael Morin <mikael@gcc.gnu.org>2011-08-18 22:42:38 +0000
commitdf1a69f6a85e6c82e206388daa459f06d2e92876 (patch)
treecd909034298135072ec57ac3e175166acb6dba01 /gcc/fortran/resolve.c
parenta7ad08aef73fd2c4219a31a419e41ce2e5408a09 (diff)
downloadgcc-df1a69f6a85e6c82e206388daa459f06d2e92876.zip
gcc-df1a69f6a85e6c82e206388daa459f06d2e92876.tar.gz
gcc-df1a69f6a85e6c82e206388daa459f06d2e92876.tar.bz2
re PR fortran/50071 (gfortran does not distinguish labels in different type scoping units)
2011-08-19 Mikael Morin <mikael.morin@sfr.fr> PR fortran/50071 * gfortran.h (gfc_exec_op): New constant EXEC_END_NESTED_BLOCK. * parse.c (check_statement_label): Accept ST_END_BLOCK and ST_END_ASSOCIATE as valid branch target. (accept_statement): Change EXEC_END_BLOCK to EXEC_END_NESTED_BLOCK. Add EXEC_END_BLOCK code in the ST_END_BLOCK and ST_END_ASSOCIATE cases. * resolve.c (find_reachable_labels): Change EXEC_END_BLOCK to EXEC_END_NESTED_BLOCK. (resolve_branch): Ditto. (resolve_code): Add EXEC_END_NESTED_BLOCK case. * st.c (gfc_free_statement): Ditto. * trans.c (trans_code): Ditto. 2011-08-19 Mikael Morin <mikael.morin@sfr.fr> PR fortran/50071 * gfortran.dg/end_block_label_1.f90: New test. * gfortran.dg/end_associate_label_1.f90: New test. From-SVN: r177885
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 53234fa..ea184a2 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -8202,7 +8202,7 @@ find_reachable_labels (gfc_code *block)
up through the code_stack. */
for (c = block; c; c = c->next)
{
- if (c->here && c->op != EXEC_END_BLOCK)
+ if (c->here && c->op != EXEC_END_NESTED_BLOCK)
bitmap_set_bit (cs_base->reachable_labels, c->here->value);
}
@@ -8381,7 +8381,7 @@ resolve_branch (gfc_st_label *label, gfc_code *code)
if (stack)
{
- gcc_assert (stack->current->next->op == EXEC_END_BLOCK);
+ gcc_assert (stack->current->next->op == EXEC_END_NESTED_BLOCK);
return;
}
@@ -9117,6 +9117,7 @@ resolve_code (gfc_code *code, gfc_namespace *ns)
{
case EXEC_NOP:
case EXEC_END_BLOCK:
+ case EXEC_END_NESTED_BLOCK:
case EXEC_CYCLE:
case EXEC_PAUSE:
case EXEC_STOP: