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>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user