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
This commit is contained in:
parent
6e588138db
commit
162b5a21ad
6 changed files with 78 additions and 2 deletions
|
@ -1,3 +1,11 @@
|
|||
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;
|
||||
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
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>
|
||||
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
! { 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" } }
|
|
@ -0,0 +1,24 @@
|
|||
! { 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" } }
|
Loading…
Add table
Reference in a new issue