diff options
author | Janus Weil <jaydub66@gmail.com> | 2007-08-22 21:11:13 +0000 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2007-08-22 23:11:13 +0200 |
commit | 129d15a3e011dd6f48865673f70396a957c4deff (patch) | |
tree | 173c6a444df12265712ebd7e0ceddf0ff276c15c /gcc/fortran/decl.c | |
parent | f11b235171696c8b04a850fa071a6d251b3cd533 (diff) | |
download | gcc-129d15a3e011dd6f48865673f70396a957c4deff.zip gcc-129d15a3e011dd6f48865673f70396a957c4deff.tar.gz gcc-129d15a3e011dd6f48865673f70396a957c4deff.tar.bz2 |
decl.c (match_attr_spec): Pass on errors from gfc_match_bind_c.
2007-08-22 Janus Weil <jaydub66@gmail.com>
* decl.c (match_attr_spec): Pass on errors from gfc_match_bind_c.
(gfc_match_bind_c): Bugfix in check for NAME= with abstract interfaces.
(gfc_match_mopdproc): Bugfix to reject module procedures in
abstract interfaces.
2007-08-22 Janus Weil <jaydub66@gmail.com>
* interface_abstract_1.f90: Extended test case.
* interface_abstract_3.f90: New test.
From-SVN: r127718
Diffstat (limited to 'gcc/fortran/decl.c')
-rw-r--r-- | gcc/fortran/decl.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index eb1e423..2a80841 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -2549,8 +2549,11 @@ match_attr_spec (void) /* Chomp the comma. */ peek_char = gfc_next_char (); /* Try and match the bind(c). */ - if (gfc_match_bind_c (NULL) == MATCH_YES) + m = gfc_match_bind_c (NULL); + if (m == MATCH_YES) d = DECL_IS_BIND_C; + else if (m == MATCH_ERROR) + goto cleanup; } } @@ -4183,7 +4186,8 @@ gfc_match_bind_c (gfc_symbol *sym) strncpy (sym->binding_label, sym->name, strlen (sym->name) + 1); } - if (has_name_equals && current_interface.type == INTERFACE_ABSTRACT) + if (has_name_equals && gfc_current_state () == COMP_INTERFACE + && current_interface.type == INTERFACE_ABSTRACT) { gfc_error ("NAME not allowed on BIND(C) for ABSTRACT INTERFACE at %C"); return MATCH_ERROR; @@ -5327,7 +5331,8 @@ gfc_match_modproc (void) if (gfc_state_stack->state != COMP_INTERFACE || gfc_state_stack->previous == NULL - || current_interface.type == INTERFACE_NAMELESS) + || current_interface.type == INTERFACE_NAMELESS + || current_interface.type == INTERFACE_ABSTRACT) { gfc_error ("MODULE PROCEDURE at %C must be in a generic module " "interface"); |