diff options
author | Tobias Burnus <burnus@gcc.gnu.org> | 2007-08-18 16:57:21 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2007-08-18 16:57:21 +0200 |
commit | 9e1d712c405048f18f246c974865777971c8be16 (patch) | |
tree | 266c365803dbf632341bf1d130d28ed8df05998c /gcc/fortran/parse.c | |
parent | a595913e95d59f64670364c3dea31a4774c960f3 (diff) | |
download | gcc-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.c | 13 |
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; |