aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/parse.c
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2008-06-02 23:50:23 +0200
committerJanus Weil <janus@gcc.gnu.org>2008-06-02 23:50:23 +0200
commite62532afd777edea4d3eeb1963060f75952319ca (patch)
tree9408c03560055917d4f9cd80a0cb49ed50dc1761 /gcc/fortran/parse.c
parent80d7287f402d124caef566cbcbe023ebfab62f28 (diff)
downloadgcc-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.c19
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)