re PR fortran/68319 (ICE on using interface with included entry)
2015-11-13 Steven G. Kargl <kargl@gccc.gnu.org> PR fortran/68319 * decl.c (gfc_match_data, gfc_match_entry): Enforce F2008:C1206. * io.c (gfc_match_format): Ditto. * match.c (gfc_match_st_function): Ditto. 2015-11-13 Steven G. Kargl <kargl@gccc.gnu.org> PR fortran/68319 * gfortran.dg/pr68319.f90: New test. From-SVN: r230351
This commit is contained in:
parent
ae66757f23
commit
5f0ba74583
6 changed files with 72 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
|||
2015-11-13 Steven G. Kargl <kargl@gccc.gnu.org>
|
||||
|
||||
PR fortran/68319
|
||||
* decl.c (gfc_match_data, gfc_match_entry): Enforce F2008:C1206.
|
||||
* io.c (gfc_match_format): Ditto.
|
||||
* match.c (gfc_match_st_function): Ditto.
|
||||
|
||||
2015-11-13 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* error.c (gfc_warning): Pass line_table to rich_location ctor.
|
||||
|
|
|
@ -552,6 +552,15 @@ gfc_match_data (void)
|
|||
gfc_data *new_data;
|
||||
match m;
|
||||
|
||||
/* Before parsing the rest of a DATA statement, check F2008:c1206. */
|
||||
if ((gfc_current_state () == COMP_FUNCTION
|
||||
|| gfc_current_state () == COMP_SUBROUTINE)
|
||||
&& gfc_state_stack->previous->state == COMP_INTERFACE)
|
||||
{
|
||||
gfc_error ("DATA statement at %C cannot appear within an INTERFACE");
|
||||
return MATCH_ERROR;
|
||||
}
|
||||
|
||||
set_in_match_data (true);
|
||||
|
||||
for (;;)
|
||||
|
@ -5767,6 +5776,13 @@ gfc_match_entry (void)
|
|||
return MATCH_ERROR;
|
||||
}
|
||||
|
||||
if ((state == COMP_SUBROUTINE || state == COMP_FUNCTION)
|
||||
&& gfc_state_stack->previous->state == COMP_INTERFACE)
|
||||
{
|
||||
gfc_error ("ENTRY statement at %C cannot appear within an INTERFACE");
|
||||
return MATCH_ERROR;
|
||||
}
|
||||
|
||||
module_procedure = gfc_current_ns->parent != NULL
|
||||
&& gfc_current_ns->parent->proc_name
|
||||
&& gfc_current_ns->parent->proc_name->attr.flavor
|
||||
|
|
|
@ -1199,6 +1199,15 @@ gfc_match_format (void)
|
|||
return MATCH_ERROR;
|
||||
}
|
||||
|
||||
/* Before parsing the rest of a FORMAT statement, check F2008:c1206. */
|
||||
if ((gfc_current_state () == COMP_FUNCTION
|
||||
|| gfc_current_state () == COMP_SUBROUTINE)
|
||||
&& gfc_state_stack->previous->state == COMP_INTERFACE)
|
||||
{
|
||||
gfc_error ("FORMAT statement at %C cannot appear within an INTERFACE");
|
||||
return MATCH_ERROR;
|
||||
}
|
||||
|
||||
if (gfc_statement_label == NULL)
|
||||
{
|
||||
gfc_error ("Missing format label at %C");
|
||||
|
|
|
@ -4913,6 +4913,15 @@ gfc_match_st_function (void)
|
|||
|
||||
sym->value = expr;
|
||||
|
||||
if ((gfc_current_state () == COMP_FUNCTION
|
||||
|| gfc_current_state () == COMP_SUBROUTINE)
|
||||
&& gfc_state_stack->previous->state == COMP_INTERFACE)
|
||||
{
|
||||
gfc_error ("Statement function at %L cannot appear within an INTERFACE",
|
||||
&expr->where);
|
||||
return MATCH_ERROR;
|
||||
}
|
||||
|
||||
if (!gfc_notify_std (GFC_STD_F95_OBS, "Statement function at %C"))
|
||||
return MATCH_ERROR;
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-11-13 Steven G. Kargl <kargl@gccc.gnu.org>
|
||||
|
||||
PR fortran/68319
|
||||
* gfortran.dg/pr68319.f90: New test.
|
||||
|
||||
2015-11-13 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||
|
||||
* gcc.target/powerpc/float128-hw.c: New test for IEEE 128-bit
|
||||
|
|
26
gcc/testsuite/gfortran.dg/pr68319.f90
Normal file
26
gcc/testsuite/gfortran.dg/pr68319.f90
Normal file
|
@ -0,0 +1,26 @@
|
|||
! { dg-do compile }
|
||||
! PR fortran/68319
|
||||
!
|
||||
subroutine foo
|
||||
|
||||
interface
|
||||
|
||||
real function bar(i)
|
||||
f(i) = 2 * i ! { dg-error "cannot appear within" }
|
||||
end function bar
|
||||
|
||||
real function bah(j)
|
||||
entry boo(j) ! { dg-error "cannot appear within" }
|
||||
end function bah
|
||||
|
||||
real function fu(j)
|
||||
data i /1/ ! { dg-error "cannot appear within" }
|
||||
end function fu
|
||||
|
||||
real function fee(j)
|
||||
10 format('(A)') ! { dg-error "cannot appear within" }
|
||||
end function fee
|
||||
|
||||
end interface
|
||||
|
||||
end subroutine foo
|
Loading…
Add table
Reference in a new issue