From 384aa890255dc01ba6d6529b127975c2c9a49a3c Mon Sep 17 00:00:00 2001 From: Mark Eggleston Date: Wed, 10 Jun 2020 16:18:23 +0100 Subject: [PATCH] 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 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 gcc/testsuite/ PR fortran/95586 * gfortran.dg/pr95586_1.f90: New test. * gfortran.dg/pr95586_2.f90: New test. --- gcc/fortran/decl.c | 2 +- gcc/testsuite/gfortran.dg/pr95586_1.f90 | 9 +++++++++ gcc/testsuite/gfortran.dg/pr95586_2.f90 | 11 +++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/pr95586_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr95586_2.f90 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index c8a98537e87..c27cfacf2e4 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -4827,7 +4827,7 @@ gfc_match_implicit (void) /* Last chance -- check (). */ 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) diff --git a/gcc/testsuite/gfortran.dg/pr95586_1.f90 b/gcc/testsuite/gfortran.dg/pr95586_1.f90 new file mode 100644 index 00000000000..009eb3e88f0 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr95586_1.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! + +program test + implicit type(t) (1) ! { dg-error "Syntax error" } + type t + end type +end program + diff --git a/gcc/testsuite/gfortran.dg/pr95586_2.f90 b/gcc/testsuite/gfortran.dg/pr95586_2.f90 new file mode 100644 index 00000000000..81ea6e9fa56 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr95586_2.f90 @@ -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 + + -- 2.30.2