From 80198c701a7fc09e736ccffe470ee5033ca59a69 Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Tue, 26 Jan 2021 12:26:54 +0100 Subject: [PATCH] Commit test case for PR 67539. gcc/testsuite/ChangeLog: PR fortran/67539 * gfortran.dg/elemental_assignment_1.f90: New test. --- .../gfortran.dg/elemental_assignment_1.f90 | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/elemental_assignment_1.f90 diff --git a/gcc/testsuite/gfortran.dg/elemental_assignment_1.f90 b/gcc/testsuite/gfortran.dg/elemental_assignment_1.f90 new file mode 100644 index 00000000000..23d764313b2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/elemental_assignment_1.f90 @@ -0,0 +1,59 @@ +! { dg-do run } +! PR 67539 - this used to give a segfault at runtime. +! Test case by "mrestelli". + +module m + implicit none + + type :: t_a + real, allocatable :: x + end type t_a + + interface assignment(=) + module procedure copy_t_a + end interface + +contains + + elemental subroutine copy_t_a(y,x) + type(t_a), intent(in) :: x + type(t_a), intent(out) :: y + allocate( y%x , source=x%x ) + end subroutine copy_t_a + + elemental function new_t_a(x) result(res) + real, intent(in) :: x + type(t_a) :: res + allocate( res%x ) + res%x = x + end function new_t_a + +end module m + + +program p + use m + implicit none + + integer :: i + type(t_a) :: tmp + type(t_a), allocatable :: v(:) + + allocate( v(2) ) + + v = new_t_a(1.5) ! -> segmentation fault + + !tmp = new_t_a(1.5) ! -> OK + !v = tmp + + !do i=1,size(v) ! -> also OK + ! v(i) = new_t_a(1.5) + !enddo + + do i=1,size(v) + write(*,*) " i = ",i + write(*,*) allocated(v(i)%x) + write(*,*) v(i)%x + enddo + +end program p -- 2.30.2