Fortran : ICE in gfc_validate_kind PR95586

Report syntax error for invalid letter-spec in IMPLICIT statements
for derived types and not an ICE.

Original patch by Steve Kargl.  Added test cases based on those
provided by G. Steinmetz  in the PR.

2020-06-23  Steven G. Kargl  <kargl@gcc.gnu.org>

gcc/fortran/

	PR fortran/95586
	* decl.c (gfc_match_implicit): Only perform else branch if
	the type spect is not BT_DERIVED.

2020-06-23  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

	PR fortran/95586
	* gfortran.dg/pr95586_1.f90: New test.
	* gfortran.dg/pr95586_2.f90: New test.
This commit is contained in:
Mark Eggleston 2020-06-10 16:18:23 +01:00
parent 605a8f3bbc
commit 384aa89025
3 changed files with 21 additions and 1 deletions

View File

@ -4827,7 +4827,7 @@ gfc_match_implicit (void)
/* Last chance -- check <TYPE> <SELECTOR> (<RANGE>). */
if (ts.type == BT_CHARACTER)
m = gfc_match_char_spec (&ts);
else
else if (ts.type != BT_DERIVED)
{
m = gfc_match_kind_spec (&ts, false);
if (m == MATCH_NO)

View File

@ -0,0 +1,9 @@
! { dg-do compile }
!
program test
implicit type(t) (1) ! { dg-error "Syntax error" }
type t
end type
end program

View File

@ -0,0 +1,11 @@
! { dg-do compile }
!
program test
integer, parameter :: n1 = 1
implicit type(t) (n1) ! { dg-error "Syntax error" }
type t
end type
end program