Commit 129d15a3 by Janus Weil Committed by Tobias Burnus

decl.c (match_attr_spec): Pass on errors from gfc_match_bind_c.

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.

From-SVN: r127718
parent f11b2351
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
......
......@@ -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");
......
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.
......@@ -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
! { 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment