From: Thomas Koenig Date: Tue, 26 Jan 2021 11:26:54 +0000 (+0100) Subject: Commit test case for PR 67539. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=80198c701a7fc09e736ccffe470ee5033ca59a69;p=gcc.git Commit test case for PR 67539. gcc/testsuite/ChangeLog: PR fortran/67539 * gfortran.dg/elemental_assignment_1.f90: New test. --- 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