diff mbox series

Fortran : ICE in gfc_validate_kind PR96099

Message ID 0ae4999a-3814-7e25-705c-23058c6c3ecf@codethink.co.uk
State New
Headers show
Series Fortran : ICE in gfc_validate_kind PR96099 | expand

Commit Message

Mark Eggleston Oct. 2, 2020, 5:51 a.m. UTC
This is a follow up to PR95586 which fixed only the ICE that occurred 
when using derived types in an implicit statement.  The ICE occurred 
because an attempt was made to determine kind for types that do not have 
kinds.

This patch ensures that kind is only determined for types that support kind.

OK for master?

Is it worth backporting?

[PATCH] Fortran  : ICE in gfc_validate_kind PR96099

Only check for kind if the type supports kind.

2020-10-02  Mark Eggleston <markeggleston@gcc.gnu.org>

/gcc/fortran

     PR fortran/96099
     * decl.c (gfc_match_implicit): Check for numeric and logical
     types.

2020-10-02  Mark Eggleston <markeggleston@gcc.gnu.org>

/gcc/testsuite

     PR fortran/96099
     * gfortran.dg/pr96099_1.f90: New test.
     * gfortran.dg/pr96099_2.f90: New test.

Comments

Thomas Koenig Oct. 4, 2020, 10:33 a.m. UTC | #1
Hi Mark,

> This is a follow up to PR95586 which fixed only the ICE that occurred 
> when using derived types in an implicit statement.  The ICE occurred 
> because an attempt was made to determine kind for types that do not have 
> kinds.
> 
> This patch ensures that kind is only determined for types that support 
> kind.
> 
> OK for master?

OK.

> Is it worth backporting?

As an ICE on invalid for quite a special case, I'd say probably
not.

Thanks for the patch!

Best regards

	Thomas
diff mbox series

Patch

From 8770d2c3f599f8e758747b606613ae53f0b26bc9 Mon Sep 17 00:00:00 2001
From: Mark Eggleston <markeggleston@gcc.gnu.org>
Date: Thu, 1 Oct 2020 11:14:09 +0100
Subject: [PATCH] Fortran  : ICE in gfc_validate_kind PR96099

Only check for kind if the type supports kind.

2020-10-02  Mark Eggleston  <markeggleston@gcc.gnu.org>

/gcc/fortran

	PR fortran/96099
	* decl.c (gfc_match_implicit): Check for numeric and logical
	types.

2020-10-02  Mark Eggleston  <markeggleston@gcc.gnu.org>

/gcc/testsuite

	PR fortran/96099
	* gfortran.dg/pr96099_1.f90: New test.
	* gfortran.dg/pr96099_2.f90: New test.
---
 gcc/fortran/decl.c                      | 2 +-
 gcc/testsuite/gfortran.dg/pr96099_1.f90 | 8 ++++++++
 gcc/testsuite/gfortran.dg/pr96099_2.f90 | 9 +++++++++
 3 files changed, 18 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gfortran.dg/pr96099_1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/pr96099_2.f90

diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index 326e6f5db7a..bddf69cce19 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -4835,7 +4835,7 @@  gfc_match_implicit (void)
       /* Last chance -- check <TYPE> <SELECTOR> (<RANGE>).  */
       if (ts.type == BT_CHARACTER)
 	m = gfc_match_char_spec (&ts);
-      else if (ts.type != BT_DERIVED)
+      else if (gfc_numeric_ts(&ts) || ts.type == BT_LOGICAL)
 	{
 	  m = gfc_match_kind_spec (&ts, false);
 	  if (m == MATCH_NO)
diff --git a/gcc/testsuite/gfortran.dg/pr96099_1.f90 b/gcc/testsuite/gfortran.dg/pr96099_1.f90
new file mode 100644
index 00000000000..9754bd39dfc
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr96099_1.f90
@@ -0,0 +1,8 @@ 
+! { dg-do compile }
+
+program pr96099_1
+   implicit class(t) (1) ! { dg-error "Syntax error in IMPLICIT" }
+   type t
+   end type
+end
+
diff --git a/gcc/testsuite/gfortran.dg/pr96099_2.f90 b/gcc/testsuite/gfortran.dg/pr96099_2.f90
new file mode 100644
index 00000000000..3136d2ef377
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr96099_2.f90
@@ -0,0 +1,9 @@ 
+! { dg-do compile }
+
+program pr96099_2
+   integer n1
+   parameter (n1 = 1)
+   implicit class(t) (n1) ! { dg-error "Syntax error in IMPLICIT" }
+   type t
+   end type
+end
-- 
2.11.0