Extend source-expr test case
authorTobias Burnus <burnus@net-b.de>
Tue, 16 Oct 2018 21:07:31 +0000 (23:07 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Tue, 16 Oct 2018 21:07:31 +0000 (23:07 +0200)
        PR fortran/67125
        * gfortran.dg/allocate_with_source_26.f90: Extend
        testcase with polymorphic variables.

From-SVN: r265215

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/allocate_with_source_26.f90

index 59bada061f446fd1fa513e556d0649c1068371fb..773e570dd4a2bb92172bc568119226bd4b86e8d3 100644 (file)
@@ -1,3 +1,9 @@
+2018-10-16  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/67125
+       * gfortran.dg/allocate_with_source_26.f90: Extend
+       testcase with polymorphic variables.
+
 2018-10-16  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/67125
index 38127c06bc0723c66629dac07e3466c7f85852d8..28f24fc1e10adcb79f385f9a6f5a80153d201841 100644 (file)
 program p
  implicit none
  integer, allocatable :: a(:), b(:), c(:), d(:), e(:)
+ type t
+   integer :: i
+ end type t
+ class(t), allocatable :: p1(:), p2(:), p3(:), p4(:)
  integer :: vec(6)
 
  vec = [1,2,3,4,5,6]
@@ -21,6 +25,23 @@ program p
  allocate(d, source=[1,2,3,4,5])
  allocate(e, source=vec)
 
+ allocate(p1(3:4))
+ p1(:)%i = [43,56]
+ allocate(p2, source=p1)
+ call do_allocate(p1, size(p1))
+ allocate(p4, source=poly_init())
+
+ if (lbound(p1, 1) /= 3 .or. ubound(p1, 1) /= 4 &
+     .or. lbound(p2, 1) /= 3 .or. ubound(p2, 1) /= 4 &
+     .or. lbound(p3, 1) /= 1 .or. ubound(p3, 1) /= 2 &
+     .or. lbound(p4, 1) /= 7 .or. ubound(p4, 1) /= 8 &
+     .or. p1(3)%i /= 43 .or. p1(4)%i /= 56 &
+     .or. p2(3)%i /= 43 .or. p2(4)%i /= 56 &
+     .or. p3(1)%i /= 43 .or. p3(2)%i /= 56 &
+     .or. p4(7)%i /= 11 .or. p4(8)%i /= 12) then
+   call abort()
+ endif
+
  !write(*,*) lbound(a,1), ubound(a,1) ! prints 1 3
  !write(*,*) lbound(b,1), ubound(b,1) ! prints 1 3
  !write(*,*) lbound(c,1), ubound(c,1) ! prints 3 5
@@ -37,6 +58,18 @@ program p
    
 contains
 
+ subroutine do_allocate(x, n)
+   integer, value :: n
+   class(t), intent(in) :: x(n)
+   allocate(p3, source=x)
+ end subroutine
+
+ function poly_init()
+   class(t), allocatable :: poly_init(:)
+   allocate(poly_init(7:8))
+   poly_init = [t :: t(11), t(12)]
+ end function poly_init
+
  pure function f(i)
   integer, intent(in) :: i
   integer :: f(i)