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:
parent
cf12a703cf
commit
d870ce1a11
|
@ -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
|
Loading…
Reference in New Issue