Dear Fortranners, Steve,

I've created PR 102917 for tracking this issue and packaged
the attached patch.

Regtested on x86_64-pc-linux-gnu.  OK mainline?

Thanks,
Harald

> Gesendet: Freitag, 22. Oktober 2021 um 22:25 Uhr
> Von: "Steve Kargl" <s...@troutmask.apl.washington.edu>
> An: "Harald Anlauf" <anl...@gmx.de>
> Cc: fortran@gcc.gnu.org
> Betreff: Re: PDT type parameters are not restricted to default integer
>
> On Fri, Oct 22, 2021 at 10:16:05PM +0200, Harald Anlauf wrote:
> > Hi Steve,
> >
> > Am 22.10.21 um 21:35 schrieb Steve Kargl via Fortran:
> > > Here's an obvious quick fix.  Please apply.
> > >
> > >
> > > diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
> > > index 6043e100fbb..e889bb44142 100644
> > > --- a/gcc/fortran/decl.c
> > > +++ b/gcc/fortran/decl.c
> > > @@ -5619,14 +5619,6 @@ match_attr_spec (void)
> > >                     m = MATCH_ERROR;
> > >                     goto cleanup;
> > >                   }
> > > -       if (current_ts.kind != gfc_default_integer_kind)
> > > -         {
> > > -           gfc_error ("Component with LEN attribute at %C must be "
> > > -                      "default integer kind (%d)",
> > > -                       gfc_default_integer_kind);
> > > -           m = MATCH_ERROR;
> > > -           goto cleanup;
> > > -         }
> > >               }
> > >             else
> > >               {
> >
> > I think you are right.  We should always have allowed any integer kind.
> >
> > However, have you checked whether this change introduces regressions?
> > If you don't, somebody else will.  Please open a PR, then.
> >
>
> It seems that pdt_4.f03 will fail with the above patch because
> it explicitly tests for this error message.  That's the only
> failure in the testsuite.  For the record, F2003, page 48,
>
>    R435 type-param-def-stmt  is INTEGER [ kind-selector ] , ...
>
>    Each type parameter is itself of type integer.  If its kind selector
>    is omitted, the kind type parameter is default integer.
>
> Now that I think about and look, there is a nearby similar gcc_error()
> for KIND.  This should be removed too.
>
> --
> Steve
>
Fortran: do not restrict PDT KIND and LEN type parameters to default integer

gcc/fortran/ChangeLog:

	PR fortran/102917
	* decl.c (match_attr_spec): Remove invalid integer kind checks on
	KIND and LEN attributes of PDTs.

gcc/testsuite/ChangeLog:

	PR fortran/102917
	* gfortran.dg/pdt_4.f03: Adjust testcase.

diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index 6043e100fbb..ce61e53eb7b 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -5592,14 +5592,6 @@ match_attr_spec (void)
 		  m = MATCH_ERROR;
 		  goto cleanup;
 		}
-	      if (current_ts.kind != gfc_default_integer_kind)
-		{
-		  gfc_error ("Component with KIND attribute at %C must be "
-			     "default integer kind (%d)",
-			      gfc_default_integer_kind);
-		  m = MATCH_ERROR;
-		  goto cleanup;
-		}
 	    }
 	  else if (d == DECL_LEN)
 	    {
@@ -5619,14 +5611,6 @@ match_attr_spec (void)
 		  m = MATCH_ERROR;
 		  goto cleanup;
 		}
-	      if (current_ts.kind != gfc_default_integer_kind)
-		{
-		  gfc_error ("Component with LEN attribute at %C must be "
-			     "default integer kind (%d)",
-			      gfc_default_integer_kind);
-		  m = MATCH_ERROR;
-		  goto cleanup;
-		}
 	    }
 	  else
 	    {
diff --git a/gcc/testsuite/gfortran.dg/pdt_4.f03 b/gcc/testsuite/gfortran.dg/pdt_4.f03
index c1af65a5248..37412e4ca82 100644
--- a/gcc/testsuite/gfortran.dg/pdt_4.f03
+++ b/gcc/testsuite/gfortran.dg/pdt_4.f03
@@ -28,9 +28,9 @@ end module

   type :: bad_pdt (a,b, c, d)  ! { dg-error "does not have a component" }
     real, kind :: a            ! { dg-error "must be INTEGER" }
-    INTEGER(8), kind :: b      ! { dg-error "be default integer kind" }
+    INTEGER(8), kind :: b
     real, LEN :: c             ! { dg-error "must be INTEGER" }
-    INTEGER(8), LEN :: d       ! { dg-error "be default integer kind" }
+    INTEGER(8), LEN :: d
   end type

   type :: mytype (a,b)

Reply via email to