Commit d7760318 by Harald Anlauf

PR fortran/95373 - ICE in build_reference_type, at tree.c:7942

The use of KIND, LEN, RE, and IM inquiry references for applicable intrinsic
types is valid only for suffienctly new Fortran standards.  Add appropriate
check.

2020-05-28  Harald Anlauf  <anlauf@gmx.de>

gcc/fortran/
	PR fortran/95373
	* primary.c (is_inquiry_ref): Check validity of inquiry
	references against selected Fortran standard.

gcc/testsuite/
	PR fortran/95373
	* gfortran.dg/pr95373_1.f90: New test.
	* gfortran.dg/pr95373_2.f90: New test.

(cherry picked from commit 5c715e6a2990cfb6c15acc1ee14219523534ec69)
parent 1e20cd1b
......@@ -1998,6 +1998,28 @@ is_inquiry_ref (const char *name, gfc_ref **ref)
else
return false;
switch (type)
{
case INQUIRY_RE:
case INQUIRY_IM:
if (!gfc_notify_std (GFC_STD_F2008, "RE or IM part_ref at %C"))
return false;
break;
case INQUIRY_KIND:
if (!gfc_notify_std (GFC_STD_F2003, "KIND part_ref at %C"))
return false;
break;
case INQUIRY_LEN:
if (!gfc_notify_std (GFC_STD_F2003, "LEN part_ref at %C"))
return false;
break;
default:
gcc_unreachable ();
}
if (ref)
{
*ref = gfc_get_ref ();
......
! { dg-do compile }
! { dg-options "-std=f95" }
! PR fortran/95373 - ICE in build_reference_type, at tree.c:7942
subroutine s (x)
complex, parameter :: z = 3
real(z% kind) :: x ! { dg-error "nonderived-type variable" }
type t
real :: kind
logical :: re
end type t
type(t) :: b
print *, b% kind, b% re
print *, z% re ! { dg-error "nonderived-type variable" }
end
! { dg-do compile }
! { dg-options "-std=f2003" }
! PR fortran/95373 - ICE in build_reference_type, at tree.c:7942
subroutine s (x)
complex, parameter :: z = 3
real(z% kind) :: x
type t
real :: kind
logical :: re
end type t
type(t) :: b
print *, b% kind, b% re
print *, z% re ! { dg-error "nonderived-type variable" }
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment