Fix ICE and improve errors for invalid anonymous structure declarations.
PR fortran/78277 * gcc/fortran/decl.c (gfc_match_data_decl): Gracefully handle bad anonymous structure declarations. PR fortran/78277 * gcc/testsuite/gfortran.dg/dec_structure_17.f90: New test. From-SVN: r242058
This commit is contained in:
parent
05b8fcb4d2
commit
9490321264
4 changed files with 60 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2016-11-10 Fritz O. Reese <fritzoreese@gmail.com>
|
||||
|
||||
PR fortran/78277
|
||||
* gcc/fortran/decl.c (gfc_match_data_decl): Gracefully handle bad
|
||||
anonymous structure declarations.
|
||||
|
||||
2016-11-10 Fritz O. Reese <fritzoreese@gmail.com>
|
||||
|
||||
* decl.c (get_struct_decl, gfc_match_map, gfc_match_union): Fix
|
||||
|
|
|
@ -4901,7 +4901,28 @@ ok:
|
|||
}
|
||||
|
||||
if (!gfc_error_flag_test ())
|
||||
gfc_error ("Syntax error in data declaration at %C");
|
||||
{
|
||||
/* An anonymous structure declaration is unambiguous; if we matched one
|
||||
according to gfc_match_structure_decl, we need to return MATCH_YES
|
||||
here to avoid confusing the remaining matchers, even if there was an
|
||||
error during variable_decl. We must flush any such errors. Note this
|
||||
causes the parser to gracefully continue parsing the remaining input
|
||||
as a structure body, which likely follows. */
|
||||
if (current_ts.type == BT_DERIVED && current_ts.u.derived
|
||||
&& gfc_fl_struct (current_ts.u.derived->attr.flavor))
|
||||
{
|
||||
gfc_error_now ("Syntax error in anonymous structure declaration"
|
||||
" at %C");
|
||||
/* Skip the bad variable_decl and line up for the start of the
|
||||
structure body. */
|
||||
gfc_error_recovery ();
|
||||
m = MATCH_YES;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
gfc_error ("Syntax error in data declaration at %C");
|
||||
}
|
||||
|
||||
m = MATCH_ERROR;
|
||||
|
||||
gfc_free_data_all (gfc_current_ns);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-11-10 Fritz O. Reese <fritzoreese@gmail.com>
|
||||
|
||||
PR fortran/78277
|
||||
* gfortran.dg/dec_structure_17.f90: New test.
|
||||
|
||||
2016-11-10 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||
|
||||
* gcc.target/powerpc/vsx-qimode.c: New test for QImode, HImode
|
||||
|
|
27
gcc/testsuite/gfortran.dg/dec_structure_17.f90
Normal file
27
gcc/testsuite/gfortran.dg/dec_structure_17.f90
Normal file
|
@ -0,0 +1,27 @@
|
|||
! { dg-do compile }
|
||||
! { dg-options "-fdec-structure" }
|
||||
!
|
||||
! PR fortran/78277
|
||||
!
|
||||
! Fix ICE for invalid structure declaration code.
|
||||
!
|
||||
|
||||
subroutine sub1()
|
||||
structure /s/
|
||||
structure t
|
||||
integer i
|
||||
end structure
|
||||
end structure
|
||||
record /s/ u
|
||||
interface
|
||||
subroutine sub0(u)
|
||||
structure /s/
|
||||
structure t. ! { dg-error "Syntax error in anonymous structure decl" }
|
||||
integer i
|
||||
end structure
|
||||
end structure
|
||||
record /s/ u
|
||||
end
|
||||
end interface
|
||||
call sub0(u)
|
||||
end
|
Loading…
Add table
Reference in a new issue