diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2021-01-26 12:26:54 +0100 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2021-01-26 12:27:54 +0100 |
commit | 80198c701a7fc09e736ccffe470ee5033ca59a69 (patch) | |
tree | 2e2e816ac19201a5b257626feaa53013bf369d48 /gcc | |
parent | b3cc0c9a6ac2065253203ac33663e28fd25397ff (diff) | |
download | gcc-80198c701a7fc09e736ccffe470ee5033ca59a69.zip gcc-80198c701a7fc09e736ccffe470ee5033ca59a69.tar.gz gcc-80198c701a7fc09e736ccffe470ee5033ca59a69.tar.bz2 |
Commit test case for PR 67539.
gcc/testsuite/ChangeLog:
PR fortran/67539
* gfortran.dg/elemental_assignment_1.f90: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gfortran.dg/elemental_assignment_1.f90 | 59 |
1 files changed, 59 insertions, 0 deletions
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 0000000..23d7643 --- /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 |