diff options
author | mikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-08-18 22:42:38 +0000 |
---|---|---|
committer | mikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-08-18 22:42:38 +0000 |
commit | 045b8fbbe3bc8c6698d44381d8d4553b9cf28f6f (patch) | |
tree | cd909034298135072ec57ac3e175166acb6dba01 /gcc/fortran/parse.c | |
parent | d76fd211d897409e82abbbcaf0df9b208f4f2964 (diff) | |
download | gcc-045b8fbbe3bc8c6698d44381d8d4553b9cf28f6f.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177885 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r-- | gcc/fortran/parse.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index 0aaad90fca0..aab711cdaae 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -1115,6 +1115,8 @@ check_statement_label (gfc_statement st) case ST_ENDIF: case ST_END_SELECT: case ST_END_CRITICAL: + case ST_END_BLOCK: + case ST_END_ASSOCIATE: case_executable: case_exec_markers: type = ST_LABEL_TARGET; @@ -1627,6 +1629,18 @@ accept_statement (gfc_statement st) case ST_END_CRITICAL: if (gfc_statement_label != NULL) { + new_st.op = EXEC_END_NESTED_BLOCK; + add_statement (); + } + break; + + /* In the case of BLOCK and ASSOCIATE blocks, there cannot be more than + one parallel block. Thus, we add the special code to the nested block + itself, instead of the parent one. */ + case ST_END_BLOCK: + case ST_END_ASSOCIATE: + if (gfc_statement_label != NULL) + { new_st.op = EXEC_END_BLOCK; add_statement (); } |