diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2024-04-09 15:27:28 +0100 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2024-04-09 15:27:28 +0100 |
commit | de82b0cf981e49a0bda957c0ac31146b17407e23 (patch) | |
tree | da23c993c38776d709e35ea14eed156a68e6a52f /gcc/testsuite/gfortran.dg | |
parent | 88aea122a7ee639230bf17a9eda4bf8a5eb7e282 (diff) | |
download | gcc-de82b0cf981e49a0bda957c0ac31146b17407e23.zip gcc-de82b0cf981e49a0bda957c0ac31146b17407e23.tar.gz gcc-de82b0cf981e49a0bda957c0ac31146b17407e23.tar.bz2 |
Fortran: Fix ICE in trans-stmt.cc(gfc_trans_call) [PR114535]
2024-04-09 Paul Thomas <pault@gcc.gnu.org>
gcc/fortran
PR fortran/114535
* resolve.cc (resolve_symbol): Remove last chunk that checked
for finalization of unreferenced symbols.
gcc/testsuite/
PR fortran/114535
* gfortran.dg/pr114535d.f90: New test.
* gfortran.dg/pr114535iv.f90: Additional source.
Diffstat (limited to 'gcc/testsuite/gfortran.dg')
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr114535d.f90 | 42 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr114535iv.f90 | 18 |
2 files changed, 60 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/pr114535d.f90 b/gcc/testsuite/gfortran.dg/pr114535d.f90 new file mode 100644 index 0000000..7ce178a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr114535d.f90 @@ -0,0 +1,42 @@ +! { dg-do compile } +! { dg-compile-aux-modules "pr114535iv.f90" } +! Contributed by Andrew Benson <abensonca@gcc.gnu.org> +! +module d + implicit none +contains + function en() result(dd) + use :: iv + implicit none + type(vs) :: dd + dd%i = 1 + end function en +end module d + +! Delete line 1 and all brands complain that 'vs' is an undefined type. +! Delete lines 1 and line 2 recreates the original problem. +module ni + implicit none +contains + subroutine iss1() +! use :: iv ! line 1 + use :: d + implicit none +! type(vs) :: ans; ans = en(); ! line 2 + end subroutine iss1 + subroutine iss2() + use :: d + implicit none + end subroutine iss2 +end module ni ! Used to give an ICE: in gfc_trans_call, at fortran/trans-stmt.cc:400 + + use ni + use iv + type(vs) :: x + call iss1() + call iss1() + if ((ctr .eq. 0) .or. (ctr .ne. 6)) stop 1 ! Depends whether lines 1 & 2 are present + call iss2() + x = vs(42) + if ((ctr .eq. 1) .or. (ctr .ne. 7)) stop 2 ! Make sure destructor available here +end diff --git a/gcc/testsuite/gfortran.dg/pr114535iv.f90 b/gcc/testsuite/gfortran.dg/pr114535iv.f90 new file mode 100644 index 0000000..be62999 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr114535iv.f90 @@ -0,0 +1,18 @@ +! Compiled with pr114535d.f90 +! Contributed by Andrew Benson <abensonca@gcc.gnu.org> +! +module iv + type, public :: vs + integer :: i + contains + final :: destructor + end type vs + integer :: ctr = 0 +contains + impure elemental subroutine destructor(s) + type(vs), intent(inout) :: s + s%i = 0 + ctr = ctr + 1 + end subroutine destructor +end module iv + |