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>
|
||||
|
||||
PR libfortran/54572
|
||||
|
@ -6483,7 +6483,7 @@ cleanup:
|
||||
/* If we are missing an END BLOCK, we created a half-ready namespace.
|
||||
Remove it from the parent namespace's sibling list. */
|
||||
|
||||
if (state == COMP_BLOCK)
|
||||
while (state == COMP_BLOCK)
|
||||
{
|
||||
parent_ns = gfc_current_ns->parent;
|
||||
|
||||
@ -6506,6 +6506,8 @@ cleanup:
|
||||
|
||||
gfc_free_namespace (gfc_current_ns);
|
||||
gfc_current_ns = parent_ns;
|
||||
gfc_state_stack = gfc_state_stack->previous;
|
||||
state = gfc_current_state ();
|
||||
}
|
||||
|
||||
return MATCH_ERROR;
|
||||
|
@ -3935,6 +3935,7 @@ static void
|
||||
parse_block_construct (void)
|
||||
{
|
||||
gfc_namespace* my_ns;
|
||||
gfc_namespace* my_parent;
|
||||
gfc_state_data s;
|
||||
|
||||
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);
|
||||
gfc_current_ns = my_ns;
|
||||
my_parent = my_ns->parent;
|
||||
|
||||
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 ();
|
||||
}
|
||||
|
||||
|
@ -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>
|
||||
|
||||
PR target/66821
|
||||
|
10
gcc/testsuite/gfortran.dg/block_end_error_1.f90
Normal file
10
gcc/testsuite/gfortran.dg/block_end_error_1.f90
Normal file
@ -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" }
|
9
gcc/testsuite/gfortran.dg/blocks_nested_incomplete_1.f90
Normal file
9
gcc/testsuite/gfortran.dg/blocks_nested_incomplete_1.f90
Normal 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…
x
Reference in New Issue
Block a user