Commit 162b5a21 by Steven G. Kargl

re PR fortran/49265 (Double colon in procedure-stmt (generic interface))

2011-06-02  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/49265
	* decl.c (gfc_match_modproc):  Allow for a double colon in a module
	procedure statement.
	* parse.c ( decode_statement): Deal with whitespace around :: in
	gfc_match_modproc.
 
2011-06-02  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/49265
	* gfortran.dg/module_procedure_double_colon_1.f90: New test.
	* gfortran.dg/module_procedure_double_colon_2.f90: New test.

From-SVN: r174569
parent 6e588138
2011-06-02 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/49265
* decl.c (gfc_match_modproc): Allow for a double colon in a module
procedure statement.
* parse.c ( decode_statement): Deal with whitespace around :: in
gfc_match_modproc.
2011-05-31 Tobias Burnus <burnus@net-b.de>
PR fortran/18918
......
......@@ -7016,6 +7016,7 @@ gfc_match_modproc (void)
char name[GFC_MAX_SYMBOL_LEN + 1];
gfc_symbol *sym;
match m;
locus old_locus;
gfc_namespace *module_ns;
gfc_interface *old_interface_head, *interface;
......@@ -7044,10 +7045,23 @@ gfc_match_modproc (void)
end up with a syntax error and need to recover. */
old_interface_head = gfc_current_interface_head ();
/* Check if the F2008 optional double colon appears. */
gfc_gobble_whitespace ();
old_locus = gfc_current_locus;
if (gfc_match ("::") == MATCH_YES)
{
if (gfc_notify_std (GFC_STD_F2008, "Fortran 2008: double colon in "
"MODULE PROCEDURE statement at %L", &old_locus)
== FAILURE)
return MATCH_ERROR;
}
else
gfc_current_locus = old_locus;
for (;;)
{
locus old_locus = gfc_current_locus;
bool last = false;
old_locus = gfc_current_locus;
m = gfc_match_name (name);
if (m == MATCH_NO)
......@@ -7059,6 +7073,7 @@ gfc_match_modproc (void)
current namespace. */
if (gfc_match_eos () == MATCH_YES)
last = true;
if (!last && gfc_match_char (',') != MATCH_YES)
goto syntax;
......
......@@ -399,7 +399,7 @@ decode_statement (void)
break;
case 'm':
match ("module% procedure% ", gfc_match_modproc, ST_MODULE_PROC);
match ("module% procedure", gfc_match_modproc, ST_MODULE_PROC);
match ("module", gfc_match_module, ST_MODULE);
break;
......
2011-06-02 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/49265
* gfortran.dg/module_procedure_double_colon_1.f90: New test.
* gfortran.dg/module_procedure_double_colon_2.f90: New test.
2011-06-02 Eric Botcazou <ebotcazou@adacore.com>
Hans-Peter Nilsson <hp@axis.com>
......
! { dg-do compile }
!
! PR fortran/49265
! Contributed by Erik Toussaint
!
module m1
implicit none
interface foo
module procedure::bar
module procedure ::bar_none
module procedure:: none_bar
end interface
contains
subroutine bar
end subroutine
subroutine bar_none(i)
integer i
end subroutine
subroutine none_bar(x)
real x
end subroutine
end module
! { dg-final { cleanup-modules "m1" } }
! { dg-do compile }
! { dg-options "-std=f95" }
!
! PR fortran/49265
! Contributed by Erik Toussaint
!
module m1
implicit none
interface foo
module procedure::bar ! { dg-error "double colon" }
module procedure ::bar_none ! { dg-error "double colon" }
module procedure:: none_bar ! { dg-error "double colon" }
end interface
contains
subroutine bar
end subroutine
subroutine bar_none(i)
integer i
end subroutine
subroutine none_bar(x)
real x
end subroutine
end module
! { dg-final { cleanup-modules "m1" } }
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