diff options
| author | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-22 21:11:13 +0000 |
|---|---|---|
| committer | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-22 21:11:13 +0000 |
| commit | 5cf92482ca85a7082ee812883bf08cb0b85191a3 (patch) | |
| tree | 173c6a444df12265712ebd7e0ceddf0ff276c15c /gcc | |
| parent | b11ed78dd6dbc5f6796f3f0d51e1b268b0082736 (diff) | |
| download | ppe42-gcc-5cf92482ca85a7082ee812883bf08cb0b85191a3.tar.gz ppe42-gcc-5cf92482ca85a7082ee812883bf08cb0b85191a3.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127718 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
| -rw-r--r-- | gcc/fortran/decl.c | 11 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/gfortran.dg/interface_abstract_1.f90 | 6 | ||||
| -rw-r--r-- | gcc/testsuite/gfortran.dg/interface_abstract_3.f90 | 11 |
5 files changed, 37 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 85e39038c8b..346e81197e9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +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 Kai Tietz <kai.tietz@onevision.com> * f95-lang.c: (gfc_init_decl_processing): Choose sizetype by using diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index eb1e4236a3b..2a80841d5df 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"); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6068fa9db9b..cf9b7edb91e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-08-22 Janus Weil <jaydub66@gmail.com> + + * interface_abstract_1.f90: Extended test case. + * interface_abstract_3.f90: New test. + 2007-08-21 Christian Bruel <christian.bruel@st.com> * gcc.dg/fold-sub.c: New test. diff --git a/gcc/testsuite/gfortran.dg/interface_abstract_1.f90 b/gcc/testsuite/gfortran.dg/interface_abstract_1.f90 index afb3d6a2aac..ab816bff7a1 100644 --- a/gcc/testsuite/gfortran.dg/interface_abstract_1.f90 +++ b/gcc/testsuite/gfortran.dg/interface_abstract_1.f90 @@ -12,4 +12,10 @@ abstract interface subroutine real() ! { dg-error "cannot be the same as an intrinsic type" } end subroutine real end interface + +contains + + subroutine sub() bind(C,name="subC") + end subroutine + end diff --git a/gcc/testsuite/gfortran.dg/interface_abstract_3.f90 b/gcc/testsuite/gfortran.dg/interface_abstract_3.f90 new file mode 100644 index 00000000000..3008d104015 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_abstract_3.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! test for C1204 of Fortran 2003 standard: +! module procedure not allowed in abstract interface +module m + abstract interface + module procedure p ! { dg-error "must be in a generic module interface" } + end interface +contains + subroutine p() + end subroutine +end module m |

