diff options
author | Janus Weil <janus@gcc.gnu.org> | 2008-06-02 23:50:23 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2008-06-02 23:50:23 +0200 |
commit | e62532afd777edea4d3eeb1963060f75952319ca (patch) | |
tree | 9408c03560055917d4f9cd80a0cb49ed50dc1761 /gcc/fortran/parse.c | |
parent | 80d7287f402d124caef566cbcbe023ebfab62f28 (diff) | |
download | gcc-e62532afd777edea4d3eeb1963060f75952319ca.zip gcc-e62532afd777edea4d3eeb1963060f75952319ca.tar.gz gcc-e62532afd777edea4d3eeb1963060f75952319ca.tar.bz2 |
re PR fortran/36361 (attribute declaration outside of INTERFACE body)
2008-06-02 Janus Weil <janus@gcc.gnu.org>
PR fortran/36361
* symbol.c (gfc_add_allocatable,gfc_add_dimension,
gfc_add_explicit_interface): Added checks.
* decl.c (attr_decl1): Added missing "var_locus".
* parse.c (parse_interface): Checking for errors.
2008-06-02 Janus Weil <janus@gcc.gnu.org>
PR fortran/36361
* gfortran.dg/interface_24.f90: New.
From-SVN: r136296
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r-- | gcc/fortran/parse.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index dc1a62b..33f13c9 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -1974,23 +1974,18 @@ loop: unexpected_eof (); case ST_SUBROUTINE: - new_state = COMP_SUBROUTINE; - gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY, - gfc_new_block->formal, NULL); - if (current_interface.type != INTERFACE_ABSTRACT && - !gfc_new_block->attr.dummy && - gfc_add_external (&gfc_new_block->attr, &gfc_current_locus) == FAILURE) + case ST_FUNCTION: + if (st == ST_SUBROUTINE) + new_state = COMP_SUBROUTINE; + else if (st == ST_FUNCTION) + new_state = COMP_FUNCTION; + if (gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY, + gfc_new_block->formal, NULL) == FAILURE) { reject_statement (); gfc_free_namespace (gfc_current_ns); goto loop; } - break; - - case ST_FUNCTION: - new_state = COMP_FUNCTION; - gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY, - gfc_new_block->formal, NULL); if (current_interface.type != INTERFACE_ABSTRACT && !gfc_new_block->attr.dummy && gfc_add_external (&gfc_new_block->attr, &gfc_current_locus) == FAILURE) |