aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/parse.c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@gcc.gnu.org>2007-08-18 16:57:21 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2007-08-18 16:57:21 +0200
commit9e1d712c405048f18f246c974865777971c8be16 (patch)
tree266c365803dbf632341bf1d130d28ed8df05998c /gcc/fortran/parse.c
parenta595913e95d59f64670364c3dea31a4774c960f3 (diff)
downloadgcc-9e1d712c405048f18f246c974865777971c8be16.zip
gcc-9e1d712c405048f18f246c974865777971c8be16.tar.gz
gcc-9e1d712c405048f18f246c974865777971c8be16.tar.bz2
[multiple changes]
2007-08-18 Paul Thomas <pault@gcc.gnu.org> Janus Weil <jaydub66@gmail.com> * interface.c (gfc_match_interface,gfc_match_abstract_interface, gfc_match_end_interface,gfc_add_interface): Add abstract interface. * dump-parse-tree.c (gfc_show_attr): Ditto. * gfortran.h (interface_type,symbol_attribute): Ditto. * module.c (gfc_match_use,ab_attribute,attr_bits, mio_symbol_attribute): Ditto. * resolve.c (resolve_function): Ditto. * match.h: Ditto. * parse.c (decode_statement): Ditto. (parse_interface): Ditto, check for C1203 (name of abstract interface cannot be the same as an intrinsic type). * decl.c (gfc_match_bind_c): Check for NAME= with abstract interfaces. (access_attr_decl): Handle Abstract interfaces. 2007-08-17 Tobias Burnus <burnus@net-b.de> * gfortran.dg/interface_abstract_1.f90: New. From-SVN: r127612
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r--gcc/fortran/parse.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index 4e7e8e1..40b2816 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -172,6 +172,7 @@ decode_statement (void)
switch (c)
{
case 'a':
+ match ("abstract interface", gfc_match_abstract_interface, ST_INTERFACE);
match ("allocate", gfc_match_allocate, ST_ALLOCATE);
match ("allocatable", gfc_match_allocatable, ST_ATTR_DECL);
match ("assign", gfc_match_assign, ST_LABEL_ASSIGNMENT);
@@ -1795,6 +1796,18 @@ loop:
}
}
+ if (current_interface.type == INTERFACE_ABSTRACT)
+ {
+ gfc_new_block->attr.abstract = 1;
+ if (!strcmp(gfc_new_block->name,"integer")
+ || !strcmp(gfc_new_block->name,"real")
+ || !strcmp(gfc_new_block->name,"complex")
+ || !strcmp(gfc_new_block->name,"character")
+ || !strcmp(gfc_new_block->name,"logical"))
+ gfc_error ("Name of ABSTRACT INTERFACE at %C cannot be the same as "
+ "an intrinsic type: %s",gfc_new_block->name);
+ }
+
push_state (&s2, new_state, gfc_new_block);
accept_statement (st);
prog_unit = gfc_new_block;