diff options
author | Janus Weil <janus@gcc.gnu.org> | 2009-10-09 22:25:19 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2009-10-09 22:25:19 +0200 |
commit | 7431bf06bc2bb01a307a796bf4de57d9ca48bb38 (patch) | |
tree | 4469b291b15c4ee960294436b60b6b3e388e3d3c /gcc/fortran/parse.c | |
parent | 21ece9b288130746b5b772a7b18b50ef7a8bc706 (diff) | |
download | gcc-7431bf06bc2bb01a307a796bf4de57d9ca48bb38.zip gcc-7431bf06bc2bb01a307a796bf4de57d9ca48bb38.tar.gz gcc-7431bf06bc2bb01a307a796bf4de57d9ca48bb38.tar.bz2 |
re PR fortran/41579 ([OOP] Nesting of SELECT TYPE)
2009-10-09 Janus Weil <janus@gcc.gnu.org>
PR fortran/41579
* gfortran.h (gfc_select_type_stack): New struct, to be used as a stack
for SELECT TYPE statements.
(select_type_stack): New global variable.
(type_selector,select_type_tmp): Removed.
* match.c (type_selector,type_selector): Removed.
(select_type_stack): New variable, serving as a stack for
SELECT TYPE statements.
(select_type_push,select_type_set_tmp): New functions.
(gfc_match_select_type): Call select_type_push.
(gfc_match_type_is): Call select_type_set_tmp.
* parse.c (select_type_pop): New function.
(parse_select_type_block): Call select_type_pop.
* symbol.c (select_type_insert_tmp): New function.
(gfc_find_sym_tree): Call select_type_insert_tmp.
2009-10-09 Janus Weil <janus@gcc.gnu.org>
PR fortran/41579
* gfortran.dg/select_type_6.f03: New test.
From-SVN: r152600
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r-- | gcc/fortran/parse.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index 770c7ef..49d449c 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -2887,6 +2887,17 @@ parse_select_block (void) } +/* Pop the current selector from the SELECT TYPE stack. */ + +static void +select_type_pop (void) +{ + gfc_select_type_stack *old = select_type_stack; + select_type_stack = old->prev; + gfc_free (old); +} + + /* Parse a SELECT TYPE construct (F03:R821). */ static void @@ -2959,6 +2970,7 @@ done: pop_state (); accept_statement (st); gfc_current_ns = gfc_current_ns->parent; + select_type_pop (); } |