mirror of git://gcc.gnu.org/git/gcc.git
re PR fortran/62536 (ICE (segfault) for invalid END BLOCK statement)
PR fortran/62536 PR fortran/66175 * decl.c (gfc_match_end): Clean up nested BLOCKs. * parse.c (parse_block_construct): Deal gracefully with cleaned-up BLOCKs. * gfortran.dg/block_end_error_1.f90: New test. * gfortran.dg/blocks_nested_incomplete_1.f90: New test. From-SVN: r227135
This commit is contained in:
parent
2021ff273d
commit
9f7ba2088e
|
|
@ -1,3 +1,11 @@
|
||||||
|
2015-08-24 Louis Krupp <louis.krupp@zoho.com>
|
||||||
|
|
||||||
|
PR fortran/62536
|
||||||
|
PR fortran/66175
|
||||||
|
* decl.c (gfc_match_end): Clean up nested BLOCKs.
|
||||||
|
* parse.c (parse_block_construct): Deal gracefully with cleaned-up
|
||||||
|
BLOCKs.
|
||||||
|
|
||||||
2015-08-23 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
2015-08-23 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
||||||
|
|
||||||
PR libfortran/54572
|
PR libfortran/54572
|
||||||
|
|
|
||||||
|
|
@ -6483,7 +6483,7 @@ cleanup:
|
||||||
/* If we are missing an END BLOCK, we created a half-ready namespace.
|
/* If we are missing an END BLOCK, we created a half-ready namespace.
|
||||||
Remove it from the parent namespace's sibling list. */
|
Remove it from the parent namespace's sibling list. */
|
||||||
|
|
||||||
if (state == COMP_BLOCK)
|
while (state == COMP_BLOCK)
|
||||||
{
|
{
|
||||||
parent_ns = gfc_current_ns->parent;
|
parent_ns = gfc_current_ns->parent;
|
||||||
|
|
||||||
|
|
@ -6506,6 +6506,8 @@ cleanup:
|
||||||
|
|
||||||
gfc_free_namespace (gfc_current_ns);
|
gfc_free_namespace (gfc_current_ns);
|
||||||
gfc_current_ns = parent_ns;
|
gfc_current_ns = parent_ns;
|
||||||
|
gfc_state_stack = gfc_state_stack->previous;
|
||||||
|
state = gfc_current_state ();
|
||||||
}
|
}
|
||||||
|
|
||||||
return MATCH_ERROR;
|
return MATCH_ERROR;
|
||||||
|
|
|
||||||
|
|
@ -3935,6 +3935,7 @@ static void
|
||||||
parse_block_construct (void)
|
parse_block_construct (void)
|
||||||
{
|
{
|
||||||
gfc_namespace* my_ns;
|
gfc_namespace* my_ns;
|
||||||
|
gfc_namespace* my_parent;
|
||||||
gfc_state_data s;
|
gfc_state_data s;
|
||||||
|
|
||||||
gfc_notify_std (GFC_STD_F2008, "BLOCK construct at %C");
|
gfc_notify_std (GFC_STD_F2008, "BLOCK construct at %C");
|
||||||
|
|
@ -3948,10 +3949,14 @@ parse_block_construct (void)
|
||||||
|
|
||||||
push_state (&s, COMP_BLOCK, my_ns->proc_name);
|
push_state (&s, COMP_BLOCK, my_ns->proc_name);
|
||||||
gfc_current_ns = my_ns;
|
gfc_current_ns = my_ns;
|
||||||
|
my_parent = my_ns->parent;
|
||||||
|
|
||||||
parse_progunit (ST_NONE);
|
parse_progunit (ST_NONE);
|
||||||
|
|
||||||
gfc_current_ns = gfc_current_ns->parent;
|
/* Don't depend on the value of gfc_current_ns; it might have been
|
||||||
|
reset if the block had errors and was cleaned up. */
|
||||||
|
gfc_current_ns = my_parent;
|
||||||
|
|
||||||
pop_state ();
|
pop_state ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,10 @@
|
||||||
|
2015-08-24 Louis Krupp <louis.krupp@zoho.com>
|
||||||
|
|
||||||
|
PR fortran/62536
|
||||||
|
PR fortran/66175
|
||||||
|
* gfortran.dg/block_end_error_1.f90: New test.
|
||||||
|
* gfortran.dg/blocks_nested_incomplete_1.f90: New test.
|
||||||
|
|
||||||
2015-08-24 H.J. Lu <hongjiu.lu@intel.com>
|
2015-08-24 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR target/66821
|
PR target/66821
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
! { dg-do compile }
|
||||||
|
!
|
||||||
|
! PR fortran/62536
|
||||||
|
! Bad "end block" causes ICE.
|
||||||
|
subroutine s
|
||||||
|
block
|
||||||
|
end block named ! { dg-error "Syntax error in END BLOCK statement" }
|
||||||
|
return
|
||||||
|
endsubroutine
|
||||||
|
! { dg-prune-output "Unexpected end of file" }
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
! { dg-do compile }
|
||||||
|
!
|
||||||
|
! PR fortran/66175
|
||||||
|
! Nested incomplete blocks cause ICE.
|
||||||
|
program main
|
||||||
|
block
|
||||||
|
block
|
||||||
|
end program ! { dg-error "Expecting END BLOCK statement" }
|
||||||
|
! { dg-prune-output "Unexpected end of file" }
|
||||||
Loading…
Reference in New Issue