Fortran: error recovery on invalid CLASS(), PARAMETER declarations [PR105243]

gcc/fortran/ChangeLog:

	PR fortran/103137
	PR fortran/103138
	PR fortran/103693
	PR fortran/105243
	* decl.cc (gfc_match_data_decl): Reject CLASS entity declaration
	when it is given the PARAMETER attribute.

gcc/testsuite/ChangeLog:

	PR fortran/103137
	PR fortran/103138
	PR fortran/103693
	PR fortran/105243
	* gfortran.dg/class_58.f90: Fix test.
	* gfortran.dg/class_73.f90: New test.

Co-authored-by: Steven G. Kargl <kargl@gcc.gnu.org>
(cherry picked from commit 4c233cabbe)
This commit is contained in:
Harald Anlauf 2022-06-29 21:36:17 +02:00
parent cf12a703cf
commit d870ce1a11
3 changed files with 26 additions and 1 deletions

View File

@ -6262,6 +6262,14 @@ gfc_match_data_decl (void)
goto cleanup;
}
/* F2018:C708. */
if (current_ts.type == BT_CLASS && current_attr.flavor == FL_PARAMETER)
{
gfc_error ("CLASS entity at %C cannot have the PARAMETER attribute");
m = MATCH_ERROR;
goto cleanup;
}
if (current_ts.type == BT_CLASS
&& current_ts.u.derived->attr.unlimited_polymorphic)
goto ok;

View File

@ -9,5 +9,5 @@ subroutine s
end type
class(t), parameter :: x = t() ! { dg-error "cannot have the PARAMETER attribute" }
class(t), parameter :: y = x ! { dg-error "cannot have the PARAMETER attribute" }
class(t) :: z = x ! { dg-error "must be dummy, allocatable or pointer" }
class(t) :: z = t() ! { dg-error "must be dummy, allocatable or pointer" }
end

View File

@ -0,0 +1,17 @@
! { dg-do compile }
! Error recovery on invalid CLASS(), PARAMETER declarations
! PR fortran/103137
! PR fortran/103138
! PR fortran/103693
! PR fortran/105243
! Contributed by G.Steinmetz
program p
type t
character(3) :: c = '(a)'
end type
class(t), parameter :: x = 1. ! { dg-error "PARAMETER attribute" }
class(*), parameter :: y = t() ! { dg-error "PARAMETER attribute" }
class(*), parameter :: z = 1 ! { dg-error "PARAMETER attribute" }
print x%c ! { dg-error "Syntax error" }
end